diff --git a/executor/vmHooks.go b/executor/vmHooks.go index c3acedbcc..31ad90ddb 100644 --- a/executor/vmHooks.go +++ b/executor/vmHooks.go @@ -16,6 +16,7 @@ type VMHooks interface { ManagedMapVMHooks SmallIntVMHooks CryptoVMHooks + UnsafeVMHooks } type MainVMHooks interface { @@ -318,3 +319,11 @@ type CryptoVMHooks interface { ManagedVerifyBLSSignatureShare(keyHandle int32, messageHandle int32, sigHandle int32) int32 ManagedVerifyBLSAggregatedSignature(keyHandle int32, messageHandle int32, sigHandle int32) int32 } + +type UnsafeVMHooks interface { + ActivateUnsafeMode() + DeactivateUnsafeMode() + ManagedGetNumErrors() int32 + ManagedGetErrorWithIndex(index int32, errorHandle int32) + ManagedGetLastError(errorHandle int32) +} diff --git a/executor/wrapper/wrapperVMHooks.go b/executor/wrapper/wrapperVMHooks.go index a9fc6de34..96e2e4cae 100644 --- a/executor/wrapper/wrapperVMHooks.go +++ b/executor/wrapper/wrapperVMHooks.go @@ -2409,3 +2409,44 @@ func (w *WrapperVMHooks) ManagedVerifyBLSAggregatedSignature(keyHandle int32, me w.logger.LogVMHookCallAfter(callInfo) return result } + +// ActivateUnsafeMode VM hook wrapper +func (w *WrapperVMHooks) ActivateUnsafeMode() { + callInfo := "ActivateUnsafeMode()" + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.ActivateUnsafeMode() + w.logger.LogVMHookCallAfter(callInfo) +} + +// DeactivateUnsafeMode VM hook wrapper +func (w *WrapperVMHooks) DeactivateUnsafeMode() { + callInfo := "DeactivateUnsafeMode()" + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.DeactivateUnsafeMode() + w.logger.LogVMHookCallAfter(callInfo) +} + +// ManagedGetNumErrors VM hook wrapper +func (w *WrapperVMHooks) ManagedGetNumErrors() int32 { + callInfo := "ManagedGetNumErrors()" + w.logger.LogVMHookCallBefore(callInfo) + result := w.wrappedVMHooks.ManagedGetNumErrors() + w.logger.LogVMHookCallAfter(callInfo) + return result +} + +// ManagedGetErrorWithIndex VM hook wrapper +func (w *WrapperVMHooks) ManagedGetErrorWithIndex(index int32, errorHandle int32) { + callInfo := fmt.Sprintf("ManagedGetErrorWithIndex(%d, %d)", index, errorHandle) + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.ManagedGetErrorWithIndex(index, errorHandle) + w.logger.LogVMHookCallAfter(callInfo) +} + +// ManagedGetLastError VM hook wrapper +func (w *WrapperVMHooks) ManagedGetLastError(errorHandle int32) { + callInfo := fmt.Sprintf("ManagedGetLastError(%d)", errorHandle) + w.logger.LogVMHookCallBefore(callInfo) + w.wrappedVMHooks.ManagedGetLastError(errorHandle) + w.logger.LogVMHookCallAfter(callInfo) +} diff --git a/go.mod b/go.mod index 905dbbaa9..7d51d3856 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/multiversx/mx-chain-core-go v1.4.0 github.com/multiversx/mx-chain-crypto-go v1.3.0 github.com/multiversx/mx-chain-logger-go v1.1.0 - github.com/multiversx/mx-chain-scenario-go v1.6.0 + github.com/multiversx/mx-chain-scenario-go v1.7.0 github.com/multiversx/mx-chain-storage-go v1.1.0 github.com/multiversx/mx-chain-vm-common-go v1.6.0 github.com/multiversx/mx-components-big-int v1.1.0 @@ -36,6 +36,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect golang.org/x/sys v0.2.0 // indirect google.golang.org/protobuf v1.28.0 // indirect diff --git a/go.sum b/go.sum index 7825dc23d..83273642b 100644 --- a/go.sum +++ b/go.sum @@ -89,8 +89,8 @@ github.com/multiversx/mx-chain-crypto-go v1.3.0 h1:0eK2bkDOMi8VbSPrB1/vGJSYT81IB github.com/multiversx/mx-chain-crypto-go v1.3.0/go.mod h1:nPIkxxzyTP8IquWKds+22Q2OJ9W7LtusC7cAosz7ojM= github.com/multiversx/mx-chain-logger-go v1.1.0 h1:97x84A6L4RfCa6YOx1HpAFxZp1cf/WI0Qh112whgZNM= github.com/multiversx/mx-chain-logger-go v1.1.0/go.mod h1:K9XgiohLwOsNACETMNL0LItJMREuEvTH6NsoXWXWg7g= -github.com/multiversx/mx-chain-scenario-go v1.6.0 h1:cwDFuS1pSc4YXnfiKKDTEb+QDY4fulPQaiRgIebnKxI= -github.com/multiversx/mx-chain-scenario-go v1.6.0/go.mod h1:GrSYu1SnMvsIm9djUz1X13224HcvdY6Nb5KHNT3xZPA= +github.com/multiversx/mx-chain-scenario-go v1.7.0 h1:7hEuvLPDZw2xA7YlzrjORxIK4lTTT34QL6O06JiotWE= +github.com/multiversx/mx-chain-scenario-go v1.7.0/go.mod h1:GrSYu1SnMvsIm9djUz1X13224HcvdY6Nb5KHNT3xZPA= github.com/multiversx/mx-chain-storage-go v1.1.0 h1:M1Y9DqMrJ62s7Zw31+cyuqsnPIvlG4jLBJl5WzeZLe8= github.com/multiversx/mx-chain-storage-go v1.1.0/go.mod h1:o6Jm7cjfPmcc6XpyihYWrd6sx3sgqwurrunw3ZrfyxI= github.com/multiversx/mx-chain-vm-common-go v1.6.0 h1:M2zmf/ptEINciWxYCPLIkwOMTvvzWjELYYB+0MMQ5Gw= @@ -118,6 +118,7 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= diff --git a/integrationTests/json/scenariosFeatures_test.go b/integrationTests/json/scenariosFeatures_test.go index 1c80d0636..a347fa9d7 100644 --- a/integrationTests/json/scenariosFeatures_test.go +++ b/integrationTests/json/scenariosFeatures_test.go @@ -1,7 +1,6 @@ package vmjsonintegrationtest import ( - "path/filepath" "testing" ) @@ -16,18 +15,6 @@ func TestRustAllocFeatures(t *testing.T) { CheckNoError() } -func TestRustBarnardFeatures(t *testing.T) { - // TODO: will get merged into basic-features after barnard mainnet release - if testing.Short() { - t.Skip("not a short test") - } - - ScenariosTest(t). - Folder("features/barnard-features/scenarios"). - Run(). - CheckNoError() -} - func TestRustBasicFeaturesLatest(t *testing.T) { if testing.Short() { t.Skip("not a short test") @@ -41,23 +28,6 @@ func TestRustBasicFeaturesLatest(t *testing.T) { CheckNoError() } -func TestRustBasicFeaturesBarnard(t *testing.T) { - if testing.Short() { - t.Skip("not a short test") - } - - ScenariosTest(t). - Folder("features/basic-features/scenarios"). - Exclude("features/basic-features/scenarios/storage_mapper_fungible_token.scen.json"). - Exclude("features/basic-features/scenarios/get_shard_of_address.scen.json"). - ReplacePath( - "../output/basic-features.mxsc.json", - filepath.Join(getTestRoot(), "features/basic-features/output/basic-features-barnard.mxsc.json"), - ). - Run(). - CheckNoError() -} - func TestRustBasicFeaturesNoSmallIntApi(t *testing.T) { if testing.Short() { t.Skip("not a short test") @@ -125,26 +95,6 @@ func TestRustPayableFeatures(t *testing.T) { CheckNoError() } -func TestRustPayableFeaturesBarnard(t *testing.T) { - if testing.Short() { - t.Skip("not a short test") - } - - // we run the exact same tests, but on a different compiled contract, - // this contract uses the new "managedGetAllTransfersCallValue" VM hook, - // which is only available in Barnard - // this will become the only test - - ScenariosTest(t). - Folder("features/payable-features/scenarios"). - ReplacePath( - "../output/payable-features.mxsc.json", - filepath.Join(getTestRoot(), "features/payable-features/output/payable-features-barnard.mxsc.json"), - ). - Run(). - CheckNoError() -} - func TestRustComposability(t *testing.T) { ScenariosTest(t). Folder("features/composability/scenarios"). @@ -181,3 +131,11 @@ func TestBalanceAfterGet(t *testing.T) { Run(). CheckNoError() } + +func TestNFTDecode(t *testing.T) { + ScenariosTest(t). + Folder("features/composability/scenarios"). + File("forwarder_nft_decode_complex_attributes.scen.json"). + Run(). + CheckNoError() +} diff --git a/mock/context/executorMockFunc.go b/mock/context/executorMockFunc.go index c79ea34e2..0791f23a4 100644 --- a/mock/context/executorMockFunc.go +++ b/mock/context/executorMockFunc.go @@ -286,4 +286,9 @@ var functionNames = map[string]struct{}{ "managedVerifySecp256r1": empty, "managedVerifyBLSSignatureShare": empty, "managedVerifyBLSAggregatedSignature": empty, + "activateUnsafeMode": empty, + "deactivateUnsafeMode": empty, + "managedGetNumErrors": empty, + "managedGetErrorWithIndex": empty, + "managedGetLastError": empty, } diff --git a/mock/context/runtimeContextMock.go b/mock/context/runtimeContextMock.go index 7f6771cc6..cf45c0de5 100644 --- a/mock/context/runtimeContextMock.go +++ b/mock/context/runtimeContextMock.go @@ -19,6 +19,7 @@ type RuntimeContextMock struct { CallFunction string VMType []byte ReadOnlyFlag bool + UnsafeModeFlag bool VerifyCode bool CurrentBreakpointValue vmhost.BreakpointValue PointsUsed uint64 @@ -52,7 +53,7 @@ func (r *RuntimeContextMock) GetVMExecutor() executor.Executor { } // ReplaceVMExecutor mocked method -func (context *RuntimeContextMock) ReplaceVMExecutor(vmExecutor executor.Executor) { +func (context *RuntimeContextMock) ReplaceVMExecutor(_ executor.Executor) { } // GetInstanceTracker mocked method @@ -196,14 +197,8 @@ func (r *RuntimeContextMock) GetOriginalTxHash() []byte { return r.OriginalTxHash } -// ExtractCodeUpgradeFromArgs mocked method -func (r *RuntimeContextMock) ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) { - arguments := r.VMInput.Arguments - if len(arguments) < 2 { - panic("ExtractCodeUpgradeFromArgs: bad test setup") - } - - return r.VMInput.Arguments[0], r.VMInput.Arguments[1], nil +// RemoveCodeUpgradeFromArgs mocked method +func (r *RuntimeContextMock) RemoveCodeUpgradeFromArgs() { } // SignalExit mocked method @@ -259,7 +254,7 @@ func (r *RuntimeContextMock) GetInstance() executor.Instance { } // GetWarmInstance mocked method -func (r *RuntimeContextMock) GetWarmInstance(codeHash []byte) (executor.Instance, bool) { +func (r *RuntimeContextMock) GetWarmInstance(_ []byte) (executor.Instance, bool) { return nil, false } @@ -320,6 +315,16 @@ func (r *RuntimeContextMock) UseGasBoundedShouldFailExecution() bool { return true } +// IsUnsafeMode mocked method +func (r *RuntimeContextMock) IsUnsafeMode() bool { + return r.UnsafeModeFlag +} + +// SetUnsafeMode mocked method +func (r *RuntimeContextMock) SetUnsafeMode(unsafeMode bool) { + r.UnsafeModeFlag = unsafeMode +} + // FailExecution mocked method func (r *RuntimeContextMock) FailExecution(_ error) { } diff --git a/mock/context/runtimeContextWrapper.go b/mock/context/runtimeContextWrapper.go index 86c1b85cc..5f7626d80 100644 --- a/mock/context/runtimeContextWrapper.go +++ b/mock/context/runtimeContextWrapper.go @@ -42,7 +42,7 @@ type RuntimeContextWrapper struct { // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) GetOriginalTxHashFunc func() []byte // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) - ExtractCodeUpgradeFromArgsFunc func() ([]byte, []byte, error) + RemoveCodeUpgradeFromArgsFunc func() // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) SignalUserErrorFunc func(message string) // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) @@ -72,6 +72,10 @@ type RuntimeContextWrapper struct { // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) SetReadOnlyFunc func(readOnly bool) // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) + IsUnsafeModeFunc func() bool + // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) + SetUnsafeModeFunc func(readOnly bool) + // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) StartWasmerInstanceFunc func(contract []byte, gasLimit uint64, newCode bool) error // function that will be called by the corresponding RuntimeContext function implementation (by default this will call the same wrapped context function) ClearWarmInstanceCacheFunc func() @@ -184,8 +188,8 @@ func NewRuntimeContextWrapper(inputRuntimeContext *vmhost.RuntimeContext) *Runti return runtimeWrapper.runtimeContext.GetOriginalTxHash() } - runtimeWrapper.ExtractCodeUpgradeFromArgsFunc = func() ([]byte, []byte, error) { - return runtimeWrapper.runtimeContext.ExtractCodeUpgradeFromArgs() + runtimeWrapper.RemoveCodeUpgradeFromArgsFunc = func() { + runtimeWrapper.runtimeContext.RemoveCodeUpgradeFromArgs() } runtimeWrapper.SignalUserErrorFunc = func(message string) { @@ -224,6 +228,14 @@ func NewRuntimeContextWrapper(inputRuntimeContext *vmhost.RuntimeContext) *Runti runtimeWrapper.runtimeContext.SetReadOnly(readOnly) } + runtimeWrapper.IsUnsafeModeFunc = func() bool { + return runtimeWrapper.runtimeContext.IsUnsafeMode() + } + + runtimeWrapper.SetUnsafeModeFunc = func(unSafe bool) { + runtimeWrapper.runtimeContext.SetUnsafeMode(unSafe) + } + runtimeWrapper.StartWasmerInstanceFunc = func(contract []byte, gasLimit uint64, newCode bool) error { return runtimeWrapper.runtimeContext.StartWasmerInstance(contract, gasLimit, newCode) } @@ -374,9 +386,9 @@ func (contextWrapper *RuntimeContextWrapper) GetOriginalTxHash() []byte { return contextWrapper.GetOriginalTxHashFunc() } -// ExtractCodeUpgradeFromArgs calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext -func (contextWrapper *RuntimeContextWrapper) ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) { - return contextWrapper.ExtractCodeUpgradeFromArgsFunc() +// RemoveCodeUpgradeFromArgs calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext +func (contextWrapper *RuntimeContextWrapper) RemoveCodeUpgradeFromArgs() { + contextWrapper.RemoveCodeUpgradeFromArgsFunc() } // SignalUserError calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext @@ -429,6 +441,16 @@ func (contextWrapper *RuntimeContextWrapper) SetReadOnly(readOnly bool) { contextWrapper.SetReadOnlyFunc(readOnly) } +// IsUnsafeMode calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext +func (contextWrapper *RuntimeContextWrapper) IsUnsafeMode() bool { + return contextWrapper.IsUnsafeModeFunc() +} + +// SetUnsafeMode calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext +func (contextWrapper *RuntimeContextWrapper) SetUnsafeMode(unsafeMode bool) { + contextWrapper.SetUnsafeModeFunc(unsafeMode) +} + // StartWasmerInstance calls corresponding xxxFunc function, that by default in turn calls the original method of the wrapped RuntimeContext func (contextWrapper *RuntimeContextWrapper) StartWasmerInstance(contract []byte, gasLimit uint64, newCode bool) error { return contextWrapper.StartWasmerInstanceFunc(contract, gasLimit, newCode) diff --git a/mock/context/vmHostStub.go b/mock/context/vmHostStub.go index 0ef8339bb..21504f6ca 100644 --- a/mock/context/vmHostStub.go +++ b/mock/context/vmHostStub.go @@ -1,7 +1,9 @@ package mock import ( + "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/data/vm" + "github.com/multiversx/mx-chain-scenario-go/worldmock" vmcommon "github.com/multiversx/mx-chain-vm-common-go" "github.com/multiversx/mx-chain-vm-go/config" "github.com/multiversx/mx-chain-vm-go/crypto" @@ -165,7 +167,9 @@ func (vhs *VMHostStub) EnableEpochsHandler() vmhost.EnableEpochsHandler { if vhs.EnableEpochsHandlerCalled != nil { return vhs.EnableEpochsHandlerCalled() } - return nil + return &worldmock.EnableEpochsHandlerStub{IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool { + return true + }} } // Async mocked method diff --git a/mock/contracts/deployerSimpleSC.go b/mock/contracts/deployerSimpleSC.go index 8f73cc361..51639b0b3 100644 --- a/mock/contracts/deployerSimpleSC.go +++ b/mock/contracts/deployerSimpleSC.go @@ -1,6 +1,9 @@ package contracts import ( + "errors" + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/multiversx/mx-chain-vm-go/vmhost" "math/big" mock "github.com/multiversx/mx-chain-vm-go/mock/context" @@ -39,7 +42,12 @@ func DeployContractFromSourceMock(instanceMock *mock.InstanceMock, _ interface{} ) if err != nil { - host.Runtime().FailExecution(err) + if errors.Is(err, vmhost.ErrNotEnoughGas) { + host.Output().SetReturnCode(vmcommon.OutOfGas) + } else { + host.Runtime().FailExecution(err) + } + return instance } diff --git a/mock/mockery/AsnycContext.go b/mock/mockery/AsnycContext.go new file mode 100644 index 000000000..8e5baf1ed --- /dev/null +++ b/mock/mockery/AsnycContext.go @@ -0,0 +1,692 @@ +package mockery + +import ( + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + mock "github.com/stretchr/testify/mock" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockAsyncContext is an autogenerated mock type for the AsyncContext type +type MockAsyncContext struct { + mock.Mock +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockAsyncContext) ClearStateStack() { + _m.Called() +} + +// Clone provides a mock function with no fields +func (_m *MockAsyncContext) Clone() vmhost.AsyncContext { + ret := _m.Called() + + if len(ret) == 0 { + return _m + } + + var r0 vmhost.AsyncContext + if rf, ok := ret.Get(0).(func() vmhost.AsyncContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.AsyncContext) + } + } + + return r0 +} + +// CompleteChildConditional provides a mock function with given fields: isChildComplete, callID, gasToAccumulate +func (_m *MockAsyncContext) CompleteChildConditional(isChildComplete bool, callID []byte, gasToAccumulate uint64) error { + ret := _m.Called(isChildComplete, callID, gasToAccumulate) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(bool, []byte, uint64) error); ok { + r0 = rf(isChildComplete, callID, gasToAccumulate) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// DeleteFromCallID provides a mock function with given fields: address +func (_m *MockAsyncContext) DeleteFromCallID(address []byte) error { + ret := _m.Called(address) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte) error); ok { + r0 = rf(address) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Execute provides a mock function with no fields +func (_m *MockAsyncContext) Execute() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ExecuteLocalCallbackAndFinishOutput provides a mock function with given fields: asyncCall, vmOutput, destinationCallInput, gasAccumulated, err +func (_m *MockAsyncContext) ExecuteLocalCallbackAndFinishOutput(asyncCall *vmhost.AsyncCall, vmOutput *vmcommon.VMOutput, gasAccumulated uint64, err error) (bool, *vmcommon.VMOutput) { + ret := _m.Called(asyncCall, vmOutput, gasAccumulated, err) + + if len(ret) == 0 { + return true, &vmcommon.VMOutput{} + } + + var r0 bool + var r1 *vmcommon.VMOutput + if rf, ok := ret.Get(0).(func(*vmhost.AsyncCall, *vmcommon.VMOutput, uint64, error) (bool, *vmcommon.VMOutput)); ok { + return rf(asyncCall, vmOutput, gasAccumulated, err) + } + if rf, ok := ret.Get(0).(func(*vmhost.AsyncCall, *vmcommon.VMOutput, uint64, error) bool); ok { + r0 = rf(asyncCall, vmOutput, gasAccumulated, err) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func(*vmhost.AsyncCall, *vmcommon.VMOutput, uint64, error) *vmcommon.VMOutput); ok { + r1 = rf(asyncCall, vmOutput, gasAccumulated, err) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*vmcommon.VMOutput) + } + } + + return r0, r1 +} + +// GetAsyncCallByCallID provides a mock function with given fields: callID +func (_m *MockAsyncContext) GetAsyncCallByCallID(callID []byte) vmhost.AsyncCallLocation { + ret := _m.Called(callID) + + if len(ret) == 0 { + return nil + } + + var r0 vmhost.AsyncCallLocation + if rf, ok := ret.Get(0).(func([]byte) vmhost.AsyncCallLocation); ok { + r0 = rf(callID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.AsyncCallLocation) + } + } + + return r0 +} + +// GetCallGroup provides a mock function with given fields: groupID +func (_m *MockAsyncContext) GetCallGroup(groupID string) (*vmhost.AsyncCallGroup, bool) { + ret := _m.Called(groupID) + + if len(ret) == 0 { + return &vmhost.AsyncCallGroup{}, true + } + + var r0 *vmhost.AsyncCallGroup + var r1 bool + if rf, ok := ret.Get(0).(func(string) (*vmhost.AsyncCallGroup, bool)); ok { + return rf(groupID) + } + if rf, ok := ret.Get(0).(func(string) *vmhost.AsyncCallGroup); ok { + r0 = rf(groupID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmhost.AsyncCallGroup) + } + } + + if rf, ok := ret.Get(1).(func(string) bool); ok { + r1 = rf(groupID) + } else { + r1 = ret.Get(1).(bool) + } + + return r0, r1 +} + +// GetCallID provides a mock function with no fields +func (_m *MockAsyncContext) GetCallID() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("callID") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetCallbackAsyncInitiatorCallID provides a mock function with no fields +func (_m *MockAsyncContext) GetCallbackAsyncInitiatorCallID() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("callID") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetCallbackClosure provides a mock function with no fields +func (_m *MockAsyncContext) GetCallbackClosure() ([]byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("callID"), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func() ([]byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetCallerAddress provides a mock function with no fields +func (_m *MockAsyncContext) GetCallerAddress() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("caller") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetCallerCallID provides a mock function with no fields +func (_m *MockAsyncContext) GetCallerCallID() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("callID") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetGasAccumulated provides a mock function with no fields +func (_m *MockAsyncContext) GetGasAccumulated() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetParentAddress provides a mock function with no fields +func (_m *MockAsyncContext) GetParentAddress() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("parent") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetReturnData provides a mock function with no fields +func (_m *MockAsyncContext) GetReturnData() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// HasCallback provides a mock function with no fields +func (_m *MockAsyncContext) HasCallback() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// HasLegacyGroup provides a mock function with no fields +func (_m *MockAsyncContext) HasLegacyGroup() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// HasPendingCallGroups provides a mock function with no fields +func (_m *MockAsyncContext) HasPendingCallGroups() bool { + ret := _m.Called() + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockAsyncContext) InitState() { + _m.Called() +} + +// InitStateFromInput provides a mock function with given fields: input +func (_m *MockAsyncContext) InitStateFromInput(input *vmcommon.ContractCallInput) error { + ret := _m.Called(input) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) error); ok { + r0 = rf(input) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// IsComplete provides a mock function with no fields +func (_m *MockAsyncContext) IsComplete() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsCrossShard provides a mock function with no fields +func (_m *MockAsyncContext) IsCrossShard() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// LoadParentContext provides a mock function with no fields +func (_m *MockAsyncContext) LoadParentContext() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// LoadParentContextFromStackOrStorage provides a mock function with no fields +func (_m *MockAsyncContext) LoadParentContextFromStackOrStorage() (vmhost.AsyncContext, error) { + ret := _m.Called() + + if len(ret) == 0 { + return _m, nil + } + + var r0 vmhost.AsyncContext + var r1 error + if rf, ok := ret.Get(0).(func() (vmhost.AsyncContext, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() vmhost.AsyncContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.AsyncContext) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// NotifyChildIsComplete provides a mock function with given fields: callID, gasToAccumulate +func (_m *MockAsyncContext) NotifyChildIsComplete(callID []byte, gasToAccumulate uint64) error { + ret := _m.Called(callID, gasToAccumulate) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte, uint64) error); ok { + r0 = rf(callID, gasToAccumulate) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// PopDiscard provides a mock function with no fields +func (_m *MockAsyncContext) PopDiscard() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockAsyncContext) PopSetActiveState() { + _m.Called() +} + +// PushState provides a mock function with no fields +func (_m *MockAsyncContext) PushState() { + _m.Called() +} + +// RegisterAsyncCall provides a mock function with given fields: groupID, call +func (_m *MockAsyncContext) RegisterAsyncCall(groupID string, call *vmhost.AsyncCall) error { + ret := _m.Called(groupID, call) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, *vmhost.AsyncCall) error); ok { + r0 = rf(groupID, call) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// RegisterLegacyAsyncCall provides a mock function with given fields: address, data, value +func (_m *MockAsyncContext) RegisterLegacyAsyncCall(address []byte, data []byte, value []byte) error { + ret := _m.Called(address, data, value) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte, []byte, []byte) error); ok { + r0 = rf(address, data, value) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Save provides a mock function with no fields +func (_m *MockAsyncContext) Save() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// SetAsyncArgumentsForCall provides a mock function with given fields: input +func (_m *MockAsyncContext) SetAsyncArgumentsForCall(input *vmcommon.ContractCallInput) { + _m.Called(input) +} + +// SetAsyncArgumentsForCallback provides a mock function with given fields: input, asyncCall, gasAccumulated +func (_m *MockAsyncContext) SetAsyncArgumentsForCallback(input *vmcommon.ContractCallInput, asyncCall *vmhost.AsyncCall, gasAccumulated uint64) { + _m.Called(input, asyncCall, gasAccumulated) +} + +// SetCallID provides a mock function with given fields: callID +func (_m *MockAsyncContext) SetCallID(callID []byte) { + _m.Called(callID) +} + +// SetCallIDForCallInGroup provides a mock function with given fields: groupIndex, callIndex, callID +func (_m *MockAsyncContext) SetCallIDForCallInGroup(groupIndex int, callIndex int, callID []byte) { + _m.Called(groupIndex, callIndex, callID) +} + +// SetCallbackParentCall provides a mock function with given fields: asyncCall +func (_m *MockAsyncContext) SetCallbackParentCall(asyncCall *vmhost.AsyncCall) { + _m.Called(asyncCall) +} + +// SetContextCallback provides a mock function with given fields: callbackName, data, gas +func (_m *MockAsyncContext) SetContextCallback(callbackName string, data []byte, gas uint64) error { + ret := _m.Called(callbackName, data, gas) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, []byte, uint64) error); ok { + r0 = rf(callbackName, data, gas) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// SetResults provides a mock function with given fields: vmOutput +func (_m *MockAsyncContext) SetResults(vmOutput *vmcommon.VMOutput) { + _m.Called(vmOutput) +} + +// SetReturnData provides a mock function with given fields: data +func (_m *MockAsyncContext) SetReturnData(data []byte) { + _m.Called(data) +} + +// UpdateCurrentAsyncCallStatus provides a mock function with given fields: address, callID, vmInput +func (_m *MockAsyncContext) UpdateCurrentAsyncCallStatus(address []byte, callID []byte, vmInput *vmcommon.VMInput) (*vmhost.AsyncCall, bool, error) { + ret := _m.Called(address, callID, vmInput) + + if len(ret) == 0 { + return &vmhost.AsyncCall{}, false, nil + } + + var r0 *vmhost.AsyncCall + var r1 bool + var r2 error + if rf, ok := ret.Get(0).(func([]byte, []byte, *vmcommon.VMInput) (*vmhost.AsyncCall, bool, error)); ok { + return rf(address, callID, vmInput) + } + if rf, ok := ret.Get(0).(func([]byte, []byte, *vmcommon.VMInput) *vmhost.AsyncCall); ok { + r0 = rf(address, callID, vmInput) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmhost.AsyncCall) + } + } + + if rf, ok := ret.Get(1).(func([]byte, []byte, *vmcommon.VMInput) bool); ok { + r1 = rf(address, callID, vmInput) + } else { + r1 = ret.Get(1).(bool) + } + + if rf, ok := ret.Get(2).(func([]byte, []byte, *vmcommon.VMInput) error); ok { + r2 = rf(address, callID, vmInput) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// NewMockAsyncContext creates a new instance of MockAsyncContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockAsyncContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockAsyncContext { + mock := &MockAsyncContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/BlockchainContext.go b/mock/mockery/BlockchainContext.go new file mode 100644 index 000000000..f8af64b7b --- /dev/null +++ b/mock/mockery/BlockchainContext.go @@ -0,0 +1,898 @@ +package mockery + +import ( + big "math/big" + + esdt "github.com/multiversx/mx-chain-core-go/data/esdt" + mock "github.com/stretchr/testify/mock" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" +) + +// MockBlockchainContext is an autogenerated mock type for the BlockchainContext type +type MockBlockchainContext struct { + mock.Mock +} + +// AccountExists provides a mock function with given fields: addr +func (_m *MockBlockchainContext) AccountExists(addr []byte) bool { + ret := _m.Called(addr) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(addr) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// BlockHash provides a mock function with given fields: number +func (_m *MockBlockchainContext) BlockHash(number uint64) []byte { + ret := _m.Called(number) + + if len(ret) == 0 { + return []byte("hash") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func(uint64) []byte); ok { + r0 = rf(number) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// ClearCompiledCodes provides a mock function with no fields +func (_m *MockBlockchainContext) ClearCompiledCodes() { + _m.Called() +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockBlockchainContext) ClearStateStack() { + _m.Called() +} + +// CurrentEpoch provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentEpoch() uint32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func() uint32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// CurrentNonce provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentNonce() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// CurrentRandomSeed provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentRandomSeed() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("hash") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// CurrentRound provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentRound() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// CurrentTimeStamp provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentTimeStamp() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// CurrentTimeStampMs provides a mock function with no fields +func (_m *MockBlockchainContext) CurrentTimeStampMs() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1000 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// EpochStartBlockNonce provides a mock function with no fields +func (_m *MockBlockchainContext) EpochStartBlockNonce() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// EpochStartBlockRound provides a mock function with no fields +func (_m *MockBlockchainContext) EpochStartBlockRound() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// EpochStartBlockTimeStampMs provides a mock function with no fields +func (_m *MockBlockchainContext) EpochStartBlockTimeStampMs() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// ExecuteSmartContractCallOnOtherVM provides a mock function with given fields: input +func (_m *MockBlockchainContext) ExecuteSmartContractCallOnOtherVM(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error) { + ret := _m.Called(input) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, nil + } + + var r0 *vmcommon.VMOutput + var r1 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) (*vmcommon.VMOutput, error)); ok { + return rf(input) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) *vmcommon.VMOutput); ok { + r0 = rf(input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCallInput) error); ok { + r1 = rf(input) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetBalance provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetBalance(addr []byte) []byte { + ret := _m.Called(addr) + + if len(ret) == 0 { + return big.NewInt(1).Bytes() + } + + var r0 []byte + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(addr) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetBalanceBigInt provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetBalanceBigInt(addr []byte) *big.Int { + ret := _m.Called(addr) + + if len(ret) == 0 { + return big.NewInt(1) + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func([]byte) *big.Int); ok { + r0 = rf(addr) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// GetCode provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetCode(addr []byte) ([]byte, error) { + ret := _m.Called(addr) + + if len(ret) == 0 { + return []byte("code"), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func([]byte) ([]byte, error)); ok { + return rf(addr) + } + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(addr) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte) error); ok { + r1 = rf(addr) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetCodeHash provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetCodeHash(addr []byte) []byte { + ret := _m.Called(addr) + + if len(ret) == 0 { + return []byte("hash") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(addr) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetCodeSize provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetCodeSize(addr []byte) (int32, error) { + ret := _m.Called(addr) + + if len(ret) == 0 { + return 1, nil + } + + var r0 int32 + var r1 error + if rf, ok := ret.Get(0).(func([]byte) (int32, error)); ok { + return rf(addr) + } + if rf, ok := ret.Get(0).(func([]byte) int32); ok { + r0 = rf(addr) + } else { + r0 = ret.Get(0).(int32) + } + + if rf, ok := ret.Get(1).(func([]byte) error); ok { + r1 = rf(addr) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetCompiledCode provides a mock function with given fields: codeHash +func (_m *MockBlockchainContext) GetCompiledCode(codeHash []byte) (bool, []byte) { + ret := _m.Called(codeHash) + + if len(ret) == 0 { + return true, []byte("hash") + } + + var r0 bool + var r1 []byte + if rf, ok := ret.Get(0).(func([]byte) (bool, []byte)); ok { + return rf(codeHash) + } + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(codeHash) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func([]byte) []byte); ok { + r1 = rf(codeHash) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).([]byte) + } + } + + return r0, r1 +} + +// GetESDTToken provides a mock function with given fields: address, tokenID, nonce +func (_m *MockBlockchainContext) GetESDTToken(address []byte, tokenID []byte, nonce uint64) (*esdt.ESDigitalToken, error) { + ret := _m.Called(address, tokenID, nonce) + + if len(ret) == 0 { + return &esdt.ESDigitalToken{Value: big.NewInt(0)}, nil + } + + var r0 *esdt.ESDigitalToken + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte, uint64) (*esdt.ESDigitalToken, error)); ok { + return rf(address, tokenID, nonce) + } + if rf, ok := ret.Get(0).(func([]byte, []byte, uint64) *esdt.ESDigitalToken); ok { + r0 = rf(address, tokenID, nonce) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*esdt.ESDigitalToken) + } + } + + if rf, ok := ret.Get(1).(func([]byte, []byte, uint64) error); ok { + r1 = rf(address, tokenID, nonce) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetNonce provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetNonce(addr []byte) (uint64, error) { + ret := _m.Called(addr) + + if len(ret) == 0 { + return 1, nil + } + + var r0 uint64 + var r1 error + if rf, ok := ret.Get(0).(func([]byte) (uint64, error)); ok { + return rf(addr) + } + if rf, ok := ret.Get(0).(func([]byte) uint64); ok { + r0 = rf(addr) + } else { + r0 = ret.Get(0).(uint64) + } + + if rf, ok := ret.Get(1).(func([]byte) error); ok { + r1 = rf(addr) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetOwnerAddress provides a mock function with no fields +func (_m *MockBlockchainContext) GetOwnerAddress() ([]byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("address"), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func() ([]byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetShardOfAddress provides a mock function with given fields: addr +func (_m *MockBlockchainContext) GetShardOfAddress(addr []byte) uint32 { + ret := _m.Called(addr) + + if len(ret) == 0 { + return 0 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func([]byte) uint32); ok { + r0 = rf(addr) + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// GetSnapshot provides a mock function with no fields +func (_m *MockBlockchainContext) GetSnapshot() int { + ret := _m.Called() + + if len(ret) == 0 { + return 0 + } + + var r0 int + if rf, ok := ret.Get(0).(func() int); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(int) + } + + return r0 +} + +// GetStateRootHash provides a mock function with no fields +func (_m *MockBlockchainContext) GetStateRootHash() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("root") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetUserAccount provides a mock function with given fields: address +func (_m *MockBlockchainContext) GetUserAccount(address []byte) (vmcommon.UserAccountHandler, error) { + ret := _m.Called(address) + + if len(ret) == 0 { + panic("no return value specified for GetUserAccount") + } + + var r0 vmcommon.UserAccountHandler + var r1 error + if rf, ok := ret.Get(0).(func([]byte) (vmcommon.UserAccountHandler, error)); ok { + return rf(address) + } + if rf, ok := ret.Get(0).(func([]byte) vmcommon.UserAccountHandler); ok { + r0 = rf(address) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmcommon.UserAccountHandler) + } + } + + if rf, ok := ret.Get(1).(func([]byte) error); ok { + r1 = rf(address) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// IncreaseNonce provides a mock function with given fields: addr +func (_m *MockBlockchainContext) IncreaseNonce(addr []byte) { + _m.Called(addr) +} + +// InitState provides a mock function with no fields +func (_m *MockBlockchainContext) InitState() { + _m.Called() +} + +// IsLimitedTransfer provides a mock function with given fields: tokenID +func (_m *MockBlockchainContext) IsLimitedTransfer(tokenID []byte) bool { + ret := _m.Called(tokenID) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(tokenID) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsPaused provides a mock function with given fields: tokenID +func (_m *MockBlockchainContext) IsPaused(tokenID []byte) bool { + ret := _m.Called(tokenID) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(tokenID) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsPayable provides a mock function with given fields: sndAddress, rcvAddress +func (_m *MockBlockchainContext) IsPayable(sndAddress []byte, rcvAddress []byte) (bool, error) { + ret := _m.Called(sndAddress, rcvAddress) + + if len(ret) == 0 { + return true, nil + } + + var r0 bool + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte) (bool, error)); ok { + return rf(sndAddress, rcvAddress) + } + if rf, ok := ret.Get(0).(func([]byte, []byte) bool); ok { + r0 = rf(sndAddress, rcvAddress) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func([]byte, []byte) error); ok { + r1 = rf(sndAddress, rcvAddress) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// IsSmartContract provides a mock function with given fields: addr +func (_m *MockBlockchainContext) IsSmartContract(addr []byte) bool { + ret := _m.Called(addr) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(addr) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// LastEpoch provides a mock function with no fields +func (_m *MockBlockchainContext) LastEpoch() uint32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func() uint32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// LastNonce provides a mock function with no fields +func (_m *MockBlockchainContext) LastNonce() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// LastRandomSeed provides a mock function with no fields +func (_m *MockBlockchainContext) LastRandomSeed() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("random") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// LastRound provides a mock function with no fields +func (_m *MockBlockchainContext) LastRound() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// LastTimeStamp provides a mock function with no fields +func (_m *MockBlockchainContext) LastTimeStamp() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// LastTimeStampMs provides a mock function with no fields +func (_m *MockBlockchainContext) LastTimeStampMs() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1000 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// NewAddress provides a mock function with given fields: creatorAddress +func (_m *MockBlockchainContext) NewAddress(creatorAddress []byte) ([]byte, error) { + ret := _m.Called(creatorAddress) + + if len(ret) == 0 { + return []byte("addr"), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func([]byte) ([]byte, error)); ok { + return rf(creatorAddress) + } + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(creatorAddress) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte) error); ok { + r1 = rf(creatorAddress) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// PopDiscard provides a mock function with no fields +func (_m *MockBlockchainContext) PopDiscard() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockBlockchainContext) PopSetActiveState() { + _m.Called() +} + +// ProcessBuiltInFunction provides a mock function with given fields: input +func (_m *MockBlockchainContext) ProcessBuiltInFunction(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error) { + ret := _m.Called(input) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, nil + } + + var r0 *vmcommon.VMOutput + var r1 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) (*vmcommon.VMOutput, error)); ok { + return rf(input) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) *vmcommon.VMOutput); ok { + r0 = rf(input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCallInput) error); ok { + r1 = rf(input) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// PushState provides a mock function with no fields +func (_m *MockBlockchainContext) PushState() { + _m.Called() +} + +// RevertToSnapshot provides a mock function with given fields: snapshot +func (_m *MockBlockchainContext) RevertToSnapshot(snapshot int) { + _m.Called(snapshot) +} + +// RoundTime provides a mock function with no fields +func (_m *MockBlockchainContext) RoundTime() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 0 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// SaveCompiledCode provides a mock function with given fields: codeHash, code +func (_m *MockBlockchainContext) SaveCompiledCode(codeHash []byte, code []byte) { + _m.Called(codeHash, code) +} + +// NewMockBlockchainContext creates a new instance of MockBlockchainContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockBlockchainContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockBlockchainContext { + mock := &MockBlockchainContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/Instance.go b/mock/mockery/Instance.go new file mode 100644 index 000000000..443aa36cd --- /dev/null +++ b/mock/mockery/Instance.go @@ -0,0 +1,433 @@ +package mockery + +import ( + executor "github.com/multiversx/mx-chain-vm-go/executor" + mock "github.com/stretchr/testify/mock" +) + +// MockInstance is an autogenerated mock type for the Instance type +type MockInstance struct { + mock.Mock +} + +// Cache provides a mock function with no fields +func (_m *MockInstance) Cache() ([]byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + return []byte("cache"), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func() ([]byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CallFunction provides a mock function with given fields: functionName +func (_m *MockInstance) CallFunction(functionName string) error { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(functionName) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Clean provides a mock function with no fields +func (_m *MockInstance) Clean() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// GetBreakpointValue provides a mock function with no fields +func (_m *MockInstance) GetBreakpointValue() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetFunctionNames provides a mock function with no fields +func (_m *MockInstance) GetFunctionNames() []string { + ret := _m.Called() + + if len(ret) == 0 { + return []string{} + } + + var r0 []string + if rf, ok := ret.Get(0).(func() []string); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + return r0 +} + +// GetPointsUsed provides a mock function with no fields +func (_m *MockInstance) GetPointsUsed() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetVMHooksPtr provides a mock function with no fields +func (_m *MockInstance) GetVMHooksPtr() uintptr { + ret := _m.Called() + + if len(ret) == 0 { + return uintptr(1) + } + + var r0 uintptr + if rf, ok := ret.Get(0).(func() uintptr); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uintptr) + } + + return r0 +} + +// HasFunction provides a mock function with given fields: functionName +func (_m *MockInstance) HasFunction(functionName string) bool { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(functionName) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// HasMemory provides a mock function with no fields +func (_m *MockInstance) HasMemory() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ID provides a mock function with no fields +func (_m *MockInstance) ID() string { + ret := _m.Called() + + if len(ret) == 0 { + return "ID" + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// IsAlreadyCleaned provides a mock function with no fields +func (_m *MockInstance) IsAlreadyCleaned() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsFunctionImported provides a mock function with given fields: name +func (_m *MockInstance) IsFunctionImported(name string) bool { + ret := _m.Called(name) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(name) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsInterfaceNil provides a mock function with no fields +func (_m *MockInstance) IsInterfaceNil() bool { + ret := _m.Called() + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// MemDump provides a mock function with no fields +func (_m *MockInstance) MemDump() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// MemGrow provides a mock function with given fields: pages +func (_m *MockInstance) MemGrow(pages uint32) error { + ret := _m.Called(pages) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(uint32) error); ok { + r0 = rf(pages) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// MemLength provides a mock function with no fields +func (_m *MockInstance) MemLength() uint32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func() uint32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// MemLoad provides a mock function with given fields: memPtr, length +func (_m *MockInstance) MemLoad(memPtr executor.MemPtr, length int32) ([]byte, error) { + ret := _m.Called(memPtr, length) + + if len(ret) == 0 { + return []byte{}, nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(executor.MemPtr, int32) ([]byte, error)); ok { + return rf(memPtr, length) + } + if rf, ok := ret.Get(0).(func(executor.MemPtr, int32) []byte); ok { + r0 = rf(memPtr, length) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(executor.MemPtr, int32) error); ok { + r1 = rf(memPtr, length) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MemStore provides a mock function with given fields: memPtr, data +func (_m *MockInstance) MemStore(memPtr executor.MemPtr, data []byte) error { + ret := _m.Called(memPtr, data) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(executor.MemPtr, []byte) error); ok { + r0 = rf(memPtr, data) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Reset provides a mock function with no fields +func (_m *MockInstance) Reset() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// SetBreakpointValue provides a mock function with given fields: value +func (_m *MockInstance) SetBreakpointValue(value uint64) { + _m.Called(value) +} + +// SetGasLimit provides a mock function with given fields: gasLimit +func (_m *MockInstance) SetGasLimit(gasLimit uint64) { + _m.Called(gasLimit) +} + +// SetPointsUsed provides a mock function with given fields: points +func (_m *MockInstance) SetPointsUsed(points uint64) { + _m.Called(points) +} + +// SetVMHooksPtr provides a mock function with given fields: vmHooksPtr +func (_m *MockInstance) SetVMHooksPtr(vmHooksPtr uintptr) { + _m.Called(vmHooksPtr) +} + +// ValidateFunctionArities provides a mock function with no fields +func (_m *MockInstance) ValidateFunctionArities() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// NewMockInstance creates a new instance of MockInstance. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockInstance(t interface { + mock.TestingT + Cleanup(func()) +}) *MockInstance { + mock := &MockInstance{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/ManagedTypesContext.go b/mock/mockery/ManagedTypesContext.go new file mode 100644 index 000000000..f6e67661a --- /dev/null +++ b/mock/mockery/ManagedTypesContext.go @@ -0,0 +1,1016 @@ +package mockery + +import ( + elliptic "crypto/elliptic" + big "math/big" + + io "io" + + mock "github.com/stretchr/testify/mock" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" +) + +// MockManagedTypesContext is an autogenerated mock type for the ManagedTypesContext type +type MockManagedTypesContext struct { + mock.Mock +} + +// AddBackTransfers provides a mock function with given fields: value, transfers, index +func (_m *MockManagedTypesContext) AddBackTransfers(value *big.Int, transfers []*vmcommon.ESDTTransfer, index uint32) { + _m.Called(value, transfers, index) +} + +// AppendBytes provides a mock function with given fields: mBufferHandle, bytes +func (_m *MockManagedTypesContext) AppendBytes(mBufferHandle int32, bytes []byte) bool { + ret := _m.Called(mBufferHandle, bytes) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func(int32, []byte) bool); ok { + r0 = rf(mBufferHandle, bytes) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// BigFloatExpIsNotValid provides a mock function with given fields: exponent +func (_m *MockManagedTypesContext) BigFloatExpIsNotValid(exponent int) bool { + ret := _m.Called(exponent) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func(int) bool); ok { + r0 = rf(exponent) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// BigFloatPrecIsNotValid provides a mock function with given fields: precision +func (_m *MockManagedTypesContext) BigFloatPrecIsNotValid(precision uint) bool { + ret := _m.Called(precision) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func(uint) bool); ok { + r0 = rf(precision) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockManagedTypesContext) ClearStateStack() { + _m.Called() +} + +// ConsumeGasForBigFloatCopy provides a mock function with given fields: values +func (_m *MockManagedTypesContext) ConsumeGasForBigFloatCopy(values ...*big.Float) error { + _va := make([]interface{}, len(values)) + for _i := range values { + _va[_i] = values[_i] + } + var _ca []interface{} + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(...*big.Float) error); ok { + r0 = rf(values...) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsumeGasForBigIntCopy provides a mock function with given fields: values +func (_m *MockManagedTypesContext) ConsumeGasForBigIntCopy(values ...*big.Int) error { + _va := make([]interface{}, len(values)) + for _i := range values { + _va[_i] = values[_i] + } + var _ca []interface{} + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(...*big.Int) error); ok { + r0 = rf(values...) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsumeGasForBytes provides a mock function with given fields: bytes +func (_m *MockManagedTypesContext) ConsumeGasForBytes(bytes []byte) error { + ret := _m.Called(bytes) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte) error); ok { + r0 = rf(bytes) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsumeGasForThisBigIntNumberOfBytes provides a mock function with given fields: byteLen +func (_m *MockManagedTypesContext) ConsumeGasForThisBigIntNumberOfBytes(byteLen *big.Int) error { + ret := _m.Called(byteLen) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(*big.Int) error); ok { + r0 = rf(byteLen) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ConsumeGasForThisIntNumberOfBytes provides a mock function with given fields: byteLen +func (_m *MockManagedTypesContext) ConsumeGasForThisIntNumberOfBytes(byteLen int) error { + ret := _m.Called(byteLen) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(int) error); ok { + r0 = rf(byteLen) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// DeleteSlice provides a mock function with given fields: mBufferHandle, startPosition, lengthOfSlice +func (_m *MockManagedTypesContext) DeleteSlice(mBufferHandle int32, startPosition int32, lengthOfSlice int32) ([]byte, error) { + ret := _m.Called(mBufferHandle, startPosition, lengthOfSlice) + + if len(ret) == 0 { + return []byte{}, nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(int32, int32, int32) ([]byte, error)); ok { + return rf(mBufferHandle, startPosition, lengthOfSlice) + } + if rf, ok := ret.Get(0).(func(int32, int32, int32) []byte); ok { + r0 = rf(mBufferHandle, startPosition, lengthOfSlice) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(int32, int32, int32) error); ok { + r1 = rf(mBufferHandle, startPosition, lengthOfSlice) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// EncodedBigFloatIsNotValid provides a mock function with given fields: encodedBigFloat +func (_m *MockManagedTypesContext) EncodedBigFloatIsNotValid(encodedBigFloat []byte) bool { + ret := _m.Called(encodedBigFloat) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(encodedBigFloat) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// Get100xCurveGasCostMultiplier provides a mock function with given fields: ecHandle +func (_m *MockManagedTypesContext) Get100xCurveGasCostMultiplier(ecHandle int32) int32 { + ret := _m.Called(ecHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(ecHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// GetBackTransfers provides a mock function with no fields +func (_m *MockManagedTypesContext) GetBackTransfers() ([]*vmcommon.ESDTTransfer, *big.Int) { + ret := _m.Called() + + if len(ret) == 0 { + return []*vmcommon.ESDTTransfer{}, big.NewInt(0) + } + + var r0 []*vmcommon.ESDTTransfer + var r1 *big.Int + if rf, ok := ret.Get(0).(func() ([]*vmcommon.ESDTTransfer, *big.Int)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []*vmcommon.ESDTTransfer); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*vmcommon.ESDTTransfer) + } + } + + if rf, ok := ret.Get(1).(func() *big.Int); ok { + r1 = rf() + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*big.Int) + } + } + + return r0, r1 +} + +// GetBigFloat provides a mock function with given fields: handle +func (_m *MockManagedTypesContext) GetBigFloat(handle int32) (*big.Float, error) { + ret := _m.Called(handle) + + if len(ret) == 0 { + return big.NewFloat(0), nil + } + + var r0 *big.Float + var r1 error + if rf, ok := ret.Get(0).(func(int32) (*big.Float, error)); ok { + return rf(handle) + } + if rf, ok := ret.Get(0).(func(int32) *big.Float); ok { + r0 = rf(handle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Float) + } + } + + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(handle) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetBigFloatOrCreate provides a mock function with given fields: handle +func (_m *MockManagedTypesContext) GetBigFloatOrCreate(handle int32) (*big.Float, error) { + ret := _m.Called(handle) + + if len(ret) == 0 { + return big.NewFloat(0), nil + } + + var r0 *big.Float + var r1 error + if rf, ok := ret.Get(0).(func(int32) (*big.Float, error)); ok { + return rf(handle) + } + if rf, ok := ret.Get(0).(func(int32) *big.Float); ok { + r0 = rf(handle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Float) + } + } + + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(handle) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetBigInt provides a mock function with given fields: id +func (_m *MockManagedTypesContext) GetBigInt(id int32) (*big.Int, error) { + ret := _m.Called(id) + + if len(ret) == 0 { + return big.NewInt(0), nil + } + + var r0 *big.Int + var r1 error + if rf, ok := ret.Get(0).(func(int32) (*big.Int, error)); ok { + return rf(id) + } + if rf, ok := ret.Get(0).(func(int32) *big.Int); ok { + r0 = rf(id) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(id) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetBigIntOrCreate provides a mock function with given fields: handle +func (_m *MockManagedTypesContext) GetBigIntOrCreate(handle int32) *big.Int { + ret := _m.Called(handle) + + if len(ret) == 0 { + return big.NewInt(0) + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func(int32) *big.Int); ok { + r0 = rf(handle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// GetBytes provides a mock function with given fields: mBufferHandle +func (_m *MockManagedTypesContext) GetBytes(mBufferHandle int32) ([]byte, error) { + ret := _m.Called(mBufferHandle) + + if len(ret) == 0 { + return []byte(""), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(int32) ([]byte, error)); ok { + return rf(mBufferHandle) + } + if rf, ok := ret.Get(0).(func(int32) []byte); ok { + r0 = rf(mBufferHandle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(mBufferHandle) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetEllipticCurve provides a mock function with given fields: handle +func (_m *MockManagedTypesContext) GetEllipticCurve(handle int32) (*elliptic.CurveParams, error) { + ret := _m.Called(handle) + + if len(ret) == 0 { + panic("no return value specified for GetEllipticCurve") + } + + var r0 *elliptic.CurveParams + var r1 error + if rf, ok := ret.Get(0).(func(int32) (*elliptic.CurveParams, error)); ok { + return rf(handle) + } + if rf, ok := ret.Get(0).(func(int32) *elliptic.CurveParams); ok { + r0 = rf(handle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*elliptic.CurveParams) + } + } + + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(handle) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetEllipticCurveSizeOfField provides a mock function with given fields: ecHandle +func (_m *MockManagedTypesContext) GetEllipticCurveSizeOfField(ecHandle int32) int32 { + ret := _m.Called(ecHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(ecHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// GetLength provides a mock function with given fields: mBufferHandle +func (_m *MockManagedTypesContext) GetLength(mBufferHandle int32) int32 { + ret := _m.Called(mBufferHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(mBufferHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// GetPrivateKeyByteLengthEC provides a mock function with given fields: ecHandle +func (_m *MockManagedTypesContext) GetPrivateKeyByteLengthEC(ecHandle int32) int32 { + ret := _m.Called(ecHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(ecHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// GetRandReader provides a mock function with no fields +func (_m *MockManagedTypesContext) GetRandReader() io.Reader { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetRandReader") + } + + var r0 io.Reader + if rf, ok := ret.Get(0).(func() io.Reader); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(io.Reader) + } + } + + return r0 +} + +// GetScalarMult100xCurveGasCostMultiplier provides a mock function with given fields: ecHandle +func (_m *MockManagedTypesContext) GetScalarMult100xCurveGasCostMultiplier(ecHandle int32) int32 { + ret := _m.Called(ecHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(ecHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// GetSlice provides a mock function with given fields: mBufferHandle, startPosition, lengthOfSlice +func (_m *MockManagedTypesContext) GetSlice(mBufferHandle int32, startPosition int32, lengthOfSlice int32) ([]byte, error) { + ret := _m.Called(mBufferHandle, startPosition, lengthOfSlice) + + if len(ret) == 0 { + return []byte(""), nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(int32, int32, int32) ([]byte, error)); ok { + return rf(mBufferHandle, startPosition, lengthOfSlice) + } + if rf, ok := ret.Get(0).(func(int32, int32, int32) []byte); ok { + r0 = rf(mBufferHandle, startPosition, lengthOfSlice) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(int32, int32, int32) error); ok { + r1 = rf(mBufferHandle, startPosition, lengthOfSlice) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetTwoBigFloats provides a mock function with given fields: handle1, handle2 +func (_m *MockManagedTypesContext) GetTwoBigFloats(handle1 int32, handle2 int32) (*big.Float, *big.Float, error) { + ret := _m.Called(handle1, handle2) + + if len(ret) == 0 { + return big.NewFloat(0), big.NewFloat(0), nil + } + + var r0 *big.Float + var r1 *big.Float + var r2 error + if rf, ok := ret.Get(0).(func(int32, int32) (*big.Float, *big.Float, error)); ok { + return rf(handle1, handle2) + } + if rf, ok := ret.Get(0).(func(int32, int32) *big.Float); ok { + r0 = rf(handle1, handle2) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Float) + } + } + + if rf, ok := ret.Get(1).(func(int32, int32) *big.Float); ok { + r1 = rf(handle1, handle2) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*big.Float) + } + } + + if rf, ok := ret.Get(2).(func(int32, int32) error); ok { + r2 = rf(handle1, handle2) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// GetTwoBigInt provides a mock function with given fields: handle1, handle2 +func (_m *MockManagedTypesContext) GetTwoBigInt(handle1 int32, handle2 int32) (*big.Int, *big.Int, error) { + ret := _m.Called(handle1, handle2) + + if len(ret) == 0 { + return big.NewInt(0), big.NewInt(0), nil + } + + var r0 *big.Int + var r1 *big.Int + var r2 error + if rf, ok := ret.Get(0).(func(int32, int32) (*big.Int, *big.Int, error)); ok { + return rf(handle1, handle2) + } + if rf, ok := ret.Get(0).(func(int32, int32) *big.Int); ok { + r0 = rf(handle1, handle2) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + if rf, ok := ret.Get(1).(func(int32, int32) *big.Int); ok { + r1 = rf(handle1, handle2) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*big.Int) + } + } + + if rf, ok := ret.Get(2).(func(int32, int32) error); ok { + r2 = rf(handle1, handle2) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// GetUCompressed100xCurveGasCostMultiplier provides a mock function with given fields: ecHandle +func (_m *MockManagedTypesContext) GetUCompressed100xCurveGasCostMultiplier(ecHandle int32) int32 { + ret := _m.Called(ecHandle) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int32) int32); ok { + r0 = rf(ecHandle) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockManagedTypesContext) InitState() { + _m.Called() +} + +// InsertSlice provides a mock function with given fields: mBufferHandle, startPosition, slice +func (_m *MockManagedTypesContext) InsertSlice(mBufferHandle int32, startPosition int32, slice []byte) ([]byte, error) { + ret := _m.Called(mBufferHandle, startPosition, slice) + + if len(ret) == 0 { + return []byte{}, nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(int32, int32, []byte) ([]byte, error)); ok { + return rf(mBufferHandle, startPosition, slice) + } + if rf, ok := ret.Get(0).(func(int32, int32, []byte) []byte); ok { + r0 = rf(mBufferHandle, startPosition, slice) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(int32, int32, []byte) error); ok { + r1 = rf(mBufferHandle, startPosition, slice) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ManagedMapContains provides a mock function with given fields: mMapHandle, keyHandle +func (_m *MockManagedTypesContext) ManagedMapContains(mMapHandle int32, keyHandle int32) (bool, error) { + ret := _m.Called(mMapHandle, keyHandle) + + if len(ret) == 0 { + return true, nil + } + + var r0 bool + var r1 error + if rf, ok := ret.Get(0).(func(int32, int32) (bool, error)); ok { + return rf(mMapHandle, keyHandle) + } + if rf, ok := ret.Get(0).(func(int32, int32) bool); ok { + r0 = rf(mMapHandle, keyHandle) + } else { + r0 = ret.Get(0).(bool) + } + + if rf, ok := ret.Get(1).(func(int32, int32) error); ok { + r1 = rf(mMapHandle, keyHandle) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ManagedMapGet provides a mock function with given fields: mMapHandle, keyHandle, outValueHandle +func (_m *MockManagedTypesContext) ManagedMapGet(mMapHandle int32, keyHandle int32, outValueHandle int32) error { + ret := _m.Called(mMapHandle, keyHandle, outValueHandle) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(int32, int32, int32) error); ok { + r0 = rf(mMapHandle, keyHandle, outValueHandle) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ManagedMapPut provides a mock function with given fields: mMapHandle, keyHandle, valueHandle +func (_m *MockManagedTypesContext) ManagedMapPut(mMapHandle int32, keyHandle int32, valueHandle int32) error { + ret := _m.Called(mMapHandle, keyHandle, valueHandle) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(int32, int32, int32) error); ok { + r0 = rf(mMapHandle, keyHandle, valueHandle) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ManagedMapRemove provides a mock function with given fields: mMapHandle, keyHandle, outValueHandle +func (_m *MockManagedTypesContext) ManagedMapRemove(mMapHandle int32, keyHandle int32, outValueHandle int32) error { + ret := _m.Called(mMapHandle, keyHandle, outValueHandle) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(int32, int32, int32) error); ok { + r0 = rf(mMapHandle, keyHandle, outValueHandle) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// NewBigInt provides a mock function with given fields: value +func (_m *MockManagedTypesContext) NewBigInt(value *big.Int) int32 { + ret := _m.Called(value) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(*big.Int) int32); ok { + r0 = rf(value) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// NewBigIntFromInt64 provides a mock function with given fields: int64Value +func (_m *MockManagedTypesContext) NewBigIntFromInt64(int64Value int64) int32 { + ret := _m.Called(int64Value) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(int64) int32); ok { + r0 = rf(int64Value) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// NewManagedBuffer provides a mock function with no fields +func (_m *MockManagedTypesContext) NewManagedBuffer() int32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func() int32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// NewManagedBufferFromBytes provides a mock function with given fields: bytes +func (_m *MockManagedTypesContext) NewManagedBufferFromBytes(bytes []byte) int32 { + ret := _m.Called(bytes) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func([]byte) int32); ok { + r0 = rf(bytes) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// NewManagedMap provides a mock function with no fields +func (_m *MockManagedTypesContext) NewManagedMap() int32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func() int32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// PopBackTransferIfAsyncCallBack provides a mock function with given fields: vmInput +func (_m *MockManagedTypesContext) PopBackTransferIfAsyncCallBack(vmInput *vmcommon.ContractCallInput) { + _m.Called(vmInput) +} + +// PopDiscard provides a mock function with no fields +func (_m *MockManagedTypesContext) PopDiscard() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockManagedTypesContext) PopSetActiveState() { + _m.Called() +} + +// PushState provides a mock function with no fields +func (_m *MockManagedTypesContext) PushState() { + _m.Called() +} + +// PutBigFloat provides a mock function with given fields: value +func (_m *MockManagedTypesContext) PutBigFloat(value *big.Float) (int32, error) { + ret := _m.Called(value) + + if len(ret) == 0 { + return 1, nil + } + + var r0 int32 + var r1 error + if rf, ok := ret.Get(0).(func(*big.Float) (int32, error)); ok { + return rf(value) + } + if rf, ok := ret.Get(0).(func(*big.Float) int32); ok { + r0 = rf(value) + } else { + r0 = ret.Get(0).(int32) + } + + if rf, ok := ret.Get(1).(func(*big.Float) error); ok { + r1 = rf(value) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// PutEllipticCurve provides a mock function with given fields: ec +func (_m *MockManagedTypesContext) PutEllipticCurve(ec *elliptic.CurveParams) int32 { + ret := _m.Called(ec) + + if len(ret) == 0 { + return 1 + } + + var r0 int32 + if rf, ok := ret.Get(0).(func(*elliptic.CurveParams) int32); ok { + r0 = rf(ec) + } else { + r0 = ret.Get(0).(int32) + } + + return r0 +} + +// ReadManagedVecOfManagedBuffers provides a mock function with given fields: managedVecHandle +func (_m *MockManagedTypesContext) ReadManagedVecOfManagedBuffers(managedVecHandle int32) ([][]byte, uint64, error) { + ret := _m.Called(managedVecHandle) + + if len(ret) == 0 { + return [][]byte{}, 0, nil + } + + var r0 [][]byte + var r1 uint64 + var r2 error + if rf, ok := ret.Get(0).(func(int32) ([][]byte, uint64, error)); ok { + return rf(managedVecHandle) + } + if rf, ok := ret.Get(0).(func(int32) [][]byte); ok { + r0 = rf(managedVecHandle) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([][]byte) + } + } + + if rf, ok := ret.Get(1).(func(int32) uint64); ok { + r1 = rf(managedVecHandle) + } else { + r1 = ret.Get(1).(uint64) + } + + if rf, ok := ret.Get(2).(func(int32) error); ok { + r2 = rf(managedVecHandle) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// SetBytes provides a mock function with given fields: mBufferHandle, bytes +func (_m *MockManagedTypesContext) SetBytes(mBufferHandle int32, bytes []byte) { + _m.Called(mBufferHandle, bytes) +} + +// WriteManagedVecOfManagedBuffers provides a mock function with given fields: data, destinationHandle +func (_m *MockManagedTypesContext) WriteManagedVecOfManagedBuffers(data [][]byte, destinationHandle int32) error { + ret := _m.Called(data, destinationHandle) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([][]byte, int32) error); ok { + r0 = rf(data, destinationHandle) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// NewMockManagedTypesContext creates a new instance of MockManagedTypesContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockManagedTypesContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockManagedTypesContext { + mock := &MockManagedTypesContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/MeteringContext.go b/mock/mockery/MeteringContext.go new file mode 100644 index 000000000..8e9cde4fe --- /dev/null +++ b/mock/mockery/MeteringContext.go @@ -0,0 +1,460 @@ +package mockery + +import ( + config "github.com/multiversx/mx-chain-vm-go/config" + mock "github.com/stretchr/testify/mock" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockMeteringContext is an autogenerated mock type for the MeteringContext type +type MockMeteringContext struct { + mock.Mock +} + +// BlockGasLimit provides a mock function with no fields +func (_m *MockMeteringContext) BlockGasLimit() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// BoundGasLimit provides a mock function with given fields: value +func (_m *MockMeteringContext) BoundGasLimit(value int64) uint64 { + ret := _m.Called(value) + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func(int64) uint64); ok { + r0 = rf(value) + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockMeteringContext) ClearStateStack() { + _m.Called() +} + +// ComputeExtraGasLockedForAsync provides a mock function with no fields +func (_m *MockMeteringContext) ComputeExtraGasLockedForAsync() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// DeductInitialGasForDirectDeployment provides a mock function with given fields: input +func (_m *MockMeteringContext) DeductInitialGasForDirectDeployment(input vmhost.CodeDeployInput) error { + ret := _m.Called(input) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(vmhost.CodeDeployInput) error); ok { + r0 = rf(input) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// DeductInitialGasForExecution provides a mock function with given fields: contract +func (_m *MockMeteringContext) DeductInitialGasForExecution(contract []byte) error { + ret := _m.Called(contract) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte) error); ok { + r0 = rf(contract) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// DeductInitialGasForIndirectDeployment provides a mock function with given fields: input +func (_m *MockMeteringContext) DeductInitialGasForIndirectDeployment(input vmhost.CodeDeployInput) error { + ret := _m.Called(input) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(vmhost.CodeDeployInput) error); ok { + r0 = rf(input) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// DisableRestoreGas provides a mock function with no fields +func (_m *MockMeteringContext) DisableRestoreGas() { + _m.Called() +} + +// EnableRestoreGas provides a mock function with no fields +func (_m *MockMeteringContext) EnableRestoreGas() { + _m.Called() +} + +// FreeGas provides a mock function with given fields: gas +func (_m *MockMeteringContext) FreeGas(gas uint64) { + _m.Called(gas) +} + +// GasLeft provides a mock function with no fields +func (_m *MockMeteringContext) GasLeft() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GasSchedule provides a mock function with no fields +func (_m *MockMeteringContext) GasSchedule() *config.GasCost { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GasSchedule") + } + + var r0 *config.GasCost + if rf, ok := ret.Get(0).(func() *config.GasCost); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*config.GasCost) + } + } + + return r0 +} + +// GasSpentByContract provides a mock function with no fields +func (_m *MockMeteringContext) GasSpentByContract() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GasUsedForExecution provides a mock function with no fields +func (_m *MockMeteringContext) GasUsedForExecution() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetGasForExecution provides a mock function with no fields +func (_m *MockMeteringContext) GetGasForExecution() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetGasLocked provides a mock function with no fields +func (_m *MockMeteringContext) GetGasLocked() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetGasProvided provides a mock function with no fields +func (_m *MockMeteringContext) GetGasProvided() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetGasTrace provides a mock function with no fields +func (_m *MockMeteringContext) GetGasTrace() map[string]map[string][]uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return map[string]map[string][]uint64{} + } + + var r0 map[string]map[string][]uint64 + if rf, ok := ret.Get(0).(func() map[string]map[string][]uint64); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]map[string][]uint64) + } + } + + return r0 +} + +// GetSCPrepareInitialCost provides a mock function with no fields +func (_m *MockMeteringContext) GetSCPrepareInitialCost() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockMeteringContext) InitState() { + _m.Called() +} + +// InitStateFromContractCallInput provides a mock function with given fields: input +func (_m *MockMeteringContext) InitStateFromContractCallInput(input *vmcommon.VMInput) { + _m.Called(input) +} + +// PopDiscard provides a mock function with no fields +func (_m *MockMeteringContext) PopDiscard() { + _m.Called() +} + +// PopMergeActiveState provides a mock function with no fields +func (_m *MockMeteringContext) PopMergeActiveState() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockMeteringContext) PopSetActiveState() { + _m.Called() +} + +// PushState provides a mock function with no fields +func (_m *MockMeteringContext) PushState() { + _m.Called() +} + +// RestoreGas provides a mock function with given fields: gas +func (_m *MockMeteringContext) RestoreGas(gas uint64) { + _m.Called(gas) +} + +// SetGasSchedule provides a mock function with given fields: gasMap +func (_m *MockMeteringContext) SetGasSchedule(gasMap map[string]map[string]uint64) { + _m.Called(gasMap) +} + +// SetGasTracing provides a mock function with given fields: enableGasTracing +func (_m *MockMeteringContext) SetGasTracing(enableGasTracing bool) { + _m.Called(enableGasTracing) +} + +// StartGasTracing provides a mock function with given fields: functionName +func (_m *MockMeteringContext) StartGasTracing(functionName string) { + _m.Called(functionName) +} + +// TrackGasUsedByOutOfVMFunction provides a mock function with given fields: builtinInput, builtinOutput, postBuiltinInput +func (_m *MockMeteringContext) TrackGasUsedByOutOfVMFunction(builtinInput *vmcommon.ContractCallInput, builtinOutput *vmcommon.VMOutput, postBuiltinInput *vmcommon.ContractCallInput) { + _m.Called(builtinInput, builtinOutput, postBuiltinInput) +} + +// UpdateGasStateOnFailure provides a mock function with given fields: vmOutput +func (_m *MockMeteringContext) UpdateGasStateOnFailure(vmOutput *vmcommon.VMOutput) { + _m.Called(vmOutput) +} + +// UpdateGasStateOnSuccess provides a mock function with given fields: vmOutput +func (_m *MockMeteringContext) UpdateGasStateOnSuccess(vmOutput *vmcommon.VMOutput) error { + ret := _m.Called(vmOutput) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(*vmcommon.VMOutput) error); ok { + r0 = rf(vmOutput) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// UseGasBounded provides a mock function with given fields: gasToUse +func (_m *MockMeteringContext) UseGasBounded(gasToUse uint64) error { + ret := _m.Called(gasToUse) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(uint64) error); ok { + r0 = rf(gasToUse) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// UseGasBoundedAndAddTracedGas provides a mock function with given fields: functionName, gas +func (_m *MockMeteringContext) UseGasBoundedAndAddTracedGas(functionName string, gas uint64) error { + ret := _m.Called(functionName, gas) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, uint64) error); ok { + r0 = rf(functionName, gas) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// UseGasForAsyncStep provides a mock function with no fields +func (_m *MockMeteringContext) UseGasForAsyncStep() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// UseGasForContractInit provides a mock function with given fields: gasToUse +func (_m *MockMeteringContext) UseGasForContractInit(gasToUse uint64) { + _m.Called(gasToUse) +} + +// NewMockMeteringContext creates a new instance of MockMeteringContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockMeteringContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockMeteringContext { + mock := &MockMeteringContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/OutputContext.go b/mock/mockery/OutputContext.go new file mode 100644 index 000000000..3326e5735 --- /dev/null +++ b/mock/mockery/OutputContext.go @@ -0,0 +1,428 @@ +package mockery + +import ( + big "math/big" + + vm "github.com/multiversx/mx-chain-core-go/data/vm" + mock "github.com/stretchr/testify/mock" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockOutputContext is an autogenerated mock type for the OutputContext type +type MockOutputContext struct { + mock.Mock +} + +// AddToActiveState provides a mock function with given fields: rightOutput +func (_m *MockOutputContext) AddToActiveState(rightOutput *vmcommon.VMOutput) { + _m.Called(rightOutput) +} + +// AddTxValueToAccount provides a mock function with given fields: address, value +func (_m *MockOutputContext) AddTxValueToAccount(address []byte, value *big.Int) { + _m.Called(address, value) +} + +// CensorVMOutput provides a mock function with no fields +func (_m *MockOutputContext) CensorVMOutput() { + _m.Called() +} + +// ClearReturnData provides a mock function with no fields +func (_m *MockOutputContext) ClearReturnData() { + _m.Called() +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockOutputContext) ClearStateStack() { + _m.Called() +} + +// CreateVMOutputInCaseOfError provides a mock function with given fields: err +func (_m *MockOutputContext) CreateVMOutputInCaseOfError(err error) *vmcommon.VMOutput { + ret := _m.Called(err) + + if len(ret) == 0 { + return &vmcommon.VMOutput{ReturnCode: vmcommon.UserError} + } + + var r0 *vmcommon.VMOutput + if rf, ok := ret.Get(0).(func(error) *vmcommon.VMOutput); ok { + r0 = rf(err) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + return r0 +} + +// DeleteFirstReturnData provides a mock function with no fields +func (_m *MockOutputContext) DeleteFirstReturnData() { + _m.Called() +} + +// DeleteOutputAccount provides a mock function with given fields: address +func (_m *MockOutputContext) DeleteOutputAccount(address []byte) { + _m.Called(address) +} + +// DeployCode provides a mock function with given fields: input +func (_m *MockOutputContext) DeployCode(input vmhost.CodeDeployInput) { + _m.Called(input) +} + +// Finish provides a mock function with given fields: data +func (_m *MockOutputContext) Finish(data []byte) { + _m.Called(data) +} + +// GetCrtTransferIndex provides a mock function with no fields +func (_m *MockOutputContext) GetCrtTransferIndex() uint32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func() uint32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// GetOutputAccount provides a mock function with given fields: address +func (_m *MockOutputContext) GetOutputAccount(address []byte) (*vmcommon.OutputAccount, bool) { + ret := _m.Called(address) + + if len(ret) == 0 { + return &vmcommon.OutputAccount{}, true + } + + var r0 *vmcommon.OutputAccount + var r1 bool + if rf, ok := ret.Get(0).(func([]byte) (*vmcommon.OutputAccount, bool)); ok { + return rf(address) + } + if rf, ok := ret.Get(0).(func([]byte) *vmcommon.OutputAccount); ok { + r0 = rf(address) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.OutputAccount) + } + } + + if rf, ok := ret.Get(1).(func([]byte) bool); ok { + r1 = rf(address) + } else { + r1 = ret.Get(1).(bool) + } + + return r0, r1 +} + +// GetOutputAccounts provides a mock function with no fields +func (_m *MockOutputContext) GetOutputAccounts() map[string]*vmcommon.OutputAccount { + ret := _m.Called() + + if len(ret) == 0 { + return map[string]*vmcommon.OutputAccount{} + } + + var r0 map[string]*vmcommon.OutputAccount + if rf, ok := ret.Get(0).(func() map[string]*vmcommon.OutputAccount); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]*vmcommon.OutputAccount) + } + } + + return r0 +} + +// GetRefund provides a mock function with no fields +func (_m *MockOutputContext) GetRefund() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 0 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetVMOutput provides a mock function with no fields +func (_m *MockOutputContext) GetVMOutput() *vmcommon.VMOutput { + ret := _m.Called() + + if len(ret) == 0 { + return &vmcommon.VMOutput{} + } + + var r0 *vmcommon.VMOutput + if rf, ok := ret.Get(0).(func() *vmcommon.VMOutput); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockOutputContext) InitState() { + _m.Called() +} + +// IsInterfaceNil provides a mock function with no fields +func (_m *MockOutputContext) IsInterfaceNil() bool { + ret := _m.Called() + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// NextOutputTransferIndex provides a mock function with no fields +func (_m *MockOutputContext) NextOutputTransferIndex() uint32 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint32 + if rf, ok := ret.Get(0).(func() uint32); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint32) + } + + return r0 +} + +// PopDiscard provides a mock function with no fields +func (_m *MockOutputContext) PopDiscard() { + _m.Called() +} + +// PopMergeActiveState provides a mock function with no fields +func (_m *MockOutputContext) PopMergeActiveState() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockOutputContext) PopSetActiveState() { + _m.Called() +} + +// PrependFinish provides a mock function with given fields: data +func (_m *MockOutputContext) PrependFinish(data []byte) { + _m.Called(data) +} + +// PushState provides a mock function with no fields +func (_m *MockOutputContext) PushState() { + _m.Called() +} + +// RemoveNonUpdatedStorage provides a mock function with no fields +func (_m *MockOutputContext) RemoveNonUpdatedStorage() { + _m.Called() +} + +// RemoveReturnData provides a mock function with given fields: index +func (_m *MockOutputContext) RemoveReturnData(index uint32) { + _m.Called(index) +} + +// ReturnCode provides a mock function with no fields +func (_m *MockOutputContext) ReturnCode() vmcommon.ReturnCode { + ret := _m.Called() + + if len(ret) == 0 { + return vmcommon.Ok + } + + var r0 vmcommon.ReturnCode + if rf, ok := ret.Get(0).(func() vmcommon.ReturnCode); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(vmcommon.ReturnCode) + } + + return r0 +} + +// ReturnData provides a mock function with no fields +func (_m *MockOutputContext) ReturnData() [][]byte { + ret := _m.Called() + + if len(ret) == 0 { + return [][]byte{} + } + + var r0 [][]byte + if rf, ok := ret.Get(0).(func() [][]byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([][]byte) + } + } + + return r0 +} + +// ReturnMessage provides a mock function with no fields +func (_m *MockOutputContext) ReturnMessage() string { + ret := _m.Called() + + if len(ret) == 0 { + return "" + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// SetCrtTransferIndex provides a mock function with given fields: index +func (_m *MockOutputContext) SetCrtTransferIndex(index uint32) { + _m.Called(index) +} + +// SetRefund provides a mock function with given fields: refund +func (_m *MockOutputContext) SetRefund(refund uint64) { + _m.Called(refund) +} + +// SetReturnCode provides a mock function with given fields: returnCode +func (_m *MockOutputContext) SetReturnCode(returnCode vmcommon.ReturnCode) { + _m.Called(returnCode) +} + +// SetReturnMessage provides a mock function with given fields: message +func (_m *MockOutputContext) SetReturnMessage(message string) { + _m.Called(message) +} + +// Transfer provides a mock function with given fields: destination, sender, gasLimit, gasLocked, value, asyncData, input, callType +func (_m *MockOutputContext) Transfer(destination []byte, sender []byte, gasLimit uint64, gasLocked uint64, value *big.Int, asyncData []byte, input []byte, callType vm.CallType) error { + ret := _m.Called(destination, sender, gasLimit, gasLocked, value, asyncData, input, callType) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte, []byte, uint64, uint64, *big.Int, []byte, []byte, vm.CallType) error); ok { + r0 = rf(destination, sender, gasLimit, gasLocked, value, asyncData, input, callType) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// TransferESDT provides a mock function with given fields: transfersArgs, callInput +func (_m *MockOutputContext) TransferESDT(transfersArgs *vmhost.ESDTTransfersArgs, callInput *vmcommon.ContractCallInput) (uint64, error) { + ret := _m.Called(transfersArgs, callInput) + + if len(ret) == 0 { + return 0, nil + } + + var r0 uint64 + var r1 error + if rf, ok := ret.Get(0).(func(*vmhost.ESDTTransfersArgs, *vmcommon.ContractCallInput) (uint64, error)); ok { + return rf(transfersArgs, callInput) + } + if rf, ok := ret.Get(0).(func(*vmhost.ESDTTransfersArgs, *vmcommon.ContractCallInput) uint64); ok { + r0 = rf(transfersArgs, callInput) + } else { + r0 = ret.Get(0).(uint64) + } + + if rf, ok := ret.Get(1).(func(*vmhost.ESDTTransfersArgs, *vmcommon.ContractCallInput) error); ok { + r1 = rf(transfersArgs, callInput) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// TransferValueOnly provides a mock function with given fields: destination, sender, value, checkPayable +func (_m *MockOutputContext) TransferValueOnly(destination []byte, sender []byte, value *big.Int, checkPayable bool) error { + ret := _m.Called(destination, sender, value, checkPayable) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte, []byte, *big.Int, bool) error); ok { + r0 = rf(destination, sender, value, checkPayable) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// WriteLog provides a mock function with given fields: address, topics, data +func (_m *MockOutputContext) WriteLog(address []byte, topics [][]byte, data [][]byte) { + _m.Called(address, topics, data) +} + +// WriteLogWithIdentifier provides a mock function with given fields: address, topics, data, identifier +func (_m *MockOutputContext) WriteLogWithIdentifier(address []byte, topics [][]byte, data [][]byte, identifier []byte) { + _m.Called(address, topics, data, identifier) +} + +// NewMockOutputContext creates a new instance of MockOutputContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockOutputContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockOutputContext { + mock := &MockOutputContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/RuntimeContext.go b/mock/mockery/RuntimeContext.go new file mode 100644 index 000000000..6392e45fd --- /dev/null +++ b/mock/mockery/RuntimeContext.go @@ -0,0 +1,790 @@ +package mockery + +import ( + executor "github.com/multiversx/mx-chain-vm-go/executor" + mock "github.com/stretchr/testify/mock" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockRuntimeContext is an autogenerated mock type for the RuntimeContext type +type MockRuntimeContext struct { + mock.Mock +} + +// RemoveCodeUpgradeFromArgs provides a mock function with given fields +func (_m *MockRuntimeContext) RemoveCodeUpgradeFromArgs() { +} + +// IsUnsafeMode provides a mock function with given fields +func (_m *MockRuntimeContext) IsUnsafeMode() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// SetUnsafeMode provides a mock function with given fields +func (_m *MockRuntimeContext) SetUnsafeMode(_ bool) { +} + +// AddError provides a mock function with given fields: err, otherInfo +func (_m *MockRuntimeContext) AddError(err error, otherInfo ...string) { + _va := make([]interface{}, len(otherInfo)) + for _i := range otherInfo { + _va[_i] = otherInfo[_i] + } + var _ca []interface{} + _ca = append(_ca, err) + _ca = append(_ca, _va...) + _m.Called(_ca...) +} + +// Arguments provides a mock function with no fields +func (_m *MockRuntimeContext) Arguments() [][]byte { + ret := _m.Called() + + if len(ret) == 0 { + return [][]byte{} + } + + var r0 [][]byte + if rf, ok := ret.Get(0).(func() [][]byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([][]byte) + } + } + + return r0 +} + +// CallSCFunction provides a mock function with given fields: functionName +func (_m *MockRuntimeContext) CallSCFunction(functionName string) error { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(functionName) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// CleanInstance provides a mock function with no fields +func (_m *MockRuntimeContext) CleanInstance() { + _m.Called() +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockRuntimeContext) ClearStateStack() { + _m.Called() +} + +// ClearWarmInstanceCache provides a mock function with no fields +func (_m *MockRuntimeContext) ClearWarmInstanceCache() { + _m.Called() +} + +// CountSameContractInstancesOnStack provides a mock function with given fields: address +func (_m *MockRuntimeContext) CountSameContractInstancesOnStack(address []byte) uint64 { + ret := _m.Called(address) + + if len(ret) == 0 { + return 0 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func([]byte) uint64); ok { + r0 = rf(address) + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// EndExecution provides a mock function with no fields +func (_m *MockRuntimeContext) EndExecution() { + _m.Called() +} + +// ExtractCodeUpgradeFromArgs provides a mock function with no fields +func (_m *MockRuntimeContext) ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{}, []byte{}, nil + } + + var r0 []byte + var r1 []byte + var r2 error + if rf, ok := ret.Get(0).(func() ([]byte, []byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() []byte); ok { + r1 = rf() + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).([]byte) + } + } + + if rf, ok := ret.Get(2).(func() error); ok { + r2 = rf() + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// FailExecution provides a mock function with given fields: err +func (_m *MockRuntimeContext) FailExecution(err error) { + _m.Called(err) +} + +// FunctionName provides a mock function with no fields +func (_m *MockRuntimeContext) FunctionName() string { + ret := _m.Called() + + if len(ret) == 0 { + return "function" + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// FunctionNameChecked provides a mock function with no fields +func (_m *MockRuntimeContext) FunctionNameChecked() (string, error) { + ret := _m.Called() + + if len(ret) == 0 { + return "function", nil + } + + var r0 string + var r1 error + if rf, ok := ret.Get(0).(func() (string, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetAllErrors provides a mock function with no fields +func (_m *MockRuntimeContext) GetAllErrors() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// GetContextAddress provides a mock function with no fields +func (_m *MockRuntimeContext) GetContextAddress() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetCurrentTxHash provides a mock function with no fields +func (_m *MockRuntimeContext) GetCurrentTxHash() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetInstance provides a mock function with no fields +func (_m *MockRuntimeContext) GetInstance() executor.Instance { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetInstance") + } + + var r0 executor.Instance + if rf, ok := ret.Get(0).(func() executor.Instance); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(executor.Instance) + } + } + + return r0 +} + +// GetInstanceStackSize provides a mock function with no fields +func (_m *MockRuntimeContext) GetInstanceStackSize() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetInstanceTracker provides a mock function with no fields +func (_m *MockRuntimeContext) GetInstanceTracker() vmhost.InstanceTracker { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetInstanceTracker") + } + + var r0 vmhost.InstanceTracker + if rf, ok := ret.Get(0).(func() vmhost.InstanceTracker); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.InstanceTracker) + } + } + + return r0 +} + +// GetOriginalCallerAddress provides a mock function with no fields +func (_m *MockRuntimeContext) GetOriginalCallerAddress() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetOriginalTxHash provides a mock function with no fields +func (_m *MockRuntimeContext) GetOriginalTxHash() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetPointsUsed provides a mock function with no fields +func (_m *MockRuntimeContext) GetPointsUsed() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetPrevTxHash provides a mock function with no fields +func (_m *MockRuntimeContext) GetPrevTxHash() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// GetRuntimeBreakpointValue provides a mock function with no fields +func (_m *MockRuntimeContext) GetRuntimeBreakpointValue() vmhost.BreakpointValue { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 vmhost.BreakpointValue + if rf, ok := ret.Get(0).(func() vmhost.BreakpointValue); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(vmhost.BreakpointValue) + } + + return r0 +} + +// GetSCCode provides a mock function with no fields +func (_m *MockRuntimeContext) GetSCCode() ([]byte, error) { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{}, nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func() ([]byte, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetSCCodeSize provides a mock function with no fields +func (_m *MockRuntimeContext) GetSCCodeSize() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return 1 + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// GetVMExecutor provides a mock function with no fields +func (_m *MockRuntimeContext) GetVMExecutor() executor.Executor { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetVMExecutor") + } + + var r0 executor.Executor + if rf, ok := ret.Get(0).(func() executor.Executor); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(executor.Executor) + } + } + + return r0 +} + +// GetVMInput provides a mock function with no fields +func (_m *MockRuntimeContext) GetVMInput() *vmcommon.ContractCallInput { + ret := _m.Called() + + if len(ret) == 0 { + return &vmcommon.ContractCallInput{} + } + + var r0 *vmcommon.ContractCallInput + if rf, ok := ret.Get(0).(func() *vmcommon.ContractCallInput); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.ContractCallInput) + } + } + + return r0 +} + +// GetVMType provides a mock function with no fields +func (_m *MockRuntimeContext) GetVMType() []byte { + ret := _m.Called() + + if len(ret) == 0 { + return []byte{} + } + + var r0 []byte + if rf, ok := ret.Get(0).(func() []byte); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// HasFunction provides a mock function with given fields: functionName +func (_m *MockRuntimeContext) HasFunction(functionName string) bool { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(functionName) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockRuntimeContext) InitState() { + _m.Called() +} + +// InitStateFromContractCallInput provides a mock function with given fields: input +func (_m *MockRuntimeContext) InitStateFromContractCallInput(input *vmcommon.ContractCallInput) { + _m.Called(input) +} + +// IsFunctionImported provides a mock function with given fields: name +func (_m *MockRuntimeContext) IsFunctionImported(name string) bool { + ret := _m.Called(name) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(name) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsReservedFunctionName provides a mock function with given fields: functionName +func (_m *MockRuntimeContext) IsReservedFunctionName(functionName string) bool { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(functionName) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// MustVerifyNextContractCode provides a mock function with no fields +func (_m *MockRuntimeContext) MustVerifyNextContractCode() { + _m.Called() +} + +// PopDiscard provides a mock function with no fields +func (_m *MockRuntimeContext) PopDiscard() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockRuntimeContext) PopSetActiveState() { + _m.Called() +} + +// PushState provides a mock function with no fields +func (_m *MockRuntimeContext) PushState() { + _m.Called() +} + +// ReadOnly provides a mock function with no fields +func (_m *MockRuntimeContext) ReadOnly() bool { + ret := _m.Called() + + if len(ret) == 0 { + return true + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ReplaceVMExecutor provides a mock function with given fields: vmExecutor +func (_m *MockRuntimeContext) ReplaceVMExecutor(vmExecutor executor.Executor) { + _m.Called(vmExecutor) +} + +// SetCodeAddress provides a mock function with given fields: scAddress +func (_m *MockRuntimeContext) SetCodeAddress(scAddress []byte) { + _m.Called(scAddress) +} + +// SetCustomCallFunction provides a mock function with given fields: callFunction +func (_m *MockRuntimeContext) SetCustomCallFunction(callFunction string) { + _m.Called(callFunction) +} + +// SetMaxInstanceStackSize provides a mock function with given fields: _a0 +func (_m *MockRuntimeContext) SetMaxInstanceStackSize(_a0 uint64) { + _m.Called(_a0) +} + +// SetPointsUsed provides a mock function with given fields: gasPoints +func (_m *MockRuntimeContext) SetPointsUsed(gasPoints uint64) { + _m.Called(gasPoints) +} + +// SetReadOnly provides a mock function with given fields: readOnly +func (_m *MockRuntimeContext) SetReadOnly(readOnly bool) { + _m.Called(readOnly) +} + +// SetRuntimeBreakpointValue provides a mock function with given fields: value +func (_m *MockRuntimeContext) SetRuntimeBreakpointValue(value vmhost.BreakpointValue) { + _m.Called(value) +} + +// SetVMInput provides a mock function with given fields: vmInput +func (_m *MockRuntimeContext) SetVMInput(vmInput *vmcommon.ContractCallInput) { + _m.Called(vmInput) +} + +// SignalUserError provides a mock function with given fields: message +func (_m *MockRuntimeContext) SignalUserError(message string) { + _m.Called(message) +} + +// StartWasmerInstance provides a mock function with given fields: contract, gasLimit, newCode +func (_m *MockRuntimeContext) StartWasmerInstance(contract []byte, gasLimit uint64, newCode bool) error { + ret := _m.Called(contract, gasLimit, newCode) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func([]byte, uint64, bool) error); ok { + r0 = rf(contract, gasLimit, newCode) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// UseGasBoundedShouldFailExecution provides a mock function with no fields +func (_m *MockRuntimeContext) UseGasBoundedShouldFailExecution() bool { + ret := _m.Called() + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ValidateCallbackName provides a mock function with given fields: callbackName +func (_m *MockRuntimeContext) ValidateCallbackName(callbackName string) error { + ret := _m.Called(callbackName) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(callbackName) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ValidateInstances provides a mock function with no fields +func (_m *MockRuntimeContext) ValidateInstances() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// VerifyContractCode provides a mock function with no fields +func (_m *MockRuntimeContext) VerifyContractCode() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// NewMockRuntimeContext creates a new instance of MockRuntimeContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockRuntimeContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockRuntimeContext { + mock := &MockRuntimeContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/StorageContext.go b/mock/mockery/StorageContext.go new file mode 100644 index 000000000..91f448a68 --- /dev/null +++ b/mock/mockery/StorageContext.go @@ -0,0 +1,403 @@ +package mockery + +import ( + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + mock "github.com/stretchr/testify/mock" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockStorageContext is an autogenerated mock type for the StorageContext type +type MockStorageContext struct { + mock.Mock +} + +// ClearStateStack provides a mock function with no fields +func (_m *MockStorageContext) ClearStateStack() { + _m.Called() +} + +// GetStorage provides a mock function with given fields: key +func (_m *MockStorageContext) GetStorage(key []byte) ([]byte, uint32, bool, error) { + ret := _m.Called(key) + + if len(ret) == 0 { + return []byte{}, 1, false, nil + } + + var r0 []byte + var r1 uint32 + var r2 bool + var r3 error + if rf, ok := ret.Get(0).(func([]byte) ([]byte, uint32, bool, error)); ok { + return rf(key) + } + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(key) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte) uint32); ok { + r1 = rf(key) + } else { + r1 = ret.Get(1).(uint32) + } + + if rf, ok := ret.Get(2).(func([]byte) bool); ok { + r2 = rf(key) + } else { + r2 = ret.Get(2).(bool) + } + + if rf, ok := ret.Get(3).(func([]byte) error); ok { + r3 = rf(key) + } else { + r3 = ret.Error(3) + } + + return r0, r1, r2, r3 +} + +// GetStorageFromAddress provides a mock function with given fields: address, key +func (_m *MockStorageContext) GetStorageFromAddress(address []byte, key []byte) ([]byte, uint32, bool, error) { + ret := _m.Called(address, key) + + if len(ret) == 0 { + return []byte{}, 1, false, nil + } + + var r0 []byte + var r1 uint32 + var r2 bool + var r3 error + if rf, ok := ret.Get(0).(func([]byte, []byte) ([]byte, uint32, bool, error)); ok { + return rf(address, key) + } + if rf, ok := ret.Get(0).(func([]byte, []byte) []byte); ok { + r0 = rf(address, key) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte, []byte) uint32); ok { + r1 = rf(address, key) + } else { + r1 = ret.Get(1).(uint32) + } + + if rf, ok := ret.Get(2).(func([]byte, []byte) bool); ok { + r2 = rf(address, key) + } else { + r2 = ret.Get(2).(bool) + } + + if rf, ok := ret.Get(3).(func([]byte, []byte) error); ok { + r3 = rf(address, key) + } else { + r3 = ret.Error(3) + } + + return r0, r1, r2, r3 +} + +// GetStorageFromAddressNoChecks provides a mock function with given fields: address, key +func (_m *MockStorageContext) GetStorageFromAddressNoChecks(address []byte, key []byte) ([]byte, uint32, bool, error) { + ret := _m.Called(address, key) + + if len(ret) == 0 { + return []byte{}, 1, false, nil + } + + var r0 []byte + var r1 uint32 + var r2 bool + var r3 error + if rf, ok := ret.Get(0).(func([]byte, []byte) ([]byte, uint32, bool, error)); ok { + return rf(address, key) + } + if rf, ok := ret.Get(0).(func([]byte, []byte) []byte); ok { + r0 = rf(address, key) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte, []byte) uint32); ok { + r1 = rf(address, key) + } else { + r1 = ret.Get(1).(uint32) + } + + if rf, ok := ret.Get(2).(func([]byte, []byte) bool); ok { + r2 = rf(address, key) + } else { + r2 = ret.Get(2).(bool) + } + + if rf, ok := ret.Get(3).(func([]byte, []byte) error); ok { + r3 = rf(address, key) + } else { + r3 = ret.Error(3) + } + + return r0, r1, r2, r3 +} + +// GetStorageUnmetered provides a mock function with given fields: key +func (_m *MockStorageContext) GetStorageUnmetered(key []byte) ([]byte, uint32, bool, error) { + ret := _m.Called(key) + + if len(ret) == 0 { + return []byte{}, 1, false, nil + } + + var r0 []byte + var r1 uint32 + var r2 bool + var r3 error + if rf, ok := ret.Get(0).(func([]byte) ([]byte, uint32, bool, error)); ok { + return rf(key) + } + if rf, ok := ret.Get(0).(func([]byte) []byte); ok { + r0 = rf(key) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func([]byte) uint32); ok { + r1 = rf(key) + } else { + r1 = ret.Get(1).(uint32) + } + + if rf, ok := ret.Get(2).(func([]byte) bool); ok { + r2 = rf(key) + } else { + r2 = ret.Get(2).(bool) + } + + if rf, ok := ret.Get(3).(func([]byte) error); ok { + r3 = rf(key) + } else { + r3 = ret.Error(3) + } + + return r0, r1, r2, r3 +} + +// GetStorageUpdates provides a mock function with given fields: address +func (_m *MockStorageContext) GetStorageUpdates(address []byte) map[string]*vmcommon.StorageUpdate { + ret := _m.Called(address) + + if len(ret) == 0 { + return map[string]*vmcommon.StorageUpdate{} + } + + var r0 map[string]*vmcommon.StorageUpdate + if rf, ok := ret.Get(0).(func([]byte) map[string]*vmcommon.StorageUpdate); ok { + r0 = rf(address) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]*vmcommon.StorageUpdate) + } + } + + return r0 +} + +// GetVmProtectedPrefix provides a mock function with given fields: prefix +func (_m *MockStorageContext) GetVmProtectedPrefix(prefix string) []byte { + ret := _m.Called(prefix) + + if len(ret) == 0 { + return []byte("VM") + } + + var r0 []byte + if rf, ok := ret.Get(0).(func(string) []byte); ok { + r0 = rf(prefix) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockStorageContext) InitState() { + _m.Called() +} + +// PopDiscard provides a mock function with no fields +func (_m *MockStorageContext) PopDiscard() { + _m.Called() +} + +// PopSetActiveState provides a mock function with no fields +func (_m *MockStorageContext) PopSetActiveState() { + _m.Called() +} + +// PushState provides a mock function with no fields +func (_m *MockStorageContext) PushState() { + _m.Called() +} + +// SetAddress provides a mock function with given fields: address +func (_m *MockStorageContext) SetAddress(address []byte) { + _m.Called(address) +} + +// SetProtectedStorage provides a mock function with given fields: key, value +func (_m *MockStorageContext) SetProtectedStorage(key []byte, value []byte) (vmhost.StorageStatus, error) { + ret := _m.Called(key, value) + + if len(ret) == 0 { + return 0, nil + } + + var r0 vmhost.StorageStatus + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte) (vmhost.StorageStatus, error)); ok { + return rf(key, value) + } + if rf, ok := ret.Get(0).(func([]byte, []byte) vmhost.StorageStatus); ok { + r0 = rf(key, value) + } else { + r0 = ret.Get(0).(vmhost.StorageStatus) + } + + if rf, ok := ret.Get(1).(func([]byte, []byte) error); ok { + r1 = rf(key, value) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// SetProtectedStorageToAddress provides a mock function with given fields: address, key, value +func (_m *MockStorageContext) SetProtectedStorageToAddress(address []byte, key []byte, value []byte) (vmhost.StorageStatus, error) { + ret := _m.Called(address, key, value) + + if len(ret) == 0 { + return 0, nil + } + + var r0 vmhost.StorageStatus + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte, []byte) (vmhost.StorageStatus, error)); ok { + return rf(address, key, value) + } + if rf, ok := ret.Get(0).(func([]byte, []byte, []byte) vmhost.StorageStatus); ok { + r0 = rf(address, key, value) + } else { + r0 = ret.Get(0).(vmhost.StorageStatus) + } + + if rf, ok := ret.Get(1).(func([]byte, []byte, []byte) error); ok { + r1 = rf(address, key, value) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// SetProtectedStorageToAddressUnmetered provides a mock function with given fields: address, key, value +func (_m *MockStorageContext) SetProtectedStorageToAddressUnmetered(address []byte, key []byte, value []byte) (vmhost.StorageStatus, error) { + ret := _m.Called(address, key, value) + + if len(ret) == 0 { + return 0, nil + } + + var r0 vmhost.StorageStatus + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte, []byte) (vmhost.StorageStatus, error)); ok { + return rf(address, key, value) + } + if rf, ok := ret.Get(0).(func([]byte, []byte, []byte) vmhost.StorageStatus); ok { + r0 = rf(address, key, value) + } else { + r0 = ret.Get(0).(vmhost.StorageStatus) + } + + if rf, ok := ret.Get(1).(func([]byte, []byte, []byte) error); ok { + r1 = rf(address, key, value) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// SetStorage provides a mock function with given fields: key, value +func (_m *MockStorageContext) SetStorage(key []byte, value []byte) (vmhost.StorageStatus, error) { + ret := _m.Called(key, value) + + if len(ret) == 0 { + return 0, nil + } + + var r0 vmhost.StorageStatus + var r1 error + if rf, ok := ret.Get(0).(func([]byte, []byte) (vmhost.StorageStatus, error)); ok { + return rf(key, value) + } + if rf, ok := ret.Get(0).(func([]byte, []byte) vmhost.StorageStatus); ok { + r0 = rf(key, value) + } else { + r0 = ret.Get(0).(vmhost.StorageStatus) + } + + if rf, ok := ret.Get(1).(func([]byte, []byte) error); ok { + r1 = rf(key, value) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// UseGasForStorageLoad provides a mock function with given fields: tracedFunctionName, trieDepth, blockchainLoadCost, usedCache +func (_m *MockStorageContext) UseGasForStorageLoad(tracedFunctionName string, trieDepth int64, blockchainLoadCost uint64, usedCache bool) error { + ret := _m.Called(tracedFunctionName, trieDepth, blockchainLoadCost, usedCache) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(string, int64, uint64, bool) error); ok { + r0 = rf(tracedFunctionName, trieDepth, blockchainLoadCost, usedCache) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// NewMockStorageContext creates a new instance of MockStorageContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockStorageContext(t interface { + mock.TestingT + Cleanup(func()) +}) *MockStorageContext { + mock := &MockStorageContext{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mock/mockery/VMHost.go b/mock/mockery/VMHost.go new file mode 100644 index 000000000..4d30c5c64 --- /dev/null +++ b/mock/mockery/VMHost.go @@ -0,0 +1,671 @@ +package mockery + +import ( + crypto "github.com/multiversx/mx-chain-vm-go/crypto" + mock "github.com/stretchr/testify/mock" + + vm "github.com/multiversx/mx-chain-core-go/data/vm" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + + vmhost "github.com/multiversx/mx-chain-vm-go/vmhost" +) + +// MockVMHost is an autogenerated mock type for the VMHost type +type MockVMHost struct { + mock.Mock +} + +// AreInSameShard provides a mock function with given fields: leftAddress, rightAddress +func (_m *MockVMHost) AreInSameShard(leftAddress []byte, rightAddress []byte) bool { + ret := _m.Called(leftAddress, rightAddress) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte, []byte) bool); ok { + r0 = rf(leftAddress, rightAddress) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// Async provides a mock function with no fields +func (_m *MockVMHost) Async() vmhost.AsyncContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Async") + } + + var r0 vmhost.AsyncContext + if rf, ok := ret.Get(0).(func() vmhost.AsyncContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.AsyncContext) + } + } + + return r0 +} + +// Blockchain provides a mock function with no fields +func (_m *MockVMHost) Blockchain() vmhost.BlockchainContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Blockchain") + } + + var r0 vmhost.BlockchainContext + if rf, ok := ret.Get(0).(func() vmhost.BlockchainContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.BlockchainContext) + } + } + + return r0 +} + +// Close provides a mock function with no fields +func (_m *MockVMHost) Close() error { + ret := _m.Called() + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// CompleteLogEntriesWithCallType provides a mock function with given fields: vmOutput, callType +func (_m *MockVMHost) CompleteLogEntriesWithCallType(vmOutput *vmcommon.VMOutput, callType string) { + _m.Called(vmOutput, callType) +} + +// CreateNewContract provides a mock function with given fields: input, createContractCallType +func (_m *MockVMHost) CreateNewContract(input *vmcommon.ContractCreateInput, createContractCallType int) ([]byte, error) { + ret := _m.Called(input, createContractCallType) + + if len(ret) == 0 { + return []byte{}, nil + } + + var r0 []byte + var r1 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCreateInput, int) ([]byte, error)); ok { + return rf(input, createContractCallType) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCreateInput, int) []byte); ok { + r0 = rf(input, createContractCallType) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCreateInput, int) error); ok { + r1 = rf(input, createContractCallType) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Crypto provides a mock function with no fields +func (_m *MockVMHost) Crypto() crypto.VMCrypto { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Crypto") + } + + var r0 crypto.VMCrypto + if rf, ok := ret.Get(0).(func() crypto.VMCrypto); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(crypto.VMCrypto) + } + } + + return r0 +} + +// EnableEpochsHandler provides a mock function with no fields +func (_m *MockVMHost) EnableEpochsHandler() vmhost.EnableEpochsHandler { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for EnableEpochsHandler") + } + + var r0 vmhost.EnableEpochsHandler + if rf, ok := ret.Get(0).(func() vmhost.EnableEpochsHandler); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.EnableEpochsHandler) + } + } + + return r0 +} + +// ExecuteESDTTransfer provides a mock function with given fields: transfersArgs, callType +func (_m *MockVMHost) ExecuteESDTTransfer(transfersArgs *vmhost.ESDTTransfersArgs, callType vm.CallType) (*vmcommon.VMOutput, uint64, error) { + ret := _m.Called(transfersArgs, callType) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, 0, nil + } + + var r0 *vmcommon.VMOutput + var r1 uint64 + var r2 error + if rf, ok := ret.Get(0).(func(*vmhost.ESDTTransfersArgs, vm.CallType) (*vmcommon.VMOutput, uint64, error)); ok { + return rf(transfersArgs, callType) + } + if rf, ok := ret.Get(0).(func(*vmhost.ESDTTransfersArgs, vm.CallType) *vmcommon.VMOutput); ok { + r0 = rf(transfersArgs, callType) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmhost.ESDTTransfersArgs, vm.CallType) uint64); ok { + r1 = rf(transfersArgs, callType) + } else { + r1 = ret.Get(1).(uint64) + } + + if rf, ok := ret.Get(2).(func(*vmhost.ESDTTransfersArgs, vm.CallType) error); ok { + r2 = rf(transfersArgs, callType) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// ExecuteOnDestContext provides a mock function with given fields: input +func (_m *MockVMHost) ExecuteOnDestContext(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, bool, error) { + ret := _m.Called(input) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, true, nil + } + + var r0 *vmcommon.VMOutput + var r1 bool + var r2 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) (*vmcommon.VMOutput, bool, error)); ok { + return rf(input) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) *vmcommon.VMOutput); ok { + r0 = rf(input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCallInput) bool); ok { + r1 = rf(input) + } else { + r1 = ret.Get(1).(bool) + } + + if rf, ok := ret.Get(2).(func(*vmcommon.ContractCallInput) error); ok { + r2 = rf(input) + } else { + r2 = ret.Error(2) + } + + return r0, r1, r2 +} + +// ExecuteOnSameContext provides a mock function with given fields: input +func (_m *MockVMHost) ExecuteOnSameContext(input *vmcommon.ContractCallInput) error { + ret := _m.Called(input) + + if len(ret) == 0 { + return nil + } + + var r0 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) error); ok { + r0 = rf(input) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// GasScheduleChange provides a mock function with given fields: newGasSchedule +func (_m *MockVMHost) GasScheduleChange(newGasSchedule map[string]map[string]uint64) { + _m.Called(newGasSchedule) +} + +// GetContexts provides a mock function with no fields +func (_m *MockVMHost) GetContexts() (vmhost.ManagedTypesContext, vmhost.BlockchainContext, vmhost.MeteringContext, vmhost.OutputContext, vmhost.RuntimeContext, vmhost.AsyncContext, vmhost.StorageContext) { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetContexts") + } + + var r0 vmhost.ManagedTypesContext + var r1 vmhost.BlockchainContext + var r2 vmhost.MeteringContext + var r3 vmhost.OutputContext + var r4 vmhost.RuntimeContext + var r5 vmhost.AsyncContext + var r6 vmhost.StorageContext + if rf, ok := ret.Get(0).(func() (vmhost.ManagedTypesContext, vmhost.BlockchainContext, vmhost.MeteringContext, vmhost.OutputContext, vmhost.RuntimeContext, vmhost.AsyncContext, vmhost.StorageContext)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() vmhost.ManagedTypesContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.ManagedTypesContext) + } + } + + if rf, ok := ret.Get(1).(func() vmhost.BlockchainContext); ok { + r1 = rf() + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(vmhost.BlockchainContext) + } + } + + if rf, ok := ret.Get(2).(func() vmhost.MeteringContext); ok { + r2 = rf() + } else { + if ret.Get(2) != nil { + r2 = ret.Get(2).(vmhost.MeteringContext) + } + } + + if rf, ok := ret.Get(3).(func() vmhost.OutputContext); ok { + r3 = rf() + } else { + if ret.Get(3) != nil { + r3 = ret.Get(3).(vmhost.OutputContext) + } + } + + if rf, ok := ret.Get(4).(func() vmhost.RuntimeContext); ok { + r4 = rf() + } else { + if ret.Get(4) != nil { + r4 = ret.Get(4).(vmhost.RuntimeContext) + } + } + + if rf, ok := ret.Get(5).(func() vmhost.AsyncContext); ok { + r5 = rf() + } else { + if ret.Get(5) != nil { + r5 = ret.Get(5).(vmhost.AsyncContext) + } + } + + if rf, ok := ret.Get(6).(func() vmhost.StorageContext); ok { + r6 = rf() + } else { + if ret.Get(6) != nil { + r6 = ret.Get(6).(vmhost.StorageContext) + } + } + + return r0, r1, r2, r3, r4, r5, r6 +} + +// GetGasScheduleMap provides a mock function with no fields +func (_m *MockVMHost) GetGasScheduleMap() map[string]map[string]uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return map[string]map[string]uint64{} + } + + var r0 map[string]map[string]uint64 + if rf, ok := ret.Get(0).(func() map[string]map[string]uint64); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]map[string]uint64) + } + } + + return r0 +} + +// GetGasTrace provides a mock function with no fields +func (_m *MockVMHost) GetGasTrace() map[string]map[string][]uint64 { + ret := _m.Called() + + if len(ret) == 0 { + return map[string]map[string][]uint64{} + } + + var r0 map[string]map[string][]uint64 + if rf, ok := ret.Get(0).(func() map[string]map[string][]uint64); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]map[string][]uint64) + } + } + + return r0 +} + +// GetVersion provides a mock function with no fields +func (_m *MockVMHost) GetVersion() string { + ret := _m.Called() + + if len(ret) == 0 { + return "version" + } + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} + +// InitState provides a mock function with no fields +func (_m *MockVMHost) InitState() { + _m.Called() +} + +// IsAllowedToExecute provides a mock function with given fields: opcode +func (_m *MockVMHost) IsAllowedToExecute(opcode string) bool { + ret := _m.Called(opcode) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(opcode) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsBuiltinFunctionCall provides a mock function with given fields: data +func (_m *MockVMHost) IsBuiltinFunctionCall(data []byte) bool { + ret := _m.Called(data) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func([]byte) bool); ok { + r0 = rf(data) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsBuiltinFunctionName provides a mock function with given fields: functionName +func (_m *MockVMHost) IsBuiltinFunctionName(functionName string) bool { + ret := _m.Called(functionName) + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func(string) bool); ok { + r0 = rf(functionName) + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// IsInterfaceNil provides a mock function with no fields +func (_m *MockVMHost) IsInterfaceNil() bool { + ret := _m.Called() + + if len(ret) == 0 { + return false + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ManagedTypes provides a mock function with no fields +func (_m *MockVMHost) ManagedTypes() vmhost.ManagedTypesContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for ManagedTypes") + } + + var r0 vmhost.ManagedTypesContext + if rf, ok := ret.Get(0).(func() vmhost.ManagedTypesContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.ManagedTypesContext) + } + } + + return r0 +} + +// Metering provides a mock function with no fields +func (_m *MockVMHost) Metering() vmhost.MeteringContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Metering") + } + + var r0 vmhost.MeteringContext + if rf, ok := ret.Get(0).(func() vmhost.MeteringContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.MeteringContext) + } + } + + return r0 +} + +// Output provides a mock function with no fields +func (_m *MockVMHost) Output() vmhost.OutputContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Output") + } + + var r0 vmhost.OutputContext + if rf, ok := ret.Get(0).(func() vmhost.OutputContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.OutputContext) + } + } + + return r0 +} + +// Reset provides a mock function with no fields +func (_m *MockVMHost) Reset() { + _m.Called() +} + +// RunSmartContractCall provides a mock function with given fields: input +func (_m *MockVMHost) RunSmartContractCall(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error) { + ret := _m.Called(input) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, nil + } + + var r0 *vmcommon.VMOutput + var r1 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) (*vmcommon.VMOutput, error)); ok { + return rf(input) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCallInput) *vmcommon.VMOutput); ok { + r0 = rf(input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCallInput) error); ok { + r1 = rf(input) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// RunSmartContractCreate provides a mock function with given fields: input +func (_m *MockVMHost) RunSmartContractCreate(input *vmcommon.ContractCreateInput) (*vmcommon.VMOutput, error) { + ret := _m.Called(input) + + if len(ret) == 0 { + return &vmcommon.VMOutput{}, nil + } + + var r0 *vmcommon.VMOutput + var r1 error + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCreateInput) (*vmcommon.VMOutput, error)); ok { + return rf(input) + } + if rf, ok := ret.Get(0).(func(*vmcommon.ContractCreateInput) *vmcommon.VMOutput); ok { + r0 = rf(input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*vmcommon.VMOutput) + } + } + + if rf, ok := ret.Get(1).(func(*vmcommon.ContractCreateInput) error); ok { + r1 = rf(input) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Runtime provides a mock function with no fields +func (_m *MockVMHost) Runtime() vmhost.RuntimeContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Runtime") + } + + var r0 vmhost.RuntimeContext + if rf, ok := ret.Get(0).(func() vmhost.RuntimeContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.RuntimeContext) + } + } + + return r0 +} + +// SetBuiltInFunctionsContainer provides a mock function with given fields: builtInFuncs +func (_m *MockVMHost) SetBuiltInFunctionsContainer(builtInFuncs vmcommon.BuiltInFunctionContainer) { + _m.Called(builtInFuncs) +} + +// SetGasTracing provides a mock function with given fields: enableGasTracing +func (_m *MockVMHost) SetGasTracing(enableGasTracing bool) { + _m.Called(enableGasTracing) +} + +// SetRuntimeContext provides a mock function with given fields: runtime +func (_m *MockVMHost) SetRuntimeContext(runtime vmhost.RuntimeContext) { + _m.Called(runtime) +} + +// Storage provides a mock function with no fields +func (_m *MockVMHost) Storage() vmhost.StorageContext { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for Storage") + } + + var r0 vmhost.StorageContext + if rf, ok := ret.Get(0).(func() vmhost.StorageContext); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(vmhost.StorageContext) + } + } + + return r0 +} + +// NewMockVMHost creates a new instance of MockVMHost. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewMockVMHost(t interface { + mock.TestingT + Cleanup(func()) +}) *MockVMHost { + mock := &MockVMHost{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/scenario/gasSchedules/gasSchedules.go b/scenario/gasSchedules/gasSchedules.go index 807248821..4b2ef7565 100644 --- a/scenario/gasSchedules/gasSchedules.go +++ b/scenario/gasSchedules/gasSchedules.go @@ -1,17 +1,5 @@ package gasschedules -// TODO: go:embed can be used after we upgrade to go 1.16 -// import _ "embed" - -// //go:embed gasScheduleV1.toml -// var gasScheduleV1 string - -// //go:embed gasScheduleV2.toml -// var gasScheduleV2 string - -// //go:embed gasScheduleV3.toml -// var gasScheduleV3 string - //go:generate go run scripts/includetoml.go // GetV3 yields the schedule V3 diff --git a/test/adder/output/adder.mxsc.json b/test/adder/output/adder.mxsc.json index b5c43f2f1..a610f2b17 100644 --- a/test/adder/output/adder.mxsc.json +++ b/test/adder/output/adder.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "adder", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -87,7 +87,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/contracts/unsafeOps/unsafeOps.c b/test/contracts/unsafeOps/unsafeOps.c new file mode 100644 index 000000000..455cb586c --- /dev/null +++ b/test/contracts/unsafeOps/unsafeOps.c @@ -0,0 +1,24 @@ +#include "../mxvm/context.h" + +// Forward declaration of the C functions, assuming they are linked externally +void mx_activate_unsafe_mode(void); +void mx_deactivate_unsafe_mode(void); +void bigIntTDiv(int, int, int); + +void activateUnsafeMode(void) { + mx_activate_unsafe_mode(); +} + +void deactivateUnsafeMode(void) { + mx_deactivate_unsafe_mode(); +} + +void testDivByZero(void) { + int a = bigIntNew(1); + int b = bigIntNew(0); + int c = bigIntNew(0); + bigIntTDiv(c, a, b); +} + +// Dummy function to satisfy the build system +void _start() {} \ No newline at end of file diff --git a/test/contracts/unsafeOps/unsafeOps.export b/test/contracts/unsafeOps/unsafeOps.export new file mode 100644 index 000000000..2d4c8b2e7 --- /dev/null +++ b/test/contracts/unsafeOps/unsafeOps.export @@ -0,0 +1,3 @@ +activateUnsafeMode +deactivateUnsafeMode +testDivByZero \ No newline at end of file diff --git a/test/crowdfunding-esdt/output/crowdfunding-esdt.mxsc.json b/test/crowdfunding-esdt/output/crowdfunding-esdt.mxsc.json index af14beffa..562b96284 100644 --- a/test/crowdfunding-esdt/output/crowdfunding-esdt.mxsc.json +++ b/test/crowdfunding-esdt/output/crowdfunding-esdt.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "crowdfunding-esdt", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -144,7 +144,7 @@ } } }, - "code": "0061736d01000000015b1060017f017f60027f7f017f60017f006000017f60000060027f7f0060037f7f7f017f60037f7f7f0060057f7f7e7f7f017f60017f017e60027f7e0060057f7f7f7e7f006000017e60017e0060047f7f7f7f017f60047f7f7f7f0002b1072603656e760e626967496e74536574496e743634000a03656e7609626967496e74416464000703656e760b7369676e616c4572726f72000503656e761b6d616e616765645472616e7366657256616c756545786563757465000803656e76106d4275666665724765744c656e677468000003656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000803656e760d6d616e6167656443616c6c6572000203656e76106d616e61676564534341646472657373000203656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000203656e7619626967496e74476574556e7369676e6564417267756d656e74000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e760f6765744e756d417267756d656e7473000303656e7614626967496e7446696e697368556e7369676e6564000203656e760a626967496e745369676e000003656e760f6d4275666665725365744279746573000603656e76126d42756666657253746f726167654c6f6164000103656e76196d42756666657246726f6d426967496e74556e7369676e6564000103656e76136d42756666657253746f7261676553746f7265000103656e76176d427566666572546f426967496e74556e7369676e6564000103656e76126d427566666572476574417267756d656e74000103656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000103656e760f6d4275666665724765744279746573000103656e761c626967496e744765744553445445787465726e616c42616c616e6365000b03656e7618626967496e7447657445787465726e616c42616c616e6365000503656e7611676574426c6f636b54696d657374616d70000c03656e7609626967496e74436d70000103656e760e636865636b4e6f5061796d656e74000403656e761776616c6964617465546f6b656e4964656e746966696572000003656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000203656e7612626967496e7447657443616c6c56616c7565000203656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e76136d616e616765644f776e657241646472657373000203656e760d6d42756666657246696e697368000003656e760666696e697368000503656e76136d42756666657247657442797465536c696365000e03656e76096d42756666657245710001032d2c0003050f0001000301000002020000020300000306010005000907030302030303000404040404040404040405030100030616037f01418080080b7f00418184080b7f00419084080b07a9010d066d656d6f7279020004696e697400480466756e64004906737461747573004a0f67657443757272656e7446756e6473004b05636c61696d004c09676574546172676574004d0b676574446561646c696e65004e0a6765744465706f736974004f1e67657443726f776466756e64696e67546f6b656e4964656e74696669657200500863616c6c4261636b00510a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ada132c1601017f1027220142001000200120012000100120010b1901017f41bc830841bc830828020041016b220036020020000b0900200020011002000b0f002000200142002002200310031a0b0900200010044104760b0d00200020014110103a4101730b1300415841a18108410b100f1a41582000103b0b0c01017f10272200100620000b1101017f1027220220002001100f1a20020b0d0020001027220010141a20000b4701017f230041106b220124000240200010044104470d002001410036020c20002001410c6a4104103a1a200128020c41c58eb1a204470d00103921000b200141106a240020000b1400100c20004604400f0b41bc800841191002000b080020001033100d0b0f002000103c1027220010131a20000b2b01027f2000418084082d0000220171200041ff01714622024504404180840820002001723a00000b20020bba0402077f017e230041106b2203240020002802102104200028020c210120002903002108200028020821001036210510362106024002402000280200102c4504402000280200103621001037210220032001280200102636020c200320083703000c010b2001280200103841ff0171450d0110362100200128020010262101103921022003200136020c200342003703000b20032002360208230041106b2201240020012003280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002001200328020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20012003290300220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe0383200842388884848437020420002001411010081a200141106a240020042802002104230041106b220124000240200010040440200141086a42003703002001420037030002402000102a4101470d0020002001102b1a200128020c21022001280200220741187420074180fe03714108747220074108764180fe037120074118767272102c450d002004200241187420024180fe03714108747220024108764180fe0371200241187672722005200610290c020b2004200042002005200610051a0c010b1027220042001000200420002005200610290b200141106a2400200341106a24000f0b41d5800841211002000b080041014100102e0b0f01017f10152201200010161a20010b11002000100e220041004a20004100486b0b0a0041a18108410b102e0b0f00200041002002200110244100470b0b0020002001102541004a0b0d0020001027220010101a20000b1401017f10272202200110111a2000200210121a0b08002000103c10300bc00102037f017e230041106b22012400200142003703082000103c22031004220241094f044041b08108411b102e2201200010161a200141b98008410310081a200141f68008410e10081a20011009000b2003200120026b41106a2002103a1a20012903082104200141106a2400200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484840b0d00200020012002102e10121a0b5201047f1042103e2202102c102722001007200021031027210045044020021004210120031043200241e0830810171a41c0830841e08308200142002000101820000f0b2003104341c083082000101920000b0a0041a38308410f102e0b0b00200041c0830810171a0b2101017f101a1045103f5a047f41014102104110461033101b41004e1b0541000b0b0a00419583084108102e0b0a00419d83084106102e0b1501017f41b283084107102e2201200010161a20010bfe0202047f027e230041106b22032400101c41031031410010272201100a200121004101100b21044102102f103021010240024020001038c041004a044010462000103d101a20045a0d0110452003200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc078384200442288822054280fe0383200442388884848437030841002004428080808080808080015422002004423088a741ff01711b220220006a410020022005a741ff01711b22006a410020002004422088a741ff01711b22006a410020002004a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b6a2200200341086a6a410820006b10402001102c4504402001101d450d030b1042210002402001102c4504402000200110121a0c010b200041ac8108410410400b200341106a24000f0b41808208411a1028000b419a8208411d1028000b41b7820841161028000b960201047f230041106b220124004100103141021034450440415a101e0b024002400240027f024002400240415a102a0e020102000b4180800841221002000b1039210041011034450440415d101f0b415d10260c010b200141086a420037030020014200370300415a2001102b450d01200128020c21022001280200220041187420004180fe03714108747220004108764180fe03712000411876727210372100200241187420024180fe03714108747220024108764180fe03712002411876727210260b2102104441ff01710d0120001042103e103b450d02102d104722031033220020002002100120032000103d200141106a24000f0b41848108411d1002000b41db8108411a1028000b41f58108410b1028000b1100101c41001031104441ff0171ad10200b0c00101c410010311041100d0b870201037f230041306b22002400101c4100103102400240024002400240104441ff017141016b0e020102000b41cd8208411c1028000b2000102d220136020c10272202102120012002103b450d0220001042103e36021020001041360214200042003703182000200041146a3602242000200041106a36022020002000410c6a360228200041186a10350c010b2000102d220136020c2000200110471033220236021020021038c041004c0d0020001042103e36021420011047416c41014100100f1a416c10121a200042003703182000200041106a3602242000200041146a36022020002000410c6a360228200041186a10350b200041306a24000f0b41e9820841271028000b0c00101c41001031104610320b0e00101c410010311045103f10200b4c01017f101c410110314100102f22001004412047044041a280084117102e220041908308410510081a200041b98008410310081a200041cb8108411010081a20001009000b2000104710320b2401017f101c410010311042103e2200102c450440200010221a0f0b41ac8108410410230b02000b0bcd030200418080080bb903696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e74737472616e736665722065786563757465207265717569726573207061796d656e74696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e676545474c442d30303030303045474c4473746f72616765206465636f6465206572726f7220286b65793a20626164206172726179206c656e67746863616e6e6f742066756e6420616674657220646561646c696e6577726f6e6720746f6b656e546172676574206d757374206265206d6f7265207468616e2030446561646c696e652063616e277420626520696e207468652070617374496e76616c696420746f6b656e2070726f766964656463616e6e6f7420636c61696d206265666f726520646561646c696e656f6e6c79206f776e65722063616e20636c61696d207375636365737366756c2066756e64696e67646f6e6f72646561646c696e65746172676574746f6b656e4964656e7469666965726465706f7369740041bc83080b0438ffffff", + "code": "0061736d0100000001540f60017f017f60017f006000017f60027f7f017f60000060027f7f0060037f7f7f017f60017f017e60027f7e0060057f7f7e7f7f017f60037f7f7f0060057f7f7f7e7f006000017e60017e0060047f7f7f7f017f02f5072803656e760e626967496e74536574496e743634000803656e7609626967496e74416464000a03656e760b7369676e616c4572726f72000503656e760d6d616e6167656443616c6c6572000103656e76106d616e61676564534341646472657373000103656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000103656e76106d4275666665724765744c656e677468000003656e7619626967496e74476574556e7369676e6564417267756d656e74000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000703656e760f6765744e756d417267756d656e7473000203656e7614626967496e7446696e697368556e7369676e6564000103656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000903656e761b6d616e616765645472616e7366657256616c756545786563757465000903656e760a626967496e745369676e000003656e760f6d4275666665725365744279746573000603656e76126d42756666657253746f726167654c6f6164000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76136d42756666657253746f7261676553746f7265000303656e76196d427566666572546f536d616c6c496e74556e7369676e6564000703656e76176d427566666572546f426967496e74556e7369676e6564000303656e76126d427566666572476574417267756d656e74000303656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000303656e760f6d4275666665724765744279746573000303656e761c626967496e744765744553445445787465726e616c42616c616e6365000b03656e7618626967496e7447657445787465726e616c42616c616e6365000503656e7613676574426c6f636b54696d657374616d704d73000c03656e7609626967496e74436d70000303656e760e636865636b4e6f5061796d656e74000403656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000803656e761776616c6964617465546f6b656e4964656e746966696572000003656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000103656e7612626967496e7447657443616c6c56616c7565000103656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e76136d616e616765644f776e657241646472657373000103656e760d6d42756666657246696e697368000003656e760666696e697368000503656e76136d42756666657247657442797465536c696365000e03656e76096d427566666572457100030329280002050203000001010000010200000002060300050700020201020202000404040404040404040405030100030616037f01418080080b7f0041f183080b7f00418084080b07a9010d066d656d6f7279020004696e697400460466756e6400470673746174757300480f67657443757272656e7446756e6473004905636c61696d004a09676574546172676574004b0b676574446561646c696e65004c0a6765744465706f736974004d1e67657443726f776466756e64696e67546f6b656e4964656e746966696572004e0863616c6c4261636b004f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ac50e281601017f1029220142001000200120012000100120010b1901017f41ac830841ac830828020041016b220036020020000b0900200020011002000b0c01017f10292200100320000b1101017f1029220220002001100f1a20020b0d0020001029220010151a20000b4701017f230041106b220124000240200010074104470d002001410036020c20002001410c6a410410391a200128020c41c58eb1a204470d00103821000b200141106a240020000b1400100a20004604400f0b41bc800841191002000b080020001031100b0b0f002000103b1029220010141a20000b2b01027f200041f083082d0000220171200041ff017146220245044041f0830820002001723a00000b20020bb00202017e067f230041106b2203240020002802102104200028020c210220002903002101200028020821001034210510342106024020002802001035450440200028020010342107103621002002280200102821022003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484843702042003200041187420004180fe03714108747220004108764180fe0371200041187672723602002003200241187420024180fe03714108747220024108764180fe03712002411876727236020c20072003411010051a20042802002007420020052006100c1a0c010b20042802002002280200420020052006100d1a0b200341106a24000b080041014100102c0b1300415841938108410b100f1a41582000103a0b0f01017f10162201200010171a20010b11002000100e220041004a20004100486b0b0a0041938108410b102c0b0f00200041002002200110264100470b0b0020002001102741004a0b0d0020001029220010101a20000b1401017f10292202200110111a2000200210121a0b4001017f2000103b2201100741094f044041a28108411b102c2201200010171a200141b98008410310051a200141d58008410e10051a20011006000b200110130b08002000103b102e0b5201047f1040103e22021035102922001004200021031029210045044020021007210120031041200241d0830810181a41b0830841d08308200142002000101920000f0b2003104141b083082000101a20000b0a0041958308410f102c0b0b00200041b0830810181a0b2101017f101b1043103d5a047f41014102103f10441031101c41004e1b0541000b0b0a00418783084108102c0b0a00418f83084106102c0b1501017f41a483084107102c2201200010171a20010b930102027f017e101d4103102f4100102922001008200021014101100921024102102d102e21000240024020011037c041004a044010442001103c101b20025a0d01104341672002101e416710121a200010354504402000101f450d030b104020001035047f419e81084104102c0520000b10121a0f0b41f28108411a102a000b418c8208411d102a000b41a982084116102a000bad0201047f230041106b220124004100102f41021032450440415a10200b027f024002400240415a10074104760e020102000b4180800841221002000b1038210041011032450440415d10210b415d10280c010b200141086a4200370300200142003703000240415a100741104f0440415a200141101039450d0141e3800841131002000b41f68008411d1002000b200128020c21022001280200220041187420004180fe03714108747220004108764180fe03712000411876727210362100200241187420024180fe03714108747220024108764180fe03712002411876727210280b21020240104241ff017145044020001040103e103a450d01102b104522031031220020002002100120032000103c200141106a24000f0b41cd8108411a102a000b41e78108410b102a000b1100101d4100102f104241ff0171ad10220b0c00101d4100102f103f100b0b870201037f230041306b22002400101d4100102f02400240024002400240104241ff017141016b0e020102000b41bf8208411c102a000b2000102b220136020c10292202102320012002103a450d0220001040103e3602102000103f360214200042003703182000200041146a3602242000200041106a36022020002000410c6a360228200041186a10330c010b2000102b220136020c2000200110451031220236021020021037c041004c0d0020001040103e36021420011045416c41014100100f1a416c10121a200042003703182000200041106a3602242000200041146a36022020002000410c6a360228200041186a10330b200041306a24000f0b41db82084127102a000b0c00101d4100102f104410300b0e00101d4100102f1043103d10220b4c01017f101d4101102f4100102d22001007412047044041a280084117102c220041828308410510051a200041b98008410310051a200041bd8108411010051a20001006000b2000104510300b2401017f101d4100102f1040103e22001035450440200010241a0f0b419e8108410410250b02000b0bbf030200418080080bab03696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e747376616c756520746f6f206c6f6e67736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d30303030303045474c4473746f72616765206465636f6465206572726f7220286b65793a20626164206172726179206c656e67746863616e6e6f742066756e6420616674657220646561646c696e6577726f6e6720746f6b656e546172676574206d757374206265206d6f7265207468616e2030446561646c696e652063616e277420626520696e207468652070617374496e76616c696420746f6b656e2070726f766964656463616e6e6f7420636c61696d206265666f726520646561646c696e656f6e6c79206f776e65722063616e20636c61696d207375636365737366756c2066756e64696e67646f6e6f72646561646c696e65746172676574746f6b656e4964656e7469666965726465706f7369740041ac83080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -158,13 +158,14 @@ "bigIntSign", "checkNoPayment", "finish", - "getBlockTimestamp", + "getBlockTimestampMs", "getNumArguments", "mBufferAppend", "mBufferAppendBytes", "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", @@ -174,6 +175,7 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedCaller", "managedGetMultiESDTCallValue", "managedMultiTransferESDTNFTExecute", @@ -188,12 +190,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/crowdfunding-esdt.wasm", - "size": 4289, + "size": 3671, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/crowdfunding-esdt/scenarios/crowdfunding-claim-failed.scen.json b/test/crowdfunding-esdt/scenarios/crowdfunding-claim-failed.scen.json index 5ec115d7d..e5546def0 100644 --- a/test/crowdfunding-esdt/scenarios/crowdfunding-claim-failed.scen.json +++ b/test/crowdfunding-esdt/scenarios/crowdfunding-claim-failed.scen.json @@ -86,7 +86,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/crowdfunding-esdt/scenarios/crowdfunding-claim-successful.scen.json b/test/crowdfunding-esdt/scenarios/crowdfunding-claim-successful.scen.json index b4e8cab08..2a1fc8de1 100644 --- a/test/crowdfunding-esdt/scenarios/crowdfunding-claim-successful.scen.json +++ b/test/crowdfunding-esdt/scenarios/crowdfunding-claim-successful.scen.json @@ -85,7 +85,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/crowdfunding-esdt/scenarios/crowdfunding-fund-too-late.scen.json b/test/crowdfunding-esdt/scenarios/crowdfunding-fund-too-late.scen.json index 1320619c8..a0535576b 100644 --- a/test/crowdfunding-esdt/scenarios/crowdfunding-fund-too-late.scen.json +++ b/test/crowdfunding-esdt/scenarios/crowdfunding-fund-too-late.scen.json @@ -8,7 +8,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-failed.scen.json b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-failed.scen.json index be2df15dc..264b88155 100644 --- a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-failed.scen.json +++ b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-failed.scen.json @@ -68,7 +68,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-successful.scen.json b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-successful.scen.json index 4d911a34d..6b9b2523c 100644 --- a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-successful.scen.json +++ b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-claim-successful.scen.json @@ -68,7 +68,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-fund-too-late.scen.json b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-fund-too-late.scen.json index 021c8ebaa..7acc89895 100644 --- a/test/crowdfunding-esdt/scenarios/egld-crowdfunding-fund-too-late.scen.json +++ b/test/crowdfunding-esdt/scenarios/egld-crowdfunding-fund-too-late.scen.json @@ -8,7 +8,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/digital-cash/output/digital-cash.mxsc.json b/test/digital-cash/output/digital-cash.mxsc.json index 54b2eeb1f..78d9c5be4 100644 --- a/test/digital-cash/output/digital-cash.mxsc.json +++ b/test/digital-cash/output/digital-cash.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "digital-cash", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -264,7 +264,7 @@ } } }, - "code": "0061736d01000000016b1360027f7f0060017f017f60027f7f017f60000060017f006000017f60037f7f7f0060037f7f7f017f60047f7f7f7f017f60047f7f7f7f0060057f7f7e7f7f017f60027f7e017f60027f7e006000017e60017f017e60037f7f7e0060017e017f60027e7f0060027f7f017e02e6062403656e760e626967496e74536574496e743634000c03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000203656e760d676574426c6f636b526f756e64000d03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000a03656e760d6d616e6167656443616c6c6572000403656e76136d616e616765644f776e657241646472657373000403656e760f6d4275666665725365744279746573000703656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000403656e76106d4275666665724765744c656e677468000103656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000e03656e760f6765744e756d417267756d656e7473000503656e7609626967496e74537562000603656e76146d427566666572436f707942797465536c696365000803656e7609626967496e74436d70000203656e7609626967496e744d756c000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e76126d427566666572476574417267756d656e74000203656e760e636865636b4e6f5061796d656e74000303656e7614626967496e7446696e697368556e7369676e6564000403656e76136d42756666657253657442797465536c696365000803656e76146d616e6167656456657269667945643235353139000703656e760d6d42756666657246696e697368000103656e760a626967496e745369676e000103656e76136d42756666657247657442797465536c696365000803656e76096d4275666665724571000203656e761b6d616e616765645472616e7366657256616c756545786563757465000a037473010500000001000101000004000406020101000200050000050001040009000f01010201090505030501050105040000020701050101010406010202070906000100080002020b100b00010101000000060004020200001100061201060202000000090202010303030303030303030303030305030100030616037f01418080080b7f00418587080b7f00419087080b07d00110066d656d6f7279020004696e6974008a011177686974656c697374466565546f6b656e008b0111626c61636b6c697374466565546f6b656e008c0109636c61696d46656573008d0109676574416d6f756e74008e010d706179466565416e6446756e64008f010466756e640090010b6465706f7369744665657300910108776974686472617700920105636c61696d00930107666f7277617264009401076465706f7369740095010863616c6c4261636b0096010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ae139731601017f1025220142001000200120012000100120010b1901017f418087084180870828020041016b220036020020000b11002000280210200110272000200110280b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104100c1a200241106a24000b4301017f0240200028020822021047450440200220011083010c010b410420011027200141d185084104100c1a0b20002903002001107b200028020c106e20011083010b0f01017f10032201200010041a20010b4a01017f230041106b220224002001102b102c45044041b680084119102d000b2001102b2000102e200241046a2200102f200020011029103020001031200020011030200241106a24000b1401017f41d680084103105422012000107120010b0e002000416710181a4167100e450b0900200020011002000b0b0020002001106e10191a0b0f00200041ac8608411410541085010b4101037f200028020822032001103345044020002802042202107f21042000280200200441016a2200107820011073200220001075200320012002107f1080010b0b0f002000419c8608411010541085010beb0101037f230041f0006b22032400200341346a102f02400240200328023c20022802082204103304402004102b10341a027f200110352201102c450440200228020c2102200341406b220520011036200328026820001037450d03200328025820041037450d04200328025c2002103820050c010b10392104200341086a4200370300200341186a200241086a2903003703002003200436022c2003200036022820034200370300200341003602202003200229030037031020030b210220012002103a200341f0006a24000f0b41f280084119102d000b41d782084119102d000b41f082084124102d000b0c00200020011082014100470b080020001070106f0b1501017f41c08608410710542201200010041a20010b840202057f027e230041306b220224002002200110702203100e360214200241003602102002200336020c2002410c6a2203412020011060210620032001105f210310392105034020030440200241186a22042002410c6a2001107d200520041040200341016b21030c010b0b2002410c6a22042001107e21072002410c6a2001107e210820042001105f2103200241186a20042001107d2002200336022820022802142002280210470440200141808008410e1062000b20002002290318370310200041206a200241286a290300370300200041186a200241206a2903003703002000200536022c200020063602282000200837030820002007370300200241306a24000b0b0020002001102241004a0b0a0020002000200110010b08004101410010540b3f01017f4101410010542202200128022810041a200128022c2002107a20012903002002107b20012903082002107b200141106a200210262000200210191a0b900101067f230041206b22022400103c21030240200028020820031037450440200241106a22042000103d2002280218103e200228021c2105200241086a103f200228020c210620022802082107103921001029210320022005102436021c2002420037031020022003360218200020041040200120002007200610410c010b2001200028020c10420b200241206a24000b0a0041b68308410b10540b3002017f017e200128020810292102200129030021032000200128020c102436020c20002003370300200020023602080b140020001047044041c48508410d1002000b20000b1601017f1039210120001039360204200020013602000b2301017f230041106b22022400200120021067200020024110100c1a200241106a24000bb90101037f230041106b22042400024020011044450440200441086a4200370300200442003703000240200110454101470d002001200410461a200428020c21052004280200220641187420064180fe03714108747220064108764180fe0371200641187672721047450d002000200541187420054180fe03714108747220054108764180fe0371200541187672722002200310480c020b2000200142002002200310061a0c010b200010492002200310480b200441106a24000b150041674101410010091a200020011039416710480b6802017f017e230041306b2203240020032001103522011036200328022c104445044041ea81084110102d000b20032000104520032802206a36022020032002370300100521042003200036022c2003200420024206807c37030820012003103a200341306a24000b07002000100e450b09002000100e4104760b0f00200041002001411010664101730b1300415841b68308410b10091a4158200010370b0f002000200142002002200310231a0b0e01017f102522004200100020000b0c01017f10252200100720000b1d01017f1025220010082000104a103704400f0b41c7860841241002000b4901017f02404108104d0d00104e104f41ff017141014704401050210041594101410010091a4159200010041a0c010b415841b68308410b10091a415941c18308411010091a0b41590b2b01027f2000418487082d0000220171200041ff01714622024504404184870820002001723a00000b20020b10004101104d450440415d100a0b415d0b0d002000105d41ff017141016b0b10004102104d450440415a100b0b415a0b5d01027f230041106b2201240002400240024002401050220210450e020102000b41d1830841221002000b103c21022000104e102436020c20004200370300200020023602080c010b20012002105220002001103d0b200141106a24000bf10102017e027f230041106b22032400200341086a420037030020034200370300200120031046044020032902042102200328020021012000200328020c220441187420044180fe03714108747220044108764180fe03712004411876727236020c2000200141187420014180fe03714108747220014108764180fe0371200141187672723602082000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe03832002423888848484370300200341106a24000f0b41a78508411d1002000b3001017f41b5840841171054220220002001100c1a200241cc84084103100c1a200241ff85084110100c1a2002100d000b1101017f102522022000200110091a20020b1900200010562200100e4120470440200120021053000b20000b0d00200010252200101a1a20000b0e01017f410010252200100f20000b08002000105610590b4901017f230041106b2201240002402000100e4104470d002001410036020c200041002001410c6a410410661a200128020c41c58eb1a204470d00103c21000b200141106a240020000b1c00200010562200100e41c00047044041c3810841091053000b20000b1400101120004604400f0b41cf840841191002000b1f0020002001200210122000105d41ff017104400f0b41e8840841301002000b140020001020220041004a20004100486b41016a0b0e00200020002001105f200110600b5101017f230041106b220224002002410036020c20002002410c6a41042001108601200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001106120032802084101710440200328020c2000200120046a360204200341106a24000f0b200241988508410f1062000b1f0020012002200310032201101321022000200136020420002002453602000b2c01017f41e08508411b10542203200010041a200341cc84084103100c1a200320012002100c1a2003100d000b0b00200020014104100c1a0b6601037f230041406a220124001039210220012000100e360214200141003602102001200036020c200141206a21000340200141186a2001410c6a10652001280218410147450440200141306a22032000103d2002200310400c010b0b200141406b240020020be90102017e027f230041206b220324002003410f6a2001108401200020032d000f047e20032900142102200328001021012000200328001c220441187420044180fe03714108747220044108764180fe0371200441187672723602142000200141187420014180fe03714108747220014108764180fe0371200141187672723602102000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe0383200242388884848437030842010542000b370300200341206a24000b0f00200020012003200210214100470bb90102017f017e20012000280208220241187420024180fe03714108747220024108764180fe0371200241187672723600002001200028020c220241187420024180fe03714108747220024108764180fe03712002411876727236000c20012000290300220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843700040b1300200020011014220041004a20004100486b0b130041752001ad1000200020004175101520000b0e00200020002001106b101520000b0a0041752000100041750b1601027f2001106b21021025220320002002101520030b0a00200020002001105c0b0f01017f10252201200010161a20010b0d0020001025220010171a20000b0d0020001025220010181a20000b08002001200010720b6901027f230041106b2202240002402000104745044020022000100e220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a10632001200010041a0c010b410420011079200141d1850810630b200241106a24000b1c00200110474504402000200110191a0f0b200041d18508410410740b0d00200020012002105410191a0b8e0102037f017e230041106b22022400200220013a000f20022001ad22054218883c000c20022005421088a722033a000d20022005420888a722043a000e20024100360208200041054104200141808080084922001b2000200341ff0171457122006a41002000200441ff01711b22006a4100200020011b6a2200200241086a6a410820006b1074200241106a24000b1200416c4101410010091a2000416c10191a0b0c00200020011078107010590b190020001029220041d585084105100c1a20012000107920000b4301017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a1063200241106a24000b5d01017f230041306b22022400200010452001102720022000100e360214200241003602102002200036020c200241206a21000340200241186a2002410c6a106520022802184101474504402000200110280c010b0b200241306a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100c1a200241106a24000b0c00200020011036200110760b3302017f017e20012002105e1059210320012002107e2104200020012002105e106f36020c20002003360208200020043703000b850102017e017f230041106b22032400200342003703082000200341086a4108200110860120032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840bbe0102017e037f230041106b22022400200242003703080240200010702204100e2203410949044020044100200220036b41106a200310661a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d01200241106a24002001a70f0b200041808008410e1062000b200041808008410e1062000b0d0020002001108101200210750b190020001029220041da85084106100c1a20012000107220000b0b0020002001108101107f0b5101027f230041106b2202240020022000100e220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100c1a2001200010041a200241106a24000b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010661a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b2e01027f20011029210220011029220341fb85084104100c1a2000200336020420002001360200200020023602080b2e01017f2000280200200028020422042001200210660440200341988508410f1062000b2000200220046a3602040b0c00200020011068c041004a0b0c00200020011068c041004c0b1401017f418f8608410d105422012000107120010b1000101b4102105b105741011058102a0b1200101b104b4102105b105741011058102a0be80101087f230041106b22012400101b104b4101105b024002400240410010582204102b102c4504402004102b1076200141046a102f200128020c220520041082012202450d02024020012802082203107f220020024f044020002002460d032003107f2000490d05200128020422072000107721062003107f2002490d01200720021078200610730c030b0c040b0c030b419e80084118102d000b2003107f20004904400c020b20012802042000107810762003200041016b1075200020024704402005200620021080010b2005200410810110760b200141106a24000f0b41eb860841121002000b8e0201097f230041306b22002400101b104b4100105b200041146a10312000280218107f2106104a2105103921042000280214210741012103034002400240200320064d04402007200310772201108901220810342102200810762002104f41ff0171450d022001103c10370d012001103e2101200042003702242000200241187420024180fe03714108747220024108764180fe03712002411876727236022c2000200141187420014180fe03714108747220014108764180fe0371200141187672723602202004200041206a4110100c1a0c020b2004100e0440200041086a103f200520042000280208200028020c10410b200041306a24000f0b2005200210420b200341016a21030c000b000bc60202047f027e230041d0006b22002400101b4103105b410041cf8008410710552101410110582103410210102105027f0240200110352201102c4504402000200110362000200028022c2201100e360238200041003602342000200136023003402000413f6a200041306a10840120002d003f4101470d0220002900442104200028004c21012000280040220241187420024180fe03714108747220024108764180fe0371200241187672722003103745200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484200552720d000b200141187420014180fe03714108747220014108764180fe0371200141187672720c020b418e80084110102d000b10490b101c200041d0006a24000b8f0302067f027e230041d0006b220024004102105b410041cf80084107105521054101101021060240024002400240104c106422041044450440200041406b220120041052200041106a2001103d2000280218102b2102200120041052200041206a2001103d2002102c0d012002103421012004104521032001102420031069210220011024200341016b10692103200028022c220120031014044020012002108701450d030b024020012003108701450440200410452202450d0510392101200041086a20044110200241047441106b10612000280208410171450d062001200028020c10041a2000200336021c0c010b2000200236021c2000280228210320002903202107200120012002105c2000200136023c2000200737033020002003360238200041306a200041406b220110672004410041102001101d1a200421010b104a2005200041106a10322001200520061043200041d0006a24000f0b418b81084117102d000b41f280084119102d000b41d980084119102d000b41a78508411d1002000b41a78508411d1002000bae0102067f017e230041306b220024004102105b410041cf800841071055210141011010210602400240024020011035102c450440200020011035103620002802282102104a20021037450d01200028021c21022000280218102b1034104c1064220410452205450d022005ad106a2002108801450d032004200120061043200041306a24000f0b41b381084110102d000b41a281084111102d000b41948308411d102d000b41fa81084138102d000b7201027f230041106b22002400024002400240024002401050220110450e020102000b41988408411d1002000b104e1a0c010b20002001105220002802081047450d010b4101105b410041cf800841071055210120001051104a200120001032200041106a24000f0b41f3830841251002000bac0101037f230041d0006b22002400101b4101105b0240410041cf80084107105510352201102c450440200041106a2001107c200028022c21012000280228210210052000290318580d01200020023602482000200136024c20004200370340200028023c2201200041406b104020011044450440200041086a103f200028023820012000280208200028020c10410b200041d0006a24000f0b418e80084110102d000b41b282084125102d000beb0102077f017e230041406a22002400101b4102105b410041cf80084107105521014101105a21030240200110352202102c4504402001104a22062003101e1a10052107200041106a2002107c200028023c220110452102200028022c2103200028022810292204102b1034210520002903182007540d01200320052002ad106a2202106d20041089012204103422052002103820042005102e20011044450440200041086a103f200620012000280208200028020c10410b2003104fc041004a0440200041206a2000280238103b0b200041406b24000f0b418e80084110102d000b41db8108410f102d000bb50202077f037e230041f0006b220024004103105b410041cf8008410710552101410141cc8108410f105521024102105a210520001051104a2103200028020810292104200120032005101e1a20032002200010322002103521022004102b10342103200041106a20011035107c200028023c220510452101200041406b2206200210360240200028026c1044044020032001ad2207106c200028025c108801450d012000200029031022083703402000200028026020016a360260100521092000200536026c2000200920084206807c37034820022006103a20032007106c2101200028022c22022001106d20041089012203103422042001103820032004102e2002104fc041004a0440200041206a2000280238103b0b200041f0006a24000f0b41ea81084110102d000b41fa81084138102d000b6301027f230041306b22002400101b4101105b2000410041b1830841051055103510364101410010542201200028022810041a200028022c2001107a20002903002001107b20002903082001107b200041106a200110262001101f1a200041306a24000b02000b0b91070200418080080bfd06696e70757420746f6f206c6f6e676e6f6e2d6578697374656e74206b6579546f6b656e206973206e6f742077686974656c6973746564546f6b656e20616c72656164792077686974656c6973746564616464726573736665657061796d656e74206e6f7420636f766572696e672066656573696e76616c69642066656520746f6b652070726f76696465646e6f207061796d656e74207761732070726f7669646564696e76616c6964206465706f7369746f7266656573206e6f7420636f76657265647369676e6174757265666f72776172645f616464726573736465706f73697420657870697265646b657920616c7265616479207573656463616e6e6f74206465706f7369742066756e647320776974686f757420636f766572696e67207468652066656520636f73742066697273747769746864726177616c20686173206e6f74206265656e20617661696c61626c6520796574696e76616c6964206465706f7369746f72206164647265737363616e206f6e6c79206861766520312074797065206f6620746f6b656e20617320666565616d6f756e74206d7573742062652067726561746572207468616e2030646f6e6f7245474c442d303030303030ffffffd80000000000000000ffffffdd696e636f7272656374206e756d626572206f662045534454207472616e736665727366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e747363616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e65676174697665696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67654553445420657870656374656445474c442e6974656d2e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468636f6c6c656374656446656573616c6c54696d65466565546f6b656e7377686974656c6973746564466565546f6b656e736465706f736974456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676500418087080b0438ffffff", + "code": "0061736d01000000016b1360027f7f0060017f017f60027f7f017f60000060017f006000017f60037f7f7f0060047f7f7f7f0060037f7f7f017f60047f7f7f7f017f60027f7e0060057f7f7e7f7f017f60017f017e60027f7e017f6000017e60037f7f7e0060017e017f60027e7f0060027f7f017e02ce072703656e760e626967496e74536574496e743634000a03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000203656e760d676574426c6f636b526f756e64000e03656e761b6d616e616765645472616e7366657256616c756545786563757465000b03656e760d6d616e6167656443616c6c6572000403656e76136d616e616765644f776e657241646472657373000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572417070656e644279746573000803656e76126d616e616765645369676e616c4572726f72000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e76106d4275666665724765744c656e677468000103656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760f6765744e756d417267756d656e7473000503656e7609626967496e74537562000603656e76146d427566666572436f707942797465536c696365000903656e760f6d4275666665725365744279746573000803656e7609626967496e74436d70000203656e7609626967496e744d756c000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000a03656e76136d42756666657253746f7261676553746f7265000203656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e76126d427566666572476574417267756d656e74000203656e760e636865636b4e6f5061796d656e74000303656e7614626967496e7446696e697368556e7369676e6564000403656e76136d42756666657253657442797465536c696365000903656e76146d616e6167656456657269667945643235353139000803656e760d6d42756666657246696e697368000103656e760a626967496e745369676e000103656e76136d42756666657247657442797465536c696365000903656e76096d4275666665724571000203656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000b037574010500000001000101000004000406020101000200050000050001040007000f0101070503050104000002080101050101040601070201050202080706000107090100000002020d100d00010101000000000402020000110006120106020200000007020102010303030303030303030303030305030100030616037f01418080080b7f00419587080b7f0041a087080b07d00110066d656d6f7279020004696e6974008e011177686974656c697374466565546f6b656e008f0111626c61636b6c697374466565546f6b656e00900109636c61696d4665657300910109676574416d6f756e740092010d706179466565416e6446756e640093010466756e640094010b6465706f7369744665657300950108776974686472617700960105636c61696d00970107666f7277617264009801076465706f7369740099010863616c6c4261636b009a010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa639741601017f1028220142001000200120012000100120010b1901017f419087084190870828020041016b220036020020000b110020002802102001102a20002001102b0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104100c1a200241106a24000b4301017f024020002802082202105d450440200220011086010c010b41042001102a200141e285084104100c1a0b20002903002001107e200028020c107220011086010b0f01017f10032201200010041a20010b4a01017f230041106b220224002001102e102f45044041b6800841191030000b2001102e20001031200241046a2200103220002001102c103320001034200020011033200241106a24000b1401017f41d680084103105122012000107520010b0e002000416710191a4167100f450b0900200020011002000b0b00200020011072101b1a0b0f00200041bd8608411410511088010b4301037f20002802082203200110364504402000280204220210820121042000280200200441016a2200107b200110782002200010772003200120021082011083010b0b0f00200041ad8608411010511088010beb0101037f230041f0006b22032400200341346a103202400240200328023c20022802082204103604402004102e10371a027f200110382201102f450440200228020c2102200341406b22052001103920032802682000103a450d0320032802582004103a450d04200328025c2002103b20050c010b103c2104200341086a4200370300200341186a200241086a2903003703002003200436022c2003200036022820034200370300200341003602202003200229030037031020030b210220012002103d200341f0006a24000f0b41f2800841191030000b41d7820841191030000b41f0820841241030000b0c00200020011085014100470b08002000107410730b1501017f41d18608410710512201200010041a20010b880202057f027e230041306b220224002002200110742203100f360214200241003602102002200336020c2002410c6a220341202001106121062003200110602103103c2105034020030440200241186a22042002410c6a200110800120052004106a200341016b21030c010b0b2002410c6a2204200110810121072002410c6a200110810121082004200110602103200241186a200420011080012002200336022820022802142002280210470440200141808008410e1063000b20002002290318370310200041206a200241286a290300370300200041186a200241206a2903003703002000200536022c200020063602282000200837030820002007370300200241306a24000b0b0020002001102541004a0b0a0020002000200110010b08004101410010510b3f01017f4101410010512202200128022810041a200128022c2002107d20012903002002107e20012903082002107e200141106a2002102920002002101b1a0b900101067f230041206b22022400103f2103024020002802082003103a450440200241106a22042000104020022802181041200228021c2105200241086a1042200228020c210620022802082107103c2100102c210320022005102736021c2002420037031020022003360218200020041043200120002007200610440c010b2001200028020c10450b200241206a24000b0a0041d78508410b10510b3002017f017e2001280208102c2102200129030021032000200128020c102736020c20002003370300200020023602080b14002000105d044041ca8508410d1002000b20000b1601017f103c21012000103c360204200020013602000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100c1a200341106a24000b0f002000200142002002200310261a0b2b01017f230041106b22022400200241086a1042200020012002280208200228020c1049200241106a24000b6802017f017e230041306b2203240020032001103822011039200328022c104745044041ea810841101030000b20032000104820032802206a36022020032002370300100521042003200036022c2003200420024206807c37030820012003103d200341306a24000b07002000100f450b09002000100f4104760b0f002000200142002002200310061a0b0c01017f10282200100720000b1d01017f1028220010082000104a103a04400f0b41d8860841241002000b10004108104d450440415910090b41590b2b01027f2000419487082d0000220171200041ff01714622024504404194870820002001723a00000b20020b7301027f230041106b220124004102104d450440415a100a0b0240024002400240415a10480e020102000b41b6830841221002000b103f21024101104d450440415d100b0b2000415d102736020c20004200370300200020023602080c010b2001415a104f2000200110400b200141106a24000bf10102017e027f230041106b22032400200341086a42003703002003420037030020012003105c044020032902042102200328020021012000200328020c220441187420044180fe03714108747220044108764180fe03712004411876727236020c2000200141187420014180fe03714108747220014108764180fe0371200141187672723602082000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe03832002423888848484370300200341106a24000f0b41ad8508411d1002000b3001017f419a840841171051220220002001100c1a200241b184084103100c1a2002419086084110100c1a2002100d000b1101017f102822022000200110141a20020b1900200010532200100f4120470440200120021050000b20000b0d00200010282200101d1a20000b1c00200010532200100f41c00047044041c3810841091050000b20000b0e01017f410010282200101020000b08002000105310570b4901017f230041106b2201240002402000100f4104470d002001410036020c200041002001410c6a410410671a200128020c41c58eb1a204470d00103f21000b200141106a240020000b1400101120004604400f0b41b4840841191002000b1f0020002001200210122000105a41ff017104400f0b41cd840841301002000b140020001023220041004a20004100486b41016a0bb60101037f230041106b22042400024020001047450440200441086a4200370300200442003703000240200010484101470d0020002004105c1a200428020c21052004280200220641187420064180fe03714108747220064108764180fe037120064118767272105d450d002001200541187420054180fe03714108747220054108764180fe0371200541187672722002200310490c020b200120002002200310440c010b2001105e2002200310490b200441106a24000b1f01017f2000100f220241104f0440200041002001411010660b2002410f4b0b1300415841d78508410b10141a41582000103a0b0e01017f102822004200100020000b0e002000200020011060200110610b5101017f230041106b220224002002410036020c20002002410c6a41042001108901200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001106220032802084101710440200328020c2000200120046a360204200341106a24000f0b2002418b8508410f1063000b3701037f2001100f2205200249200220036a20054b724504402001200220031003220610134521040b20002006360204200020043602000b2c01017f41f18508411b10512203200010041a200341b184084103100c1a200320012002100c1a2003100d000b0b00200020014104100c1a0b0d002000105a41ff017141016b0b1a00200020012002200310674504400f0b419a850841131002000b0f00200020012003200210244100470b6601037f230041406a22012400103c210220012000100f360214200141003602102001200036020c200141206a21000340200141186a2001410c6a10692001280218410147450440200141306a22032000104020022003106a0c010b0b200141406b240020020be90102017e027f230041206b220324002003410f6a2001108701200020032d000f047e20032900142102200328001021012000200328001c220441187420044180fe03714108747220044108764180fe0371200441187672723602142000200141187420014180fe03714108747220014108764180fe0371200141187672723602102000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe0383200242388884848437030842010542000b370300200341206a24000b2301017f230041106b2202240020012002106b200020024110100c1a200241106a24000bb90102017f017e20012000280208220241187420024180fe03714108747220024108764180fe0371200241187672723600002001200028020c220241187420024180fe03714108747220024108764180fe03712002411876727236000c20012000290300220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843700040b1300200020011015220041004a20004100486b0b130041752001ad1000200020004175101620000b0e00200020002001106f101620000b0a0041752000100041750b1601027f2001106f21021028220320002002101620030b0a0020002000200110590b0f01017f10282201200010171a20010b0d0020001028220010181a20000b0d0020001028220010191a20000b08002001200010760b6901027f230041106b2202240002402000105d45044020022000100f220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a10642001200010041a0c010b41042001107c200141e2850810640b200241106a24000b100041672001ad101a20004167101b1a0b190020002001105d047f41e28508410410510520010b101b1a0b1200416c4101410010141a2000416c101b1a0b0c0020002001107b107410570b19002000102c220041e685084105100c1a20012000107c20000b4301017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a1064200241106a24000b5d01017f230041306b22022400200010482001102a20022000100f360214200241003602102002200036020c200241206a21000340200241186a2002410c6a1069200228021841014745044020002001102b0c010b0b200241306a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100c1a200241106a24000b0c00200020011039200110790b3402017f017e20012002105f10572103200120021081012104200020012002105f107336020c20002003360208200020043703000b850102017e017f230041106b22032400200342003703082000200341086a4108200110890120032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b4002017f017e0240200010742201100f41094904402001101c22024280808080105a0d012002a70f0b200041fd8408410e1063000b200041808008410e1063000b0d0020002001108401200210770b19002000102c220041eb85084106100c1a20012000107620000b0c00200020011084011082010b5101027f230041106b2202240020022000100f220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100c1a2001200010041a200241106a24000b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010671a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b2e01027f2001102c21022001102c2203418c86084104100c1a2000200336020420002001360200200020023602080b3901017f2000280208200028020422046b20024904402003418b8508410f1063000b200028020020042001200210662000200220046a3602040b0c0020002001106cc041004a0b0a0020001065c041004a0b0c0020002001106cc041004c0b1401017f41a08608410d105122012000107520010b1000101e41021058105541011056102d0b1200101e104b41021058105541011056102d0bec0101087f230041106b22012400101e104b41011058024002400240410010562204102e102f4504402004102e1079200141046a1032200128020c220520041085012202450d02024020012802082203108201220020024f044020002002460d0320031082012000490d05200128020422072000107a210620031082012002490d0120072002107b200610780c030b0c040b0c030b419e800841181030000b200310820120004904400c020b20012802042000107b10792003200041016b1077200020024704402005200620021083010b2005200410840110790b200141106a24000f0b41fc860841121002000bce0101097f230041306b22002400101e104b41001058200041146a103420002802181082012106104a2105103c21032000280214210741012101034002400240200120064d044020072001107a2202108d01220810372104200810792004106541ff0171450d022002103f103a0d012002104121022000200436022c20004200370320200020023602282003200041206a10430c020b2003100f0440200041086a1042200520032000280208200028020c10440b200041306a24000f0b2005200410450b200141016a21010c000b000bc60202047f027e230041d0006b22002400101e41031058410041cf80084107105221014101105621034102100e2105027f0240200110382201102f4504402000200110392000200028022c2201100f360238200041003602342000200136023003402000413f6a200041306a10870120002d003f4101470d0220002900442104200028004c21012000280040220241187420024180fe03714108747220024108764180fe0371200241187672722003103a45200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484200552720d000b200141187420014180fe03714108747220014108764180fe0371200141187672720c020b418e800841101030000b105e0b101f200041d0006a24000b8f0302067f027e230041d0006b2200240041021058410041cf80084107105221054101100e21060240024002400240104c106822041047450440200041406b22012004104f200041106a200110402000280218102e210220012004104f200041206a200110402002102f0d01200210372101200410482103200110272003106d210220011027200341016b106d2103200028022c220120031015044020012002108a01450d030b024020012003108a01450440200410482202450d05103c2101200041086a20044110200241047441106b10622000280208410171450d062001200028020c10041a2000200336021c0c010b2000200236021c200028022821032000290320210720012001200210592000200136023c2000200737033020002003360238200041306a200041406b2201106b200441004110200110201a200421010b104a2005200041106a10352001200520061046200041d0006a24000f0b418b810841171030000b41f2800841191030000b41d9800841191030000b41ad8508411d1002000b41ad8508411d1002000bae0102067f017e230041306b2200240041021058410041cf80084107105221014101100e210602400240024020011038102f450440200020011038103920002802282102104a2002103a450d01200028021c21022000280218102e1037104c1068220410482205450d022005ad106e2002108c01450d032004200120061046200041306a24000f0b41b3810841101030000b41a2810841111030000b41948308411d1030000b41fa810841381030000b7501027f230041106b2200240002400240024002400240104c220110480e020102000b41fd8308411d1002000b415d420010000c010b20002001104f2000280208105d450d010b41011058410041cf80084107105221012000104e104a200120001035200041106a24000f0b41d8830841251002000bac0101037f230041d0006b22002400101e410110580240410041cf80084107105210382201102f450440200041106a2001107f200028022c21012000280228210210052000290318580d01200020023602482000200136024c20004200370340200028023c2201200041406b106a20011047450440200041086a1042200120002802382000280208200028020c105b0b200041d0006a24000f0b418e800841101030000b41b2820841251030000be80102077f017e230041406a22002400101e41021058410041cf80084107105221014101105421030240200110382202102f4504402001104a2206200310211a10052107200041106a2002107f200028023c220110482102200028022c21032000280228102c2204102e1037210520002903182007540d01200320052002ad106e220210712004108d012204103722052002103b20042005103120011047450440200041086a1042200120062000280208200028020c105b0b2003108b010440200041206a2000280238103e0b200041406b24000f0b418e800841101030000b41db8108410f1030000bb20202077f037e230041f0006b2200240041031058410041cf8008410710522101410141cc8108410f105221024102105421052000104e104a21032000280208102c210420012003200510211a20032002200010352002103821022004102e10372103200041106a20011038107f200028023c220510482101200041406b2206200210390240200028026c1047044020032001ad22071070200028025c108c01450d012000200029031022083703402000200028026020016a360260100521092000200536026c2000200920084206807c37034820022006103d2003200710702101200028022c2202200110712004108d012203103722042001103b2003200410312002108b010440200041206a2000280238103e0b200041f0006a24000f0b41ea810841101030000b41fa810841381030000b6301027f230041306b22002400101e410110582000410041b1830841051052103810394101410010512201200028022810041a200028022c2001107d20002903002001107e20002903082001107e200041106a20011029200110221a200041306a24000b02000b0ba2070200418080080b8e07696e70757420746f6f206c6f6e676e6f6e2d6578697374656e74206b6579546f6b656e206973206e6f742077686974656c6973746564546f6b656e20616c72656164792077686974656c6973746564616464726573736665657061796d656e74206e6f7420636f766572696e672066656573696e76616c69642066656520746f6b652070726f76696465646e6f207061796d656e74207761732070726f7669646564696e76616c6964206465706f7369746f7266656573206e6f7420636f76657265647369676e6174757265666f72776172645f616464726573736465706f73697420657870697265646b657920616c7265616479207573656463616e6e6f74206465706f7369742066756e647320776974686f757420636f766572696e67207468652066656520636f73742066697273747769746864726177616c20686173206e6f74206265656e20617661696c61626c6520796574696e76616c6964206465706f7369746f72206164647265737363616e206f6e6c79206861766520312074797065206f6620746f6b656e20617320666565616d6f756e74206d7573742062652067726561746572207468616e2030646f6e6f72696e636f7272656374206e756d626572206f662045534454207472616e736665727366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e747363616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e6567617469766576616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e67654553445420657870656374656445474c442d30303030303045474c442e6974656d2e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468636f6c6c656374656446656573616c6c54696d65466565546f6b656e7377686974656c6973746564466565546f6b656e736465706f736974456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676500419087080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -285,6 +285,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -294,7 +295,9 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedCaller", + "managedGetAllTransfersCallValue", "managedGetMultiESDTCallValue", "managedMultiTransferESDTNFTExecute", "managedOwnerAddress", @@ -306,12 +309,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/digital-cash.wasm", - "size": 9663, + "size": 9726, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/digital-cash/scenarios/claim-egld.scen.json b/test/digital-cash/scenarios/claim-egld.scen.json index d249d2121..961ee4958 100644 --- a/test/digital-cash/scenarios/claim-egld.scen.json +++ b/test/digital-cash/scenarios/claim-egld.scen.json @@ -32,7 +32,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "1555", "blockRound": "1555", "blockEpoch": "1" @@ -65,7 +65,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "8", "blockRound": "8", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/claim-esdt.scen.json b/test/digital-cash/scenarios/claim-esdt.scen.json index 907b39d94..be3dfece9 100644 --- a/test/digital-cash/scenarios/claim-esdt.scen.json +++ b/test/digital-cash/scenarios/claim-esdt.scen.json @@ -32,7 +32,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "1555", "blockRound": "1555", "blockEpoch": "1" @@ -65,7 +65,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "9", "blockRound": "9", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/claim-fees.scen.json b/test/digital-cash/scenarios/claim-fees.scen.json index 6290d6903..ce690f2ae 100644 --- a/test/digital-cash/scenarios/claim-fees.scen.json +++ b/test/digital-cash/scenarios/claim-fees.scen.json @@ -29,7 +29,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "1555", "blockRound": "1555", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/claim-multi-esdt.scen.json b/test/digital-cash/scenarios/claim-multi-esdt.scen.json index 04294eeee..296d5de04 100644 --- a/test/digital-cash/scenarios/claim-multi-esdt.scen.json +++ b/test/digital-cash/scenarios/claim-multi-esdt.scen.json @@ -32,7 +32,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "1555", "blockRound": "1555", "blockEpoch": "1" @@ -65,7 +65,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "9", "blockRound": "9", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/withdraw-egld.scen.json b/test/digital-cash/scenarios/withdraw-egld.scen.json index 66a152014..80678fe11 100644 --- a/test/digital-cash/scenarios/withdraw-egld.scen.json +++ b/test/digital-cash/scenarios/withdraw-egld.scen.json @@ -148,7 +148,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "300", "blockRound": "300", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/withdraw-esdt.scen.json b/test/digital-cash/scenarios/withdraw-esdt.scen.json index 466b740e2..dc3bdfb80 100644 --- a/test/digital-cash/scenarios/withdraw-esdt.scen.json +++ b/test/digital-cash/scenarios/withdraw-esdt.scen.json @@ -148,7 +148,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "300", "blockRound": "300", "blockEpoch": "1" diff --git a/test/digital-cash/scenarios/withdraw-multi-esdt.scen.json b/test/digital-cash/scenarios/withdraw-multi-esdt.scen.json index 555b90e51..649d6881e 100644 --- a/test/digital-cash/scenarios/withdraw-multi-esdt.scen.json +++ b/test/digital-cash/scenarios/withdraw-multi-esdt.scen.json @@ -148,7 +148,7 @@ "step": "setState", "comment": "set block", "currentBlockInfo": { - "blockTimestamp": "511", + "blockTimestampMs": "511", "blockNonce": "300", "blockRound": "300", "blockEpoch": "1" diff --git a/test/erc20-rust/output/erc20.mxsc.json b/test/erc20-rust/output/erc20.mxsc.json index cff1567b3..b650127d5 100644 --- a/test/erc20-rust/output/erc20.mxsc.json +++ b/test/erc20-rust/output/erc20.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "erc20", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -246,7 +246,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/factorial/output/factorial.mxsc.json b/test/factorial/output/factorial.mxsc.json index 86df28559..19bbbaab5 100644 --- a/test/factorial/output/factorial.mxsc.json +++ b/test/factorial/output/factorial.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "factorial", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -63,7 +63,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/features/alloc-features/output/alloc-features.mxsc.json b/test/features/alloc-features/output/alloc-features.mxsc.json index 3071c9eea..e361e596b 100644 --- a/test/features/alloc-features/output/alloc-features.mxsc.json +++ b/test/features/alloc-features/output/alloc-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "alloc-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -1099,7 +1099,7 @@ } } }, - "code": "0061736d010000000189011560000060027f7f0060027f7f017f60017f0060037f7f7f0060037f7f7f017f60017f017f60047f7f7f7f017f6000017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000303656e76126d427566666572476574417267756d656e74000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000203656e760f6765744e756d417267756d656e7473000803656e7614626967496e7446696e697368556e7369676e6564000303656e760666696e697368000103656e760a6d4275666665724e6577000803656e76146d427566666572436f707942797465536c696365000703656e76106d4275666665724765744c656e677468000603656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000203656e76136d42756666657247657442797465536c696365000703656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d427566666572417070656e64000203656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000703656e76136d61727368616c436f6d707265737365644543000703656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000703656e760d6d616e6167656443616c6c6572000303656e76136d616e616765644f776e657241646472657373000303656e76096d4275666665724571000203656e76136d42756666657253657442797465536c696365000703656e760f6d42756666657247657442797465730002039701950101040104010d090505010903080101130302060101010201060108010106050903020101040301080501020303050905010404040103030000010303010107080404090102040102030401011401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000040000090405010205030100020616037f01418080020b7f0041c886060b7f0041d086060b07dc0a43066d656d6f7279020004696e6974007d096563686f5f68323536007e136563686f5f626f7865645f61727261795f7538007f106563686f5f626f7865645f62797465730080010d6563686f5f736c6963655f75380081010b6563686f5f7665635f75380082010b6563686f5f737472696e67008301086563686f5f737472008401176563686f5f6173796e635f726573756c745f656d7074790085011b6563686f5f6c617267655f626f7865645f627974655f6172726179008601186563686f5f626f7865645f7365725f6578616d706c655f31008701176563686f5f6d756c74695f76616c75655f7475706c6573008801126563686f5f7365725f6578616d706c655f310089011a6563686f5f7665635f6f665f6d616e616765645f627566666572008a01106563686f5f6269675f696e745f766563008b010f6563686f5f7661726167735f753332008c01146563686f5f7661726167735f6269675f75696e74008d0112636f6d707574655f6765745f76616c756573008e0111636f6d707574655f6372656174655f6563008f0115636f6d707574655f6765745f65635f6c656e67746800900120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680091010e636f6d707574655f65635f61646400920111636f6d707574655f65635f646f75626c6500930116636f6d707574655f69735f6f6e5f63757276655f656300940113636f6d707574655f7363616c61725f6d756c7400950118636f6d707574655f7363616c61725f626173655f6d756c7400960112636f6d707574655f6d61727368616c5f65630097011d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300980114636f6d707574655f756e6d61727368616c5f65630099011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563009a0117636f6d707574655f67656e65726174655f6b65795f6563009b01116f6e6c795f6f776e65725f6c6567616379009c010f72657475726e5f73635f6572726f72009d0115726573756c745f6572725f66726f6d5f6279746573009e0116726573756c745f6572725f66726f6d5f737472696e67009f0113726573756c745f6572725f66726f6d5f73747200a0010b726573756c745f6563686f00a1010d726573756c745f6563686f5f3200a2010d726573756c745f6563686f5f3300a301126d6275666665725f66726f6d5f736c69636500a401186d6275666665725f66726f6d5f626f7865645f627974657300a501116d6275666665725f6f766572777269746500a601146d6275666665725f617070656e645f627974657300a701126d6275666665725f6c6f61645f736c69636500a801116d6275666665725f7365745f736c69636500a901146d616e616765645f616464726573735f66726f6d00aa010b6c6f61645f7665635f753800ab01096c6f61645f6164647200ac010d6c6f61645f6f70745f6164647200ad011169735f656d7074795f6f70745f6164647200ae010a6c6f61645f7365725f3100af010c73746f72655f7665635f753800b0010a73746f72655f6164647200b1010e73746f72655f6f70745f6164647200b2010b73746f72655f7365725f3100b3010c636f6d706172655f6832353600b4010c683235365f69735f7a65726f00b50111626f7865645f62797465735f7a65726f7300b60114626f7865645f62797465735f636f6e6361745f3200b70111626f7865645f62797465735f73706c697400b901107665635f636f6e6361745f636f6e737400ba010863616c6c4261636b00bc010c6563686f5f7374725f626f7800840109726573756c745f6f6b007d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040aad990195010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808002410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3001017f20002802002000280204220520012002106c04402003200441e48002410f1038000b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361074200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011074200241086a2003106220002002290308370300200241206a24000b2e01017f418e80024117103f22042000200110011a200441a58002410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104822022000200110151a20020b0d0020001048220010041a20000b190020002001100f36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100f22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b4401017f41a086062001200041a08606280200220220007022006b410020001b20026a22006a360200200041ffff034d0440200041a086026a0f0b41e7850241171000000b0a0020002001104610410b0d0020001048220010171a20000b1301017f10482202200010051a2002200110490b1901017f418086024180860228020041016b220036020020000b5101027f230041106b2202240020022000100f220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010482200100620000b2f01017f2000280200220341c486062802004e04402001200241a8800241111038000b2000200341016a36020020030b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351071200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341e7820241121038000b2002200341808002410e1038000b4301017f230041106b22012400200141086a20002000280200410141044104107a200128020822004181808080784704402000200128020c107b000b200141106a24000b1000200020014101104c2001410110560b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1073200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a20002000280200410141044110107a200228020822044181808080784704402004200228020c107b000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000b0c002000410020012002104d0be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41a081024103103541ff01710e020201000b41a08102410341f98202410d1038000b200141106a2202200141046a41a08102410310342001411c6a20021054200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41a0810241034186830241121038000b41a08102410341808002410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541b983026a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b0c00410041d58202410d10560b2501017e20001008220342ffffffff0f5804402003a70f0b2001200241808002410e1038000b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b100041c086062d00001a2001200010440b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b08002000410010500b2401017e2000100822034280808080105a04402001200241808002410e1038000b2003a70b0c002000200120022003104d0b4201037f2000200120021036210320002802042104100d21052000280200200420032005100e04402001200241e48002410f1038000b2000200320046a36020420050b0a00200020014101105f0b5901017f230041206b220324002003410010502003410c6a20031054200328020c418080808078470440200120024186830241121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b0a0020002001200210310b3401027f230041206b22032400200341146a220420012002105f200341086a2004106220002003290308370300200341206a24000b5901037f20012802082202200128020049044002402002450440410121030c010b2001280204210441012002104422032004200210c0011a0b20012002360200200120033602040b20002002360204200020012802043602000b190041c4860628020020004c04400f0b41b9800241121000000b1400100a20004604400f0b41cb800241191000000b190041c4860628020041004e04400f0b41a8800241111000000b0b0041c48606100a3602000b0a002000100b2001100b0b4301017f103a2101200028020020011047200028020420011047200028020820011047200028020c20011047200028021020011047200028021420011030200110021a0b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100c0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38002200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780020c020b41fb80020c010b41ff80020b41041013210241010b210120002002360204200020013602000b0f00200020012003200210144100470b0e01017f104822004200101620000b0d00200020012002103f10181a0b2c01017f41838102411b103f2203200010191a200341a58002410310011a20032001200210011a20031003000b2e01017f20002802002000280204220420012002106c0440200341e48002410f106f000b2000200220046a3602040b2801017f2000280200220241204f0440107c000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a410420011070200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5801037f230041106b22022400200241046a2001410110bb0120022802082103200228020441014604402003200228020c107b000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001107020022d000f200241106a24000b0a0020004104411010770b3b01017f230041106b2103027f20004504402003410c6a210141000c010b2003200136020c200341086a2101200020026c0b2100200120003602000b0a0020004101410110770b140020004180808080784704402000200110780b0bb60202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c210520012802042108200641186a0b20053602000240200628021c044020062802182202450440200641106a20042003410010be01200628021021050c020b20042003104422052008200210c0011a0c010b200641086a2004200310bf01200628020821050b200421022005450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0e002000044010bd01000b107c000b060010bd01000b0800101a410010640b2c01017f230041206b22002400101a4101106420004100419f81024101105c20004120100c200041206a24000b4801027f101a41011064230041106b22002400200041086a41001042200028020c418001470440419e8102410141e7820241121038000b2000280208200041106a2400418001100c0b3401027f230041106b22002400101a41011064200041086a10592000280208200028020c2201100c2001ad101b200041106a24000b3601027f230041106b22002400101a41011064200041086a410010572000280208200028020c2201100c2001ad101b200041106a24000b3c01047f230041106b22002400101a410110642000105a20002802002000280204220220002802082203100c2003ad101b20021078200041106a24000b4001047f230041106b22002400101a410110642000419e8102105e20002802002000280204220220002802082203100c2003ad101b20021078200041106a24000b3a01027f230041106b22002400101a41011064200041086a419e8102410110612000280208200028020c2201100c2001ad101b200041106a24000bac0101067f230041106b22002400101a1066106520004100360200200041046a2102230041106b22012400027f4100200041a58102104f2204450d001a4101200028020041c486062802004e0d001a200141086a200041a581024101104c1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a24002000280200106320002802042201044020012000280208104a000b200041106a24000ba32a0291017f017e101a41011064230041b0066b22002400200041001032200041b0026a21024104210103402001418404470440200041ac026a20016a200041a78102410410353a0000200141016a21010c010b0b20004180043602ac0220002802a406210320002902a806219101200028009d0621042000280196062105200028008f0621062000280288062107200028008106210820002801fa05210920002800f305210a20002802ec05210b20002800e505210c20002801de05210d20002800d705210e20002802d005210f20002800c905211020002801c205211120002800bb05211220002802b405211320002800ad05211420002801a6052115200028009f05211620002802980521172000280091052118200028018a052119200028008305211a20002802fc04211b20002800f504211c20002801ee04211d20002800e704211e20002802e004211f20002800d904212020002801d204212120002800cb04212220002802c404212320002800bd04212420002801b604212520002800af04212620002802a804212720002800a1042128200028019a042129200028009304212a200028028c04212b200028008504212c20002801fe03212d20002800f703212e20002802f003212f20002800e903213020002801e203213120002800db03213220002802d403213320002800cd03213420002801c603213520002800bf03213620002802b803213720002800b103213820002801aa03213920002800a303213a200028029c03213b200028009503213c200028018e03213d200028008703213e200028028003213f20002800f902214020002801f202214120002800eb02214220002802e402214320002800dd02214420002801d602214520002800cf02214620002802c802214720002800c102214820002801ba02214920002800b302214a200041aa026a224b200241026a2d00003a0000200041a2026a224c200041c0026a2d00003a00002000419e026a224d200041c7026a2d00003a00002000419a026a224e200041ce026a2d00003a0000200020022f00003b01a802200020002f00b7023b01a4022000200041b9026a2d00003a00a602200020002f01be023b01a002200020002f00c5023b019c02200020002f01cc023b01980220004196026a2202200041d5026a2d00003a000020004192026a224f200041dc026a2d00003a00002000418e026a2250200041e3026a2d00003a00002000418a026a2251200041ea026a2d00003a000020004186026a2252200041f1026a2d00003a0000200020002f00d3023b019402200020002f01da023b019002200020002f00e1023b018c02200020002f01e8023b018802200020002f00ef023b01840220004182026a2253200041f8026a2d00003a0000200041fe016a2254200041ff026a2d00003a0000200041fa016a225520004186036a2d00003a0000200041f6016a22562000418d036a2d00003a0000200041f2016a225720004194036a2d00003a0000200020002f01f6023b018002200020002f00fd023b01fc01200020002f0184033b01f801200020002f008b033b01f401200020002f0192033b01f001200041ee016a22582000419b036a2d00003a0000200020002f0099033b01ec01200041ea016a2259200041a2036a2d00003a0000200020002f01a0033b01e801200041e6016a225a200041a9036a2d00003a0000200020002f00a7033b01e401200041e2016a225b200041b0036a2d00003a0000200020002f01ae033b01e001200041de016a225c200041b7036a2d00003a0000200020002f00b5033b01dc01200041da016a225d200041be036a2d00003a0000200020002f01bc033b01d801200041d6016a225e200041c5036a2d00003a0000200020002f00c3033b01d401200041d2016a225f200041cc036a2d00003a0000200020002f01ca033b01d001200041ce016a2260200041d3036a2d00003a0000200020002f00d1033b01cc01200041ca016a2261200041da036a2d00003a0000200020002f01d8033b01c801200041c6016a2262200041e1036a2d00003a0000200020002f00df033b01c401200041c2016a2263200041e8036a2d00003a0000200020002f01e6033b01c001200041be016a2264200041ef036a2d00003a0000200020002f00ed033b01bc01200041ba016a2265200041f6036a2d00003a0000200020002f01f4033b01b801200041b6016a2266200041fd036a2d00003a0000200020002f00fb033b01b401200041b2016a226720004184046a2d00003a0000200020002f0182043b01b001200041ae016a22682000418b046a2d00003a0000200020002f0089043b01ac01200041aa016a226920004192046a2d00003a0000200020002f0190043b01a801200041a6016a226a20004199046a2d00003a0000200020002f0097043b01a401200041a2016a226b200041a0046a2d00003a0000200020002f019e043b01a0012000419e016a226c200041a7046a2d00003a0000200020002f00a5043b019c012000419a016a226d200041ae046a2d00003a0000200020002f01ac043b01980120004196016a226e200041b5046a2d00003a0000200020002f00b3043b01940120004192016a226f200041bc046a2d00003a0000200020002f01ba043b0190012000418e016a2270200041c3046a2d00003a0000200020002f00c1043b018c012000418a016a2271200041ca046a2d00003a0000200020002f01c8043b01880120004186016a2272200041d1046a2d00003a0000200020002f00cf043b01840120004182016a2273200041d8046a2d00003a0000200020002f01d6043b018001200041fe006a2274200041df046a2d00003a0000200020002f00dd043b017c200041fa006a2275200041e6046a2d00003a0000200020002f01e4043b0178200041f6006a2276200041ed046a2d00003a0000200020002f00eb043b0174200041f2006a2277200041f4046a2d00003a0000200020002f01f2043b0170200041ee006a2278200041fb046a2d00003a0000200020002f00f9043b016c200041ea006a227920004182056a2d00003a0000200020002f0180053b0168200041e6006a227a20004189056a2d00003a0000200020002f0087053b0164200041e2006a227b20004190056a2d00003a0000200020002f018e053b0160200041de006a227c20004197056a2d00003a0000200020002f0095053b015c200041da006a227d2000419e056a2d00003a0000200020002f019c053b0158200041d6006a227e200041a5056a2d00003a0000200020002f00a3053b0154200041d2006a227f200041ac056a2d00003a0000200020002f01aa053b0150200041ce006a228001200041b3056a2d00003a0000200020002f00b1053b014c200041ca006a228101200041ba056a2d00003a0000200020002f01b8053b0148200041c6006a228201200041c1056a2d00003a0000200020002f00bf053b0144200041c2006a228301200041c8056a2d00003a0000200020002f01c6053b01402000413e6a228401200041cf056a2d00003a0000200020002f00cd053b013c2000413a6a228501200041d6056a2d00003a0000200020002f01d4053b0138200041366a228601200041dd056a2d00003a0000200020002f00db053b0134200041326a228701200041e4056a2d00003a0000200020002f01e2053b01302000412e6a228801200041eb056a2d00003a0000200020002f00e9053b012c2000412a6a228901200041f2056a2d00003a0000200020002f01f0053b0128200041266a228a01200041f9056a2d00003a0000200020002f00f7053b0124200041226a228b0120004180066a2d00003a0000200020002f01fe053b01202000411e6a228c0120004187066a2d00003a0000200020002f0085063b011c2000411a6a228d012000418e066a2d00003a0000200020002f018c063b0118200041166a228e0120004195066a2d00003a0000200020002f0093063b0114200041126a228f012000419c066a2d00003a0000200020002f019a063b01102000410e6a229001200041a3066a2d00003a0000200020002f00a1063b010c418004410110582201204a3600032001204936000a20012048360011200141026a204b2d00003a0000200120002f01a8023b0000200120002f01a4023b0007200141096a20002d00a6023a0000200120002f01a0023b000e200141106a204c2d00003a0000200120002f019c023b0015200141176a204d2d00003a0000200120473600182001204636001f200120453600262001204436002d2001411e6a204e2d00003a0000200120002f0198023b001c200141256a20022d00003a0000200120002f0194023b00232001412c6a204f2d00003a0000200120002f0190023b002a200141336a20502d00003a0000200120002f018c023b0031200120433600342001204236003b20012041360042200120403600492001413a6a20512d00003a0000200120002f0188023b0038200141c1006a20522d00003a0000200120002f0184023b003f200141c8006a20532d00003a0000200120002f0180023b0046200141cf006a20542d00003a0000200120002f01fc013b004d2001203f3600502001203e3600572001203d36005e2001203c360065200141d6006a20552d00003a0000200120002f01f8013b0054200141dd006a20562d00003a0000200120002f01f4013b005b200141e4006a20572d00003a0000200120002f01f0013b0062200141eb006a20582d00003a0000200120002f01ec013b00692001203b36006c2001203a3600732001203936007a2001203836008101200141f2006a20592d00003a0000200120002f01e8013b0070200141f9006a205a2d00003a0000200120002f01e4013b007720014180016a205b2d00003a0000200120002f01e0013b007e20014187016a205c2d00003a0000200120002f01dc013b00850120012037360088012001203636008f0120012035360096012001203436009d012001418e016a205d2d00003a0000200120002f01d8013b008c0120014195016a205e2d00003a0000200120002f01d4013b0093012001419c016a205f2d00003a0000200120002f01d0013b009a01200141a3016a20602d00003a0000200120002f01cc013b00a101200120333600a401200120323600ab01200120313600b201200120303600b901200141aa016a20612d00003a0000200120002f01c8013b00a801200141b1016a20622d00003a0000200120002f01c4013b00af01200141b8016a20632d00003a0000200120002f01c0013b00b601200141bf016a20642d00003a0000200120002f01bc013b00bd012001202f3600c0012001202e3600c7012001202d3600ce012001202c3600d501200141c6016a20652d00003a0000200120002f01b8013b00c401200141cd016a20662d00003a0000200120002f01b4013b00cb01200141d4016a20672d00003a0000200120002f01b0013b00d201200141db016a20682d00003a0000200120002f01ac013b00d9012001202b3600dc012001202a3600e301200120293600ea01200120283600f101200141e2016a20692d00003a0000200120002f01a8013b00e001200141e9016a206a2d00003a0000200120002f01a4013b00e701200141f0016a206b2d00003a0000200120002f01a0013b00ee01200141f7016a206c2d00003a0000200120002f019c013b00f501200120273600f801200120263600ff0120012025360086022001202436008d02200141fe016a206d2d00003a0000200120002f0198013b00fc0120014185026a206e2d00003a0000200120002f0194013b0083022001418c026a206f2d00003a0000200120002f0190013b008a0220014193026a20702d00003a0000200120002f018c013b00910220012023360094022001202236009b02200120213600a202200120203600a9022001419a026a20712d00003a0000200120002f0188013b009802200141a1026a20722d00003a0000200120002f0184013b009f02200141a8026a20732d00003a0000200120002f0180013b00a602200141af026a20742d00003a0000200120002f017c3b00ad022001201f3600b0022001201e3600b7022001201d3600be022001201c3600c502200141b6026a20752d00003a0000200120002f01783b00b402200141bd026a20762d00003a0000200120002f01743b00bb02200141c4026a20772d00003a0000200120002f01703b00c202200141cb026a20782d00003a0000200120002f016c3b00c9022001201b3600cc022001201a3600d302200120193600da02200120183600e102200141d2026a20792d00003a0000200120002f01683b00d002200141d9026a207a2d00003a0000200120002f01643b00d702200141e0026a207b2d00003a0000200120002f01603b00de02200141e7026a207c2d00003a0000200120002f015c3b00e502200120173600e802200120163600ef02200120153600f602200120143600fd02200141ee026a207d2d00003a0000200120002f01583b00ec02200141f5026a207e2d00003a0000200120002f01543b00f302200141fc026a207f2d00003a0000200120002f01503b00fa0220014183036a2080012d00003a0000200120002f014c3b00810320012013360084032001201236008b03200120113600920320012010360099032001418a036a2081012d00003a0000200120002f01483b00880320014191036a2082012d00003a0000200120002f01443b008f0320014198036a2083012d00003a0000200120002f01403b0096032001419f036a2084012d00003a0000200120002f013c3b009d032001200f3600a0032001200e3600a7032001200d3600ae032001200c3600b503200141a6036a2085012d00003a0000200120002f01383b00a403200141ad036a2086012d00003a0000200120002f01343b00ab03200141b4036a2087012d00003a0000200120002f01303b00b203200141bb036a2088012d00003a0000200120002f012c3b00b9032001200b3600bc032001200a3600c303200120093600ca03200120083600d103200141c2036a2089012d00003a0000200120002f01283b00c003200141c9036a208a012d00003a0000200120002f01243b00c703200141d0036a208b012d00003a0000200120002f01203b00ce03200141d7036a208c012d00003a0000200120002f011c3b00d503200120073600d803200120063600df03200120053600e603200120043600ed03200141de036a208d012d00003a0000200120002f01183b00dc03200141e5036a208e012d00003a0000200120002f01143b00e303200141ec036a208f012d00003a0000200120002f01103b00ea03200141f3036a2090012d00003a0000200120002f010c3b00f10320012091013700f803200120033600f4032000280208200028020447044041a78102410441808002410e1038000b200041b0066a2400103a2200200141800410011a200010021a0b4901027f101a41011064230041306b22002400200041086a220141a38102410210314128410810582001412810c001200041306a2400220010392000280210200041146a28020010780bcf0402097f017e230041206b22022400101a1066106520024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a2104024002400340200528020041c48606280200480440200541a681024101104c100722094280808080087d42ffffffff6f580d022004200541a681024101104c1050200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a10510c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41a6810241014198830241121038000b20022802041063200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a1051200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001078200341016b2103200041106a21000c010b0b1076200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100c200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001078200341016b2103200041106a21000c010b0b20051076200241206a24000b0b0b3901027f230041306b22002400101a41011064200041086a220141a3810241021060200110392000280218200028021c1078200041306a24000b880201087f230041106b22012400101a41011064200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ac81024102105d210720002802082003460440200041086a104e200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001049200441046a21040c010b0b200010021a2001280204410441041077200141106a24000b960201087f230041106b22012400101a41011064200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ab81024101105d1048220710091a20002802082003460440200041086a104e200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010482204200320056a280200101d1a200420001049200541046a21050c010b0b200010021a2001280204410441041077200141106a24000b890201087f230041206b22022400101a106610652002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c200528020041c48606280200480440200541a68102104f210720002802042001460440200041046a104e200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106320022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041077200241206a24000bfe0101087f230041106b22002400101a106610652000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c200728020041c48606280200480440200741a681024101104c104b210520012802042002460440200141046a104e200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10632000280208410274210320002802042105034020032006470440200520066a280200100b200641046a21060c010b0b2000280200410441041077200041106a24000b810101067f230041206b22002400101a4101106420001055106b024020002802004101710440200041086a2000280204106a0c010b106d2101106d2102106d2103106d2104106d21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b3d01027f230041206b22002400101a41011064200041e2820241051061200041086a2201200028020020002802041013106a20011068200041206a24000b3d01027f230041106b22002400101a41011064200041086a10552201106b2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011064200041086a1055106b2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051064105521014101104b21034102104b21044103104b21054104104b2106200041086a2001106b024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106d2101106d21020b200120021067200041106a24000b6c01067f230041106b22002400101a41031064105521014101104b21034102104b2104200041086a2001106b024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106d2101106d21020b200120021067200041106a24000b5201047f230041106b22002400101a41031064105521014101104b21024102104b2103200041086a2001106b2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b850101087f230041106b22002400101a41041064105521014101104b21034102104b2104200041086a41031057200028020c21052000280208210620002001106b024020002802004101710440200028020421074200101022014200101022022007200320042006200510221a0c010b106d2101106d21020b200120021067200041106a24000b7501067f230041106b22002400101a4102106410552101200041086a41011057200028020c21032000280208210420002001106b0240200028020041017104402000280204210542001010220142001010220220052004200310231a0c010b106d2101106d21020b200120021067200041106a24000b930101057f230041206b22002400101a41031064105521014101104b21024102104b2103200041186a2001106b024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b900101057f230041206b22002400101a41031064105521014101104b21024102104b2103200041186a2001106b024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b7501067f230041106b22002400101a4102106410552101200041086a41011057200028020c21032000280208210420002001106b0240200028020041017104402000280204210542001010220142001010220220052004200310261a0c010b106d2101106d21020b200120021067200041106a24000b7501067f230041106b22002400101a4102106410552101200041086a41011057200028020c21032000280208210420002001106b0240200028020041017104402000280204210542001010220142001010220220052004200310271a0c010b106d2101106d21020b200120021067200041106a24000b950101057f230041206b22002400101a41011064200041186a1055106b024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106d2102106d2103200041106a4100103720002802142104200028021021010b2002100b2003100b20012004100c200041206a24000b3201027f101a4100106410482200102910482201102a41fd8102410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106441ee8102410f102e000b2901017f230041106b22002400101a41011064200041086a10592000280208200028020c103f103e000b3801037f230041106b22002400101a41011064200041046a41c08102105e20002802082201200028020c103f200028020420011078103e000b2f01017f230041106b22002400101a41011064200041086a41c08102410110612000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021064200041046a1053027f0240410110082204420158044041002004a741016b0d021a0c010b41bc810241044198830241121038000b41010b45044041c181024116104a000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041d78102200320011b2201360208200041046a1069200220011079200041106a24000b6801057f230041106b22002400101a41011064200041046a220310532000280208210120004117200028020c200028020422024180808080784622041b36020c200041d78102200120041b22013602082000200236020420031069200220011079200041106a24000b4f01037f230041106b22002400101a41011064200041046a10532000280204220141808080807846044041d781024117102e000b20002802082202200028020c100c200120021078200041106a24000b3201017f230041106b22002400101a41011064200041086a410010572000280208200028020c103f10021a200041106a24000b3001017f230041106b22002400101a41011064200041086a10592000280208200028020c103f10021a200041106a24000b3d01027f230041106b22002400101a41021064410010402101200041086a4101105720012000280208200028020c10151a200110021a200041106a24000b3d01027f230041106b22002400101a41021064410010402101200041086a4101105720012000280208200028020c10011a200110021a200041106a24000b5301037f230041106b22002400101a4103106441001040410141b182024111105b200041086a410241a882024109105b103720002802082201200028020c2202106c45044020012002100c0b200041106a24000b5601037f230041106b22002400101a41031064410010402101410141a382024105105b2102200041086a4102105720012002200028020c2000280208102c044041c282024113104a000b200110021a200041106a24000b2d01017f230041206b22002400101a410110642000419e82024105105220004120103f10021a200041206a24000b5301027f230041206b22002400101a41001064200041086a41af83024106103f10461043200041146a2000280208200028020c107320002802182201200028021c100c200028021420011078200041206a24000b9e03010b7f230041406a22002400101a41001064200041b583024104103f220210452000410036021c412021010340200104402000411c6a2000200210751071200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100c200041406b24000f0b200241e782024112106f000b200241808002410e106f000bfe0201067f23004180016b22002400101a41001064200041d4006a2202419682024108103f2201104502400240200028025c2000280258460d00024002400240200220011075220441ff01710e020201000b200141f98202410d106f000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a412020011070200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100c0b20004180016a24000f0b200141808002410e106f000b1d00101a41001064419682024108103f416710171a4167100f45ad101c0ba90302077f017e230041e0006b22002400101a41001064200041c4006a220241aa83024105103f22011045200041003b01102002200041106a220341022001107020002f01102104200041d0006a2002200110721074200220002802542000280258200110702002200110752105200041c4006a200110722106200042003703102002200341082001107020002903102107200041086a200041c4006a200110721037200220002802082202200028020c220320011070200028024c2000280248470440200141808002410e106f000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a1039200028022020002802241078200041e0006a24000b4001027f230041106b22002400101a41011064200041046a105a41af83024106103f20002802082201200028020c106e200028020420011078200041106a24000b3201017f230041206b22002400101a41011064200041a081024103105241b583024104103f20004120106e200041206a24000bbd0201087f230041d0006b22002400101a10661065200041003602282000412f6a230041306b220124002001200041286a220428020041c4860628020048047f200141106a2004419682024108104c419682024108104d41000541010b3a000f2001410f6a412110c0011a200141306a240020002802281063200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f419682024108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106e0b200041d0006a24000b830101047f230041306b22002400101a41011064200041086a41a081024103106041aa83024105103f103a210120002f01282001103b200028021c220320002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a200028021820031078200041306a24000bc30101017f23004180016b22002400101a41021064200041406b410041b081024102105c200041e0006a410141ae81024102105c200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10c20145ad101c20004180016a24000b3301017f230041206b22002400101a4101106420004100419f81024101105c200041b9850210c20145ad101c200041206a24000b3701017f230041106b22002400101a41011064200041086a410041b481024103105b10372000280208200028020c100c200041106a24000bc70102067f017e230041206b22002400101a41021064200041086a41001057200029030821062000410110572000200029030037021820002006370210410c210103402001417c460440200241004e044041002101200210b801210503402001411046450440200320056a200041106a20016a2204280200200441046a280200220410c0011a200141086a2101200320046a21030c010b0b20052002100c200041206a24000f0b107c0005200041106a20016a28020020026a2102200141086b21010c010b000b000b100041c086062d00001a4101200010440b910101077f230041106b22012400101a41021064200141086a1059200128020821034101210402400240200128020c2205410141b281024102105b22004d044020032106200521000c010b200520006b22024100480d01200210b8012204200020036a200210c0011a41012000104422062003200010c0011a0b20062000100c20042002100c200141106a24000f0b107c000be90101057f230041206b22002400101a4100106441052103200041146a22044105410010bb0120002802182102024020002802144101470440200028021c220141046a41bb81022d00003a0000200141b781022800003600002000410536021c2000200136021820002002360214200241056b41e3004d0440200041086a2004410541e40041014101107a20002802082201418180808078470d0220002802142102200028021c2103200028021821010b200120036a41e40010c1012001200341e4006a100c200220011078200041206a24000f0b2002200028021c107b000b2001200028020c107b000b990101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f20020440200341012001410110be0120032802000c010b200341086a4101200110bf0120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b02000b0b0041d98502410e1000000b340002402002450d0041c086062d00001a20012002104421012003450d002001200210c1010b20002002360204200020013602000b3a01017f230041106b22032400200341086a20012002410010be01200328020c21012000200328020836020020002001360204200341106a24000b8c0501087f024020024110490440200021030c010b024020002000410020006b41037122066a22054f0d00200021032001210420060440200621070340200320042d00003a0000200441016a2104200341016a2103200741016b22070d000b0b200641016b4107490d000340200320042d00003a0000200341016a200441016a2d00003a0000200341026a200441026a2d00003a0000200341036a200441036a2d00003a0000200341046a200441046a2d00003a0000200341056a200441056a2d00003a0000200341066a200441066a2d00003a0000200341076a200441076a2d00003a0000200441086a2104200341086a22032005470d000b0b2005200220066b2207417c7122086a21030240200120066a2204410371450440200320054d0d0120042101034020052001280200360200200141046a2101200541046a22052003490d000b0c010b200320054d0d002004410374220241187121062004417c71220941046a2101410020026b411871210a2009280200210203402005200220067620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20074103712102200420086a21010b02402003200220036a22064f0d002002410771220404400340200320012d00003a0000200141016a2101200341016a2103200441016b22040d000b0b200241016b4107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032006470d000b0b20000bf70201037f200141104f0440024020002000410020006b41037122036a22024f0d0020030440200321040340200041003a0000200041016a2100200441016b22040d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200120036b2201417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200141037121010b02402000200020016a22034f0d002001410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200141016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b0b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b0bb3050400418080020bb904696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f72747032323470323536703338347035323173746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c626261786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f75386164647201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041fb84020b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041d985020b2570616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f7200418086020b0438ffffff", + "code": "0061736d010000000189011560000060027f7f0060027f7f017f60017f0060037f7f7f0060037f7f7f017f60017f017f60047f7f7f7f006000017f60047f7f7f7f017f60057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000303656e76126d427566666572476574417267756d656e74000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000203656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e760f6765744e756d417267756d656e7473000803656e760666696e697368000103656e7614626967496e7446696e697368556e7369676e6564000303656e76106d4275666665724765744c656e677468000603656e760a6d4275666665724e6577000803656e76146d427566666572436f707942797465536c696365000903656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000203656e76136d42756666657247657442797465536c696365000903656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d427566666572417070656e64000203656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000903656e76136d61727368616c436f6d707265737365644543000903656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000903656e760d6d616e6167656443616c6c6572000303656e76136d616e616765644f776e657241646472657373000303656e76096d4275666665724571000203656e76136d42756666657253657442797465536c696365000903656e760f6d42756666657247657442797465730002039601940101040104010d0705050107030801011303020601010102010601080101060205010103070405050303070301040401010805010403030000030103010107080404070102040102030401011401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000040000070402050105030100020616037f01418080020b7f0041c486060b7f0041d086060b07db0a43066d656d6f7279020004696e6974007c096563686f5f68323536007d136563686f5f626f7865645f61727261795f7538007e106563686f5f626f7865645f6279746573007f0d6563686f5f736c6963655f75380080010b6563686f5f7665635f75380081010b6563686f5f737472696e67008201086563686f5f737472008301176563686f5f6173796e635f726573756c745f656d7074790084011b6563686f5f6c617267655f626f7865645f627974655f6172726179008501186563686f5f626f7865645f7365725f6578616d706c655f31008601176563686f5f6d756c74695f76616c75655f7475706c6573008701126563686f5f7365725f6578616d706c655f310088011a6563686f5f7665635f6f665f6d616e616765645f627566666572008901106563686f5f6269675f696e745f766563008a010f6563686f5f7661726167735f753332008b01146563686f5f7661726167735f6269675f75696e74008c0112636f6d707574655f6765745f76616c756573008d0111636f6d707574655f6372656174655f6563008e0115636f6d707574655f6765745f65635f6c656e677468008f0120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680090010e636f6d707574655f65635f61646400910111636f6d707574655f65635f646f75626c6500920116636f6d707574655f69735f6f6e5f63757276655f656300930113636f6d707574655f7363616c61725f6d756c7400940118636f6d707574655f7363616c61725f626173655f6d756c7400950112636f6d707574655f6d61727368616c5f65630096011d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300970114636f6d707574655f756e6d61727368616c5f65630098011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300990117636f6d707574655f67656e65726174655f6b65795f6563009a01116f6e6c795f6f776e65725f6c6567616379009b010f72657475726e5f73635f6572726f72009c0115726573756c745f6572725f66726f6d5f6279746573009d0116726573756c745f6572725f66726f6d5f737472696e67009e0113726573756c745f6572725f66726f6d5f737472009f010b726573756c745f6563686f00a0010d726573756c745f6563686f5f3200a1010d726573756c745f6563686f5f3300a201126d6275666665725f66726f6d5f736c69636500a301186d6275666665725f66726f6d5f626f7865645f627974657300a401116d6275666665725f6f766572777269746500a501146d6275666665725f617070656e645f627974657300a601126d6275666665725f6c6f61645f736c69636500a701116d6275666665725f7365745f736c69636500a801146d616e616765645f616464726573735f66726f6d00a9010b6c6f61645f7665635f753800aa01096c6f61645f6164647200ab010d6c6f61645f6f70745f6164647200ac011169735f656d7074795f6f70745f6164647200ad010a6c6f61645f7365725f3100ae010c73746f72655f7665635f753800af010a73746f72655f6164647200b0010e73746f72655f6f70745f6164647200b1010b73746f72655f7365725f3100b2010c636f6d706172655f6832353600b3010c683235365f69735f7a65726f00b40111626f7865645f62797465735f7a65726f7300b50114626f7865645f62797465735f636f6e6361745f3200b60111626f7865645f62797465735f73706c697400b801107665635f636f6e6361745f636f6e737400b9010863616c6c4261636b00bb010c6563686f5f7374725f626f7800830109726573756c745f6f6b007c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040ae69b0194010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808002410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3b01017f2000280208200028020422056b20024904402003200441e48002410f1038000b2000280200200520012002106b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361073200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011073200241086a2003105c20002002290308370300200241206a24000b2e01017f418e80024117103f22042000200110011a200441a58002410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104822022000200110151a20020b0d0020001048220010041a20000b190020002001100d36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100d22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b4401017f41a086062001200041a08606280200220220007022006b410020001b20026a22006a360200200041ffff034d0440200041a086026a0f0b41fa850241171000000b0a0020002001104610410b0d0020001048220010171a20000b1301017f10482202200010051a2002200110490b1901017f419486024194860228020041016b220036020020000b5101027f230041106b2202240020022000100d220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010482200100620000b1000200020014101104d20014101105f0b2f01017f2000280200220341c086062802004e04402001200241a8800241111038000b2000200341016a36020020030b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1072200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a200020002802004101410441101079200228020822044181808080784704402004200228020c107a000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000b4301017f230041106b22012400200141086a200020002802004101410441041079200128020822004181808080784704402000200128020c107a000b200141106a24000b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351070200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341fa820241121038000b2002200341808002410e1038000b0c00200041002001200210510b5a01047f20002001200210362103024002402000280204220520002802002206100d22044b0d002004200320056a2204490d00200620052003100e2203100f450d010b2001200241e48002410f1038000b2000200436020420030b2401017e2000100922034280808080105a04402001200241808002410e1038000b2003a70b080020004100104e0b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b0c00200020012002200310510be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41b381024103103541ff01710e020201000b41b381024103418c8302410d1038000b200141106a2202200141046a41b38102410310342001411c6a20021059200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41b3810241034199830241121038000b41b38102410341808002410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541cc83026a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b3401027f230041206b22032400200341146a220420012002105b200341086a2004105c20002003290308370300200341206a24000b5901017f230041206b2203240020034100104e2003410c6a20031059200328020c418080808078470440200120024199830241121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b5901037f20012802082202200128020049044002402002450440410121030c010b2001280204210441012002104422032004200210c0011a0b20012002360200200120033602040b20002002360204200020012802043602000b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b0c00410041e88202410d105f0b2501017e20001009220342ffffffff0f5804402003a70f0b2001200241808002410e1038000b0a00200020014101105b0b0a0020002001200210310b190041c0860628020020004c04400f0b41b9800241121000000b1400100a20004604400f0b41cb800241191000000b190041c0860628020041004e04400f0b41a8800241111000000b0b0041c08606100a3602000b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100b0b0a002000100c2001100c0b4301017f103a2101200028020020011047200028020420011047200028020820011047200028020c20011047200028021020011047200028021420011030200110021a0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38002200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780020c020b41fb80020c010b41ff80020b41041013210241010b210120002002360204200020013602000b1a00200020012003200210144504400f0b4183810241131000000b0e01017f104822004200101620000b0d00200020012002103f10181a0b2c01017f41968102411b103f2203200010191a200341a58002410310011a20032001200210011a20031003000b3901017f2000280208200028020422046b2002490440200341e48002410f106e000b2000280200200420012002106b2000200220046a3602040b2801017f2000280200220241204f0440107b000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a41042001106f200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5801037f230041106b22022400200241046a2001410110ba0120022802082103200228020441014604402003200228020c107a000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001106f20022d000f200241106a24000b0a0020004104411010760b3b01017f230041106b2103027f20004504402003410c6a210141000c010b2003200136020c200341086a2101200020026c0b2100200120003602000b0a0020004101410110760b140020004180808080784704402000200110770b0bb60202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c210520012802042108200641186a0b20053602000240200628021c044020062802182202450440200641106a20042003410010bd01200628021021050c020b20042003104422052008200210c0011a0c010b200641086a2004200310be01200628020821050b200421022005450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0e002000044010bc01000b107b000b060010bc01000b0800101a410010630b2c01017f230041206b22002400101a410110632000410041b281024101105720004120100b200041206a24000b4801027f101a41011063230041106b22002400200041086a41001042200028020c41800147044041b18102410141fa820241121038000b2000280208200041106a2400418001100b0b3401027f230041106b22002400101a41011063200041086a10562000280208200028020c2201100b2001ad101b200041106a24000b3601027f230041106b22002400101a41011063200041086a4100105d2000280208200028020c2201100b2001ad101b200041106a24000b3c01047f230041106b22002400101a410110632000105520002802002000280204220220002802082203100b2003ad101b20021077200041106a24000b4001047f230041106b22002400101a41011063200041b18102106020002802002000280204220220002802082203100b2003ad101b20021077200041106a24000b3a01027f230041106b22002400101a41011063200041086a41b181024101105a2000280208200028020c2201100b2001ad101b200041106a24000bac0101067f230041106b22002400101a1065106420004100360200200041046a2102230041106b22012400027f4100200041b88102104c2204450d001a4101200028020041c086062802004e0d001a200141086a200041b881024101104d1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a24002000280200106220002802042201044020012000280208104a000b200041106a24000ba32a0291017f017e101a41011063230041b0066b22002400200041001032200041b0026a21024104210103402001418404470440200041ac026a20016a200041ba8102410410353a0000200141016a21010c010b0b20004180043602ac0220002802a406210320002902a806219101200028009d0621042000280196062105200028008f0621062000280288062107200028008106210820002801fa05210920002800f305210a20002802ec05210b20002800e505210c20002801de05210d20002800d705210e20002802d005210f20002800c905211020002801c205211120002800bb05211220002802b405211320002800ad05211420002801a6052115200028009f05211620002802980521172000280091052118200028018a052119200028008305211a20002802fc04211b20002800f504211c20002801ee04211d20002800e704211e20002802e004211f20002800d904212020002801d204212120002800cb04212220002802c404212320002800bd04212420002801b604212520002800af04212620002802a804212720002800a1042128200028019a042129200028009304212a200028028c04212b200028008504212c20002801fe03212d20002800f703212e20002802f003212f20002800e903213020002801e203213120002800db03213220002802d403213320002800cd03213420002801c603213520002800bf03213620002802b803213720002800b103213820002801aa03213920002800a303213a200028029c03213b200028009503213c200028018e03213d200028008703213e200028028003213f20002800f902214020002801f202214120002800eb02214220002802e402214320002800dd02214420002801d602214520002800cf02214620002802c802214720002800c102214820002801ba02214920002800b302214a200041aa026a224b200241026a2d00003a0000200041a2026a224c200041c0026a2d00003a00002000419e026a224d200041c7026a2d00003a00002000419a026a224e200041ce026a2d00003a0000200020022f00003b01a802200020002f00b7023b01a4022000200041b9026a2d00003a00a602200020002f01be023b01a002200020002f00c5023b019c02200020002f01cc023b01980220004196026a2202200041d5026a2d00003a000020004192026a224f200041dc026a2d00003a00002000418e026a2250200041e3026a2d00003a00002000418a026a2251200041ea026a2d00003a000020004186026a2252200041f1026a2d00003a0000200020002f00d3023b019402200020002f01da023b019002200020002f00e1023b018c02200020002f01e8023b018802200020002f00ef023b01840220004182026a2253200041f8026a2d00003a0000200041fe016a2254200041ff026a2d00003a0000200041fa016a225520004186036a2d00003a0000200041f6016a22562000418d036a2d00003a0000200041f2016a225720004194036a2d00003a0000200020002f01f6023b018002200020002f00fd023b01fc01200020002f0184033b01f801200020002f008b033b01f401200020002f0192033b01f001200041ee016a22582000419b036a2d00003a0000200020002f0099033b01ec01200041ea016a2259200041a2036a2d00003a0000200020002f01a0033b01e801200041e6016a225a200041a9036a2d00003a0000200020002f00a7033b01e401200041e2016a225b200041b0036a2d00003a0000200020002f01ae033b01e001200041de016a225c200041b7036a2d00003a0000200020002f00b5033b01dc01200041da016a225d200041be036a2d00003a0000200020002f01bc033b01d801200041d6016a225e200041c5036a2d00003a0000200020002f00c3033b01d401200041d2016a225f200041cc036a2d00003a0000200020002f01ca033b01d001200041ce016a2260200041d3036a2d00003a0000200020002f00d1033b01cc01200041ca016a2261200041da036a2d00003a0000200020002f01d8033b01c801200041c6016a2262200041e1036a2d00003a0000200020002f00df033b01c401200041c2016a2263200041e8036a2d00003a0000200020002f01e6033b01c001200041be016a2264200041ef036a2d00003a0000200020002f00ed033b01bc01200041ba016a2265200041f6036a2d00003a0000200020002f01f4033b01b801200041b6016a2266200041fd036a2d00003a0000200020002f00fb033b01b401200041b2016a226720004184046a2d00003a0000200020002f0182043b01b001200041ae016a22682000418b046a2d00003a0000200020002f0089043b01ac01200041aa016a226920004192046a2d00003a0000200020002f0190043b01a801200041a6016a226a20004199046a2d00003a0000200020002f0097043b01a401200041a2016a226b200041a0046a2d00003a0000200020002f019e043b01a0012000419e016a226c200041a7046a2d00003a0000200020002f00a5043b019c012000419a016a226d200041ae046a2d00003a0000200020002f01ac043b01980120004196016a226e200041b5046a2d00003a0000200020002f00b3043b01940120004192016a226f200041bc046a2d00003a0000200020002f01ba043b0190012000418e016a2270200041c3046a2d00003a0000200020002f00c1043b018c012000418a016a2271200041ca046a2d00003a0000200020002f01c8043b01880120004186016a2272200041d1046a2d00003a0000200020002f00cf043b01840120004182016a2273200041d8046a2d00003a0000200020002f01d6043b018001200041fe006a2274200041df046a2d00003a0000200020002f00dd043b017c200041fa006a2275200041e6046a2d00003a0000200020002f01e4043b0178200041f6006a2276200041ed046a2d00003a0000200020002f00eb043b0174200041f2006a2277200041f4046a2d00003a0000200020002f01f2043b0170200041ee006a2278200041fb046a2d00003a0000200020002f00f9043b016c200041ea006a227920004182056a2d00003a0000200020002f0180053b0168200041e6006a227a20004189056a2d00003a0000200020002f0087053b0164200041e2006a227b20004190056a2d00003a0000200020002f018e053b0160200041de006a227c20004197056a2d00003a0000200020002f0095053b015c200041da006a227d2000419e056a2d00003a0000200020002f019c053b0158200041d6006a227e200041a5056a2d00003a0000200020002f00a3053b0154200041d2006a227f200041ac056a2d00003a0000200020002f01aa053b0150200041ce006a228001200041b3056a2d00003a0000200020002f00b1053b014c200041ca006a228101200041ba056a2d00003a0000200020002f01b8053b0148200041c6006a228201200041c1056a2d00003a0000200020002f00bf053b0144200041c2006a228301200041c8056a2d00003a0000200020002f01c6053b01402000413e6a228401200041cf056a2d00003a0000200020002f00cd053b013c2000413a6a228501200041d6056a2d00003a0000200020002f01d4053b0138200041366a228601200041dd056a2d00003a0000200020002f00db053b0134200041326a228701200041e4056a2d00003a0000200020002f01e2053b01302000412e6a228801200041eb056a2d00003a0000200020002f00e9053b012c2000412a6a228901200041f2056a2d00003a0000200020002f01f0053b0128200041266a228a01200041f9056a2d00003a0000200020002f00f7053b0124200041226a228b0120004180066a2d00003a0000200020002f01fe053b01202000411e6a228c0120004187066a2d00003a0000200020002f0085063b011c2000411a6a228d012000418e066a2d00003a0000200020002f018c063b0118200041166a228e0120004195066a2d00003a0000200020002f0093063b0114200041126a228f012000419c066a2d00003a0000200020002f019a063b01102000410e6a229001200041a3066a2d00003a0000200020002f00a1063b010c410141800410442201204a3600032001204936000a20012048360011200141026a204b2d00003a0000200120002f01a8023b0000200120002f01a4023b0007200141096a20002d00a6023a0000200120002f01a0023b000e200141106a204c2d00003a0000200120002f019c023b0015200141176a204d2d00003a0000200120473600182001204636001f200120453600262001204436002d2001411e6a204e2d00003a0000200120002f0198023b001c200141256a20022d00003a0000200120002f0194023b00232001412c6a204f2d00003a0000200120002f0190023b002a200141336a20502d00003a0000200120002f018c023b0031200120433600342001204236003b20012041360042200120403600492001413a6a20512d00003a0000200120002f0188023b0038200141c1006a20522d00003a0000200120002f0184023b003f200141c8006a20532d00003a0000200120002f0180023b0046200141cf006a20542d00003a0000200120002f01fc013b004d2001203f3600502001203e3600572001203d36005e2001203c360065200141d6006a20552d00003a0000200120002f01f8013b0054200141dd006a20562d00003a0000200120002f01f4013b005b200141e4006a20572d00003a0000200120002f01f0013b0062200141eb006a20582d00003a0000200120002f01ec013b00692001203b36006c2001203a3600732001203936007a2001203836008101200141f2006a20592d00003a0000200120002f01e8013b0070200141f9006a205a2d00003a0000200120002f01e4013b007720014180016a205b2d00003a0000200120002f01e0013b007e20014187016a205c2d00003a0000200120002f01dc013b00850120012037360088012001203636008f0120012035360096012001203436009d012001418e016a205d2d00003a0000200120002f01d8013b008c0120014195016a205e2d00003a0000200120002f01d4013b0093012001419c016a205f2d00003a0000200120002f01d0013b009a01200141a3016a20602d00003a0000200120002f01cc013b00a101200120333600a401200120323600ab01200120313600b201200120303600b901200141aa016a20612d00003a0000200120002f01c8013b00a801200141b1016a20622d00003a0000200120002f01c4013b00af01200141b8016a20632d00003a0000200120002f01c0013b00b601200141bf016a20642d00003a0000200120002f01bc013b00bd012001202f3600c0012001202e3600c7012001202d3600ce012001202c3600d501200141c6016a20652d00003a0000200120002f01b8013b00c401200141cd016a20662d00003a0000200120002f01b4013b00cb01200141d4016a20672d00003a0000200120002f01b0013b00d201200141db016a20682d00003a0000200120002f01ac013b00d9012001202b3600dc012001202a3600e301200120293600ea01200120283600f101200141e2016a20692d00003a0000200120002f01a8013b00e001200141e9016a206a2d00003a0000200120002f01a4013b00e701200141f0016a206b2d00003a0000200120002f01a0013b00ee01200141f7016a206c2d00003a0000200120002f019c013b00f501200120273600f801200120263600ff0120012025360086022001202436008d02200141fe016a206d2d00003a0000200120002f0198013b00fc0120014185026a206e2d00003a0000200120002f0194013b0083022001418c026a206f2d00003a0000200120002f0190013b008a0220014193026a20702d00003a0000200120002f018c013b00910220012023360094022001202236009b02200120213600a202200120203600a9022001419a026a20712d00003a0000200120002f0188013b009802200141a1026a20722d00003a0000200120002f0184013b009f02200141a8026a20732d00003a0000200120002f0180013b00a602200141af026a20742d00003a0000200120002f017c3b00ad022001201f3600b0022001201e3600b7022001201d3600be022001201c3600c502200141b6026a20752d00003a0000200120002f01783b00b402200141bd026a20762d00003a0000200120002f01743b00bb02200141c4026a20772d00003a0000200120002f01703b00c202200141cb026a20782d00003a0000200120002f016c3b00c9022001201b3600cc022001201a3600d302200120193600da02200120183600e102200141d2026a20792d00003a0000200120002f01683b00d002200141d9026a207a2d00003a0000200120002f01643b00d702200141e0026a207b2d00003a0000200120002f01603b00de02200141e7026a207c2d00003a0000200120002f015c3b00e502200120173600e802200120163600ef02200120153600f602200120143600fd02200141ee026a207d2d00003a0000200120002f01583b00ec02200141f5026a207e2d00003a0000200120002f01543b00f302200141fc026a207f2d00003a0000200120002f01503b00fa0220014183036a2080012d00003a0000200120002f014c3b00810320012013360084032001201236008b03200120113600920320012010360099032001418a036a2081012d00003a0000200120002f01483b00880320014191036a2082012d00003a0000200120002f01443b008f0320014198036a2083012d00003a0000200120002f01403b0096032001419f036a2084012d00003a0000200120002f013c3b009d032001200f3600a0032001200e3600a7032001200d3600ae032001200c3600b503200141a6036a2085012d00003a0000200120002f01383b00a403200141ad036a2086012d00003a0000200120002f01343b00ab03200141b4036a2087012d00003a0000200120002f01303b00b203200141bb036a2088012d00003a0000200120002f012c3b00b9032001200b3600bc032001200a3600c303200120093600ca03200120083600d103200141c2036a2089012d00003a0000200120002f01283b00c003200141c9036a208a012d00003a0000200120002f01243b00c703200141d0036a208b012d00003a0000200120002f01203b00ce03200141d7036a208c012d00003a0000200120002f011c3b00d503200120073600d803200120063600df03200120053600e603200120043600ed03200141de036a208d012d00003a0000200120002f01183b00dc03200141e5036a208e012d00003a0000200120002f01143b00e303200141ec036a208f012d00003a0000200120002f01103b00ea03200141f3036a2090012d00003a0000200120002f010c3b00f10320012091013700f803200120033600f4032000280208200028020447044041ba8102410441808002410e1038000b200041b0066a2400103a2200200141800410011a200010021a0b4901027f101a41011063230041306b22002400200041086a220141b68102410210314108412810442001412810c001200041306a2400220010392000280210200041146a28020010770bcf0402097f017e230041206b22022400101a1065106420024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a2104024002400340200528020041c08606280200480440200541b981024101104d100722094280808080087d42ffffffff6f580d022004200541b981024101104d104e200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a104f0c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41b98102410141ab830241121038000b20022802041062200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a104f200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b1075200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100b200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b20051075200241206a24000b0b0b3901027f230041306b22002400101a41011063200041086a220141b6810241021061200110392000280218200028021c1077200041306a24000b880201087f230041106b22012400101a41011063200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41bf810241021053210720002802082003460440200041086a1050200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001049200441046a21040c010b0b200010021a2001280204410441041076200141106a24000b960201087f230041106b22012400101a41011063200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41be8102410110531048220710081a20002802082003460440200041086a1050200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010482204200320056a280200101d1a200420001049200541046a21050c010b0b200010021a2001280204410441041076200141106a24000b890201087f230041206b22022400101a106510642002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c200528020041c08606280200480440200541b98102104c210720002802042001460440200041046a1050200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106220022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041076200241206a24000bfe0101087f230041106b22002400101a106510642000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c200728020041c08606280200480440200741b981024101104d104b210520012802042002460440200141046a1050200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10622000280208410274210320002802042105034020032006470440200520066a280200100c200641046a21060c010b0b2000280200410441041076200041106a24000b810101067f230041206b22002400101a410110632000105e106a024020002802004101710440200041086a200028020410690c010b106c2101106c2102106c2103106c2104106c21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b3d01027f230041206b22002400101a41011063200041f582024105105a200041086a2201200028020020002802041013106920011068200041206a24000b3d01027f230041106b22002400101a41011063200041086a105e2201106a2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011063200041086a105e106a2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051063105e21014101104b21034102104b21044103104b21054104104b2106200041086a2001106a024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106c2101106c21020b200120021067200041106a24000b6c01067f230041106b22002400101a41031063105e21014101104b21034102104b2104200041086a2001106a024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106c2101106c21020b200120021067200041106a24000b5201047f230041106b22002400101a41031063105e21014101104b21024102104b2103200041086a2001106a2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b850101087f230041106b22002400101a41041063105e21014101104b21034102104b2104200041086a4103105d200028020c21052000280208210620002001106a024020002802004101710440200028020421074200101022014200101022022007200320042006200510221a0c010b106c2101106c21020b200120021067200041106a24000b7501067f230041106b22002400101a41021063105e2101200041086a4101105d200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310231a0c010b106c2101106c21020b200120021067200041106a24000b930101057f230041206b22002400101a41031063105e21014101104b21024102104b2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100b200041206a24000b900101057f230041206b22002400101a41031063105e21014101104b21024102104b2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100b200041206a24000b7501067f230041106b22002400101a41021063105e2101200041086a4101105d200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310261a0c010b106c2101106c21020b200120021067200041106a24000b7501067f230041106b22002400101a41021063105e2101200041086a4101105d200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310271a0c010b106c2101106c21020b200120021067200041106a24000b950101057f230041206b22002400101a41011063200041186a105e106a024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106c2102106c2103200041106a4100103720002802142104200028021021010b2002100c2003100c20012004100b200041206a24000b3201027f101a4100106310482200102910482201102a41908202410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106341818202410f102e000b2901017f230041106b22002400101a41011063200041086a10562000280208200028020c103f103e000b3801037f230041106b22002400101a41011063200041046a41d38102106020002802082201200028020c103f200028020420011077103e000b2f01017f230041106b22002400101a41011063200041086a41d381024101105a2000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021063200041046a1058027f0240410110092204420158044041002004a741016b0d021a0c010b41cf8102410441ab830241121038000b41010b45044041d481024116104a000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041ea8102200320011b2201360208200041046a1066200220011078200041106a24000b6801057f230041106b22002400101a41011063200041046a220310582000280208210120004117200028020c200028020422024180808080784622041b36020c200041ea8102200120041b22013602082000200236020420031066200220011078200041106a24000b4f01037f230041106b22002400101a41011063200041046a10582000280204220141808080807846044041ea81024117102e000b20002802082202200028020c100b200120021077200041106a24000b3201017f230041106b22002400101a41011063200041086a4100105d2000280208200028020c103f10021a200041106a24000b3001017f230041106b22002400101a41011063200041086a10562000280208200028020c103f10021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101105d20012000280208200028020c10151a200110021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101105d20012000280208200028020c10011a200110021a200041106a24000b7a01067f230041106b22002400101a41031063410010402104410141c48202411110542102410241bb820241091054210320022004100d22014b200220036a20014b72450440200041086a20031037200028020c210120002802082105200304402004200220052001106b0b20052001100b0b200041106a24000b5601037f230041106b22002400101a41031063410010402101410141b68202410510542102200041086a4102105d20012002200028020c2000280208102c044041d582024113104a000b200110021a200041106a24000b2d01017f230041206b22002400101a41011063200041b182024105105220004120103f10021a200041206a24000b5301027f230041206b22002400101a41001063200041086a41c283024106103f10461043200041146a2000280208200028020c107220002802182201200028021c100b200028021420011077200041206a24000b9e03010b7f230041406a22002400101a41001063200041c883024104103f220210452000410036021c412021010340200104402000411c6a2000200210741070200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100b200041406b24000f0b200241fa82024112106e000b200241808002410e106e000bfe0201067f23004180016b22002400101a41001063200041d4006a220241a982024108103f2201104502400240200028025c2000280258460d00024002400240200220011074220441ff01710e020201000b2001418c8302410d106e000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a41202001106f200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100b0b20004180016a24000f0b200141808002410e106e000b1d00101a4100106341a982024108103f416710171a4167100d45ad101c0ba90302077f017e230041e0006b22002400101a41001063200041c4006a220241bd83024105103f22011045200041003b01102002200041106a220341022001106f20002f01102104200041d0006a20022001107110732002200028025420002802582001106f2002200110742105200041c4006a200110712106200042003703102002200341082001106f20002903102107200041086a200041c4006a200110711037200220002802082202200028020c22032001106f200028024c2000280248470440200141808002410e106e000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a1039200028022020002802241077200041e0006a24000b4001027f230041106b22002400101a41011063200041046a105541c283024106103f20002802082201200028020c106d200028020420011077200041106a24000b3201017f230041206b22002400101a41011063200041b381024103105241c883024104103f20004120106d200041206a24000bbd0201087f230041d0006b22002400101a10651064200041003602282000412f6a230041306b220124002001200041286a220428020041c0860628020048047f200141106a200441a982024108104d41a982024108105141000541010b3a000f2001410f6a412110c0011a200141306a240020002802281062200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f41a982024108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106d0b200041d0006a24000b830101047f230041306b22002400101a41011063200041086a41b381024103106141bd83024105103f103a210120002f01282001103b200028021c220320002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a200028021820031077200041306a24000bc30101017f23004180016b22002400101a41021063200041406b410041c3810241021057200041e0006a410141c1810241021057200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10bf0145ad101c20004180016a24000b3301017f230041206b22002400101a410110632000410041b2810241011057200041cc850210bf0145ad101c200041206a24000b3701017f230041106b22002400101a41011063200041086a410041c781024103105410372000280208200028020c100b200041106a24000bc70102067f017e230041206b22002400101a41021063200041086a4100105d2000290308210620004101105d2000200029030037021820002006370210410c210103402001417c460440200241004e044041002101200210b701210503402001411046450440200320056a200041106a20016a2204280200200441046a280200220410c0011a200141086a2101200320046a21030c010b0b20052002100b200041206a24000f0b107b0005200041106a20016a28020020026a2102200141086b21010c010b000b000b08004101200010440b910101077f230041106b22012400101a41021063200141086a1056200128020821034101210402400240200128020c2205410141c581024102105422004d044020032106200521000c010b200520006b22024100480d01200210b7012204200020036a200210c0011a41012000104422062003200010c0011a0b20062000100b20042002100b200141106a24000f0b107b000be90101057f230041206b22002400101a4100106341052103200041146a22044105410010ba0120002802182102024020002802144101470440200028021c220141046a41ce81022d00003a0000200141ca81022800003600002000410536021c2000200136021820002002360214200241056b41e3004d0440200041086a2004410541e40041014101107920002802082201418180808078470d0220002802142102200028021c2103200028021821010b200120036a41e40010c1012001200341e4006a100b200220011077200041206a24000f0b2002200028021c107a000b2001200028020c107a000b990101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f20020440200341012001410110bd0120032802000c010b200341086a4101200110be0120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b02000b0b0041ec8502410e1000000b2c0002402002450d0020012002104421012003450d002001200210c1010b20002002360204200020013602000b3a01017f230041106b22032400200341086a20012002410010bd01200328020c21012000200328020836020020002001360204200341106a24000b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b8607010c7f230041106b21070240200222054110490440200021020c010b024020002000410020006b41037122066a22044f0d00200021022001210320060440200621080340200220032d00003a0000200341016a2103200241016a2102200841016b22080d000b0b200641016b4107490d000340200220032d00003a0000200241016a200341016a2d00003a0000200241026a200341026a2d00003a0000200241036a200341036a2d00003a0000200241046a200341046a2d00003a0000200241056a200341056a2d00003a0000200241066a200341066a2d00003a0000200241076a200341076a2d00003a0000200341086a2103200241086a22022004470d000b0b2004200520066b220d417c71220e6a21020240200120066a22034103712201450440200220044d0d0120032101034020042001280200360200200141046a2101200441046a22042002490d000b0c010b410021052007410036020c2007410c6a2001722106410420016b22084101710440200620032d00003a0000410121050b20084102710440200520066a200320056a2f01003b01000b200320016b210520014103742108200728020c210b02402002200441046a4d0440200421060c010b410020086b411871210a03402004200b200876200541046a2205280200220b200a7472360200200441086a210c200441046a220621042002200c4b0d000b0b41002104200741003a0008200741003a0006027f20014101460440410021014100210a200741086a0c010b200541056a2d00002007200541046a2d000022013a0008410874210a41022109200741066a0b210c20062003410171047f200c200541046a20096a2d00003a000020072d0006411074210420072d00080520010b41ff01712004200a7272410020086b41187174200b200876723602000b200d41037121052003200e6a21010b02402002200220056a22044f0d002005410771220304400340200220012d00003a0000200141016a2101200241016a2102200341016b22030d000b0b200541016b4107490d000340200220012d00003a0000200241016a200141016a2d00003a0000200241026a200141026a2d00003a0000200241036a200141036a2d00003a0000200241046a200141046a2d00003a0000200241056a200141056a2d00003a0000200241066a200141066a2d00003a0000200241076a200141076a2d00003a0000200141086a2101200241086a22022004470d000b0b20000bf70201037f200141104f0440024020002000410020006b41037122036a22024f0d0020030440200321040340200041003a0000200041016a2100200441016b22040d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200120036b2201417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200141037121010b02402000200020016a22034f0d002001410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200141016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b0b0bc6050400418080020bcc04696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f727470323234703235367033383470353231736c696365206f7574206f6620626f756e647373746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c626261786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f753861646472010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100418e85020b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041ec85020b2570616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f7200419486020b0438ffffff", "report": { "imports": [ "addEC", @@ -1151,12 +1151,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/alloc-features.wasm", - "size": 23104, + "size": 23434, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/alloc-features/output/alloc-mem-fail.mxsc.json b/test/features/alloc-features/output/alloc-mem-fail.mxsc.json index 459be4c57..338b038c8 100644 --- a/test/features/alloc-features/output/alloc-mem-fail.mxsc.json +++ b/test/features/alloc-features/output/alloc-mem-fail.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "alloc-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -1112,7 +1112,7 @@ } } }, - "code": "0061736d010000000189011560000060027f7f0060017f0060027f7f017f60037f7f7f0060037f7f7f017f60017f017f60047f7f7f7f017f6000017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000203656e76126d427566666572476574417267756d656e74000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000303656e760f6765744e756d417267756d656e7473000803656e7614626967496e7446696e697368556e7369676e6564000203656e760666696e697368000103656e760a6d4275666665724e6577000803656e76146d427566666572436f707942797465536c696365000703656e76106d4275666665724765744c656e677468000603656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000303656e76136d42756666657247657442797465536c696365000703656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e760d6d427566666572417070656e64000303656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000303656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000703656e76136d61727368616c436f6d707265737365644543000703656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000703656e760d6d616e6167656443616c6c6572000203656e76136d616e616765644f776e657241646472657373000203656e76096d4275666665724571000303656e76136d42756666657253657442797465536c696365000703656e760f6d42756666657247657442797465730003039901970101040104010d0905050109020801011302030601010101060108010106050101030209000404040401080501010509020205020102020000010202010107080404090103040103020401020201140104040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404050305030100030616037f01418080080b7f00419086080b7f00419086080b07fa0a44066d656d6f7279020004696e6974008001096563686f5f68323536008101136563686f5f626f7865645f61727261795f7538008201106563686f5f626f7865645f62797465730083010d6563686f5f736c6963655f75380084010b6563686f5f7665635f75380085010b6563686f5f737472696e67008601086563686f5f737472008701176563686f5f6173796e635f726573756c745f656d7074790088011b6563686f5f6c617267655f626f7865645f627974655f6172726179008901186563686f5f626f7865645f7365725f6578616d706c655f31008a01176563686f5f6d756c74695f76616c75655f7475706c6573008b01126563686f5f7365725f6578616d706c655f31008c011a6563686f5f7665635f6f665f6d616e616765645f627566666572008d01106563686f5f6269675f696e745f766563008e010f6563686f5f7661726167735f753332008f01146563686f5f7661726167735f6269675f75696e7400900112636f6d707574655f6765745f76616c75657300910111636f6d707574655f6372656174655f656300920115636f6d707574655f6765745f65635f6c656e67746800930120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680094010e636f6d707574655f65635f61646400950111636f6d707574655f65635f646f75626c6500960116636f6d707574655f69735f6f6e5f63757276655f656300970113636f6d707574655f7363616c61725f6d756c7400980118636f6d707574655f7363616c61725f626173655f6d756c7400990112636f6d707574655f6d61727368616c5f6563009a011d636f6d707574655f6d61727368616c5f636f6d707265737365645f6563009b0114636f6d707574655f756e6d61727368616c5f6563009c011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563009d0117636f6d707574655f67656e65726174655f6b65795f6563009e01116f6e6c795f6f776e65725f6c6567616379009f010f72657475726e5f73635f6572726f7200a00115726573756c745f6572725f66726f6d5f627974657300a10116726573756c745f6572725f66726f6d5f737472696e6700a20113726573756c745f6572725f66726f6d5f73747200a3010b726573756c745f6563686f00a4010d726573756c745f6563686f5f3200a5010d726573756c745f6563686f5f3300a601126d6275666665725f66726f6d5f736c69636500a701186d6275666665725f66726f6d5f626f7865645f627974657300a801116d6275666665725f6f766572777269746500a901146d6275666665725f617070656e645f627974657300aa01126d6275666665725f6c6f61645f736c69636500ab01116d6275666665725f7365745f736c69636500ac01146d616e616765645f616464726573735f66726f6d00ad010b6c6f61645f7665635f753800ae01096c6f61645f6164647200af010d6c6f61645f6f70745f6164647200b0011169735f656d7074795f6f70745f6164647200b1010a6c6f61645f7365725f3100b2010c73746f72655f7665635f753800b3010a73746f72655f6164647200b4010e73746f72655f6f70745f6164647200b5010b73746f72655f7365725f3100b6010c636f6d706172655f6832353600b7010c683235365f69735f7a65726f00b80111626f7865645f62797465735f7a65726f7300b90114626f7865645f62797465735f636f6e6361745f3200ba0111626f7865645f62797465735f73706c697400bc01107665635f636f6e6361745f636f6e737400bd0116616c6c6f635f776974685f6661696c5f6d656d6f727900be010863616c6c4261636b00bf010c6563686f5f7374725f626f7800870109726573756c745f6f6b0080010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040abc6e97010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808008410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3001017f20002802002000280204220520012002106b04402003200441e48008410f1038000b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361073200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011073200241086a2003105620002002290308370300200241206a24000b2e01017f418e80084117103f22042000200110011a200441a58008410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104722022000200110151a20020b0d0020001047220010041a20000b190020002001100f36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100f22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b0a0020002001104510410b0d0020001047220010171a20000b1301017f10472202200010051a2002200110480b1901017f418486084184860828020041016b220036020020000b5101027f230041106b2202240020022000100f220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010472200100620000b2f01017f20002802002203418c86082802004e04402001200241a8800841111038000b2000200341016a36020020030b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1072200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a20002000280200410141044110107b200228020822044181808080784704402004200228020c107c000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000b1000200020014101104b2001410110580b4301017f230041106b22012400200141086a20002000280200410141044104107b200128020822004181808080784704402000200128020c107c000b200141106a24000b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351070200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341e8820841121038000b2002200341808008410e1038000b0b0041e88508411b1000000b0c00200041002001200210500b0a0020002001200210310b3401027f230041206b22032400200341146a2204200120021055200341086a2004105620002003290308370300200341206a24000b5901017f230041206b2203240020034100104c2003410c6a20031061200328020c418080808078470440200120024187830841121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b2801017f2001280208220220012802004904401051000b20002002360204200020012802043602000b0c00410041d68208410d10580b2501017e20001008220342ffffffff0f5804402003a70f0b2001200241808008410e1038000b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b0a0020002001410110550b2401017e2000100822034280808080105a04402001200241808008410e1038000b2003a70b0c00200020012002200310500b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b080020004100104c0b4201037f2000200120021036210320002802042104100d21052000280200200420032005100e04402001200241e48008410f1038000b2000200320046a36020420050be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41a081084103103541ff01710e020201000b41a08108410341fa8208410d1038000b200141106a2202200141046a41a08108410310342001411c6a20021061200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41a0810841034187830841121038000b41a08108410341808008410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541ba83086a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b1900418c860828020020004c04400f0b41b9800841121000000b1400100a20004604400f0b41cb800841191000000b1900418c860828020041004e04400f0b41a8800841111000000b0b00418c8608100a3602000b0a002000100b2001100b0b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100c0b4301017f103a2101200028020020011046200028020420011046200028020820011046200028020c20011046200028021020011046200028021420011030200110021a0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38008200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780080c020b41fb80080c010b41ff80080b41041013210241010b210120002002360204200020013602000b0f00200020012003200210144100470b0e01017f104722004200101620000b0d00200020012002103f10181a0b2c01017f41838108411b103f2203200010191a200341a58008410310011a20032001200210011a20031003000b2e01017f20002802002000280204220420012002106b0440200341e48008410f106e000b2000200220046a3602040b2801017f2000280200220241204f0440107f000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a41042001106f200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5701037f230041106b22022400200241046a20014101107e20022802082103200228020441014604402003200228020c107c000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001106f20022d000f200241106a24000b0a0020004104411010760b5601017f230041106b22032400027f2000450440410021002003410c6a0c010b2003200136020c200020026c2100200341086a0b20003602000240200328020c450d002003280208450d001051000b200341106a24000b0a0020004101410110760b0a00200004401051000b0b1500200028021020002802141077200028020410780b140020004180808080784704402000200110770b0b980202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c2105200641186a0b200536020020042102027f200628021c04402006280218450440200641106a2004200310c10120062802100c020b1051000b200641086a2004200310c20120062802080b2205450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0e002000044010c001000b107f000b5e01027f230041106b22032400200341046a20024100107e20032802082104200328020441014604402004200328020c107c000b200328020c2001200210c3012101200020023602082000200136020420002004360200200341106a24000b970101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f2002044020034101200110c10120032802000c010b200341086a4101200110c20120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b060010c001000b0800101a410010630b2c01017f230041206b22002400101a4101106320004100419f81084101105c20004120100c200041206a24000b4b01027f101a41011063230041106b22002400200041086a41001042200028020c418001470440419e8108410141e8820841121038000b2000280208200041106a2400418001100c1051000b3801027f230041106b22002400101a41011063200041086a105d2000280208200028020c2201100c2001ad101b20011078200041106a24000b3a01027f230041106b22002400101a41011063200041086a410010592000280208200028020c2201100c2001ad101b20011078200041106a24000b3c01047f230041106b22002400101a410110632000105e20002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b4001047f230041106b22002400101a410110632000419e8108105a20002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b3e01027f230041106b22002400101a41011063200041086a419e8108410110542000280208200028020c2201100c2001ad101b20011078200041106a24000bac0101067f230041106b22002400101a1065106420004100360200200041046a2102230041106b22012400027f4100200041a58108104e2204450d001a41012000280200418c86082802004e0d001a200141086a200041a581084101104b1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a240020002802001062200028020422010440200120002802081049000b200041106a24000b4b01027f101a41011063230041106b22012400200141046a410010324180042100034020000440200141046a41a78108410410351a200041016b21000c010b0b418886082d00001a1051000b2b01017f101a41011063230041306b22002400200041086a41a3810841021031418886082d00001a1051000bcf0402097f017e230041206b22022400101a1065106420024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a21040240024003402005280200418c8608280200480440200541a681084101104b100722094280808080087d42ffffffff6f580d022004200541a681084101104b104c200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a104d0c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41a6810841014199830841121038000b20022802041062200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a104d200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b1075200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100c200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b20051075200241206a24000b0b0b3101027f230041306b22002400101a41011063200041086a220141a38108410210532001103920011079200041306a24000b880201087f230041106b22012400101a41011063200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ad81084102105f210720002802082003460440200041086a104f200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001048200441046a21040c010b0b200010021a2001280204410441041076200141106a24000b960201087f230041106b22012400101a41011063200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ac81084101105f1047220710091a20002802082003460440200041086a104f200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010472204200320056a280200101d1a200420001048200541046a21050c010b0b200010021a2001280204410441041076200141106a24000b890201087f230041206b22022400101a106510642002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c2005280200418c8608280200480440200541a68108104e210720002802042001460440200041046a104f200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106220022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041076200241206a24000bfe0101087f230041106b22002400101a106510642000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c2007280200418c8608280200480440200741a681084101104b104a210520012802042002460440200141046a104f200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10622000280208410274210320002802042105034020032006470440200520066a280200100b200641046a21060c010b0b2000280200410441041076200041106a24000b810101067f230041206b22002400101a4101106320001057106a024020002802004101710440200041086a200028020410690c010b106c2101106c2102106c2103106c2104106c21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b4301037f230041206b22002400101a41011063200041e3820841051054200041086a2201200028020020002802042202101310692001106820021078200041206a24000b3d01027f230041106b22002400101a41011063200041086a10572201106a2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011063200041086a1057106a2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051063105721014101104a21034102104a21044103104a21054104104a2106200041086a2001106a024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106c2101106c21020b200120021066200041106a24000b6c01067f230041106b22002400101a41031063105721014101104a21034102104a2104200041086a2001106a024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106c2101106c21020b200120021066200041106a24000b5201047f230041106b22002400101a41031063105721014101104a21024102104a2103200041086a2001106a2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b890101087f230041106b22002400101a41041063105721014101104a21044102104a2105200041086a41031059200028020c21022000280208210620002001106a024020002802004101710440200028020421074200101022014200101022032007200420052006200210221a0c010b106c2101106c21030b20012003106620021078200041106a24000b7901067f230041106b22002400101a4102106310572101200041086a41011059200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210231a0c010b106c2101106c21030b20012003106620021078200041106a24000b970101057f230041206b22002400101a41031063105721014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100c20011078200041206a24000b940101057f230041206b22002400101a41031063105721014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100c20011078200041206a24000b7901067f230041106b22002400101a4102106310572101200041086a41011059200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210261a0c010b106c2101106c21030b20012003106620021078200041106a24000b7901067f230041106b22002400101a4102106310572101200041086a41011059200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210271a0c010b106c2101106c21030b20012003106620021078200041106a24000b990101057f230041206b22002400101a41011063200041186a1057106a024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106c2102106c2103200041106a4100103720002802142104200028021021010b2002100b2003100b20012004100c20041078200041206a24000b3201027f101a4100106310472200102910472201102a41fe8108410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106341ef8108410f102e000b2f01027f230041106b22002400101a41011063200041086a105d2000280208200028020c2200103f20001078103e000b3801037f230041106b22002400101a41011063200041046a41c18108105a20002802082201200028020c103f200028020420011077103e000b2f01017f230041106b22002400101a41011063200041086a41c18108410110542000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021063200041046a1060027f0240410110082204420158044041002004a741016b0d021a0c010b41bd810841044199830841121038000b41010b45044041c2810841161049000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041d88108200320011b2201360208200041046a106720022001107a200041106a24000b6801057f230041106b22002400101a41011063200041046a220310602000280208210120004117200028020c200028020422024180808080784622041b36020c200041d88108200120041b2201360208200020023602042003106720022001107a200041106a24000b4f01037f230041106b22002400101a41011063200041046a10602000280204220141808080807846044041d881084117102e000b20002802082202200028020c100c200120021077200041106a24000b3801027f230041106b22002400101a41011063200041086a410010592000280208200028020c2201103f10021a20011078200041106a24000b3601037f230041106b22002400101a41011063200041086a105d2000280208200028020c2201103f2001107810021a200041106a24000b4301037f230041106b22002400101a41021063410010402101200041086a4101105920012000280208200028020c220210151a200110021a20021078200041106a24000b4301037f230041106b22002400101a41021063410010402101200041086a4101105920012000280208200028020c220210011a200110021a20021078200041106a24000b5701037f230041106b22002400101a4103106341001040410141b282084111105b200041086a410241a982084109105b103720002802082202200028020c2201106b45044020022001100c0b20011078200041106a24000b5c01037f230041106b22002400101a41031063410010402102410141a482084105105b2101200041086a4102105920022001200028020c22012000280208102c044041c3820841131049000b200210021a20011078200041106a24000b2d01017f230041206b22002400101a410110632000419f82084105105220004120103f10021a200041206a24000b5301027f230041206b22002400101a41001063200041086a41b083084106103f10451043200041146a2000280208200028020c107220002802182201200028021c100c200028021420011077200041206a24000b9e03010b7f230041406a22002400101a41001063200041b683084104103f220210442000410036021c412021010340200104402000411c6a2000200210741070200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100c200041406b24000f0b200241e882084112106e000b200241808008410e106e000bfe0201067f23004180016b22002400101a41001063200041d4006a2202419782084108103f2201104402400240200028025c2000280258460d00024002400240200220011074220441ff01710e020201000b200141fa8208410d106e000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a41202001106f200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100c0b20004180016a24000f0b200141808008410e106e000b1d00101a41001063419782084108103f416710171a4167100f45ad101c0ba30302077f017e230041e0006b22002400101a41001063200041c4006a220241ab83084105103f22011044200041003b01102002200041106a220341022001106f20002f01102104200041d0006a20022001107110732002200028025420002802582001106f2002200110742105200041c4006a200110712106200042003703102002200341082001106f20002903102107200041086a200041c4006a200110711037200220002802082202200028020c22032001106f200028024c2000280248470440200141808008410e106e000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a2201103920011079200041e0006a24000b4001027f230041106b22002400101a41011063200041046a105e41b083084106103f20002802082201200028020c106d200028020420011077200041106a24000b3201017f230041206b22002400101a41011063200041a081084103105241b683084104103f20004120106d200041206a24000bbd0201087f230041d0006b22002400101a10651064200041003602282000412f6a230041306b220124002001200041286a2204280200418c860828020048047f200141106a2004419782084108104b419782084108105041000541010b3a000f2001410f6a412110c3011a200141306a240020002802281062200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f419782084108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106d0b200041d0006a24000b7e01047f230041306b22002400101a41011063200041086a220241a081084103105341ab83084105103f103a210120002f01282001103b200028021c20002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a20021079200041306a24000bc30101017f23004180016b22002400101a41021063200041406b410041b181084102105c200041e0006a410141af81084102105c200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10c40145ad101c20004180016a24000b3301017f230041206b22002400101a4101106320004100419f81084101105c200041ba850810c40145ad101c200041206a24000b3d01027f230041106b22002400101a41011063200041086a410041b581084103105b10372000280208200028020c2201100c20011078200041106a24000b7401037f230041206b22002400101a41021063200041086a41001059200028020c21012000410110592000200028020436021c20002001360214410c210103402001417c460440024020024100480d0010bb01000b05200041106a20016a28020020026a2102200141086b21010c010b0b107f000b0d00418886082d00001a1051000b6701047f230041106b22002400101a41021063200041086a105d20002802082102200028020c210102402001410141b381084102105b22034b044020012003480d0110bb01000b20022001100c41014100100c2001107841001078200041106a24000f0b107f000bfe0301087f230041206b22022400101a41001063200241146a220141b881084105107d024020022802142206200228021c22046b41e3004d0440200241086a2001200441e40041014101107b20022802082201418180808078470d0120022802142106200228021c21040b024041002002280218220720046a22006b410371220320006a220120004d0d0020030440200321050340200041003a0000200041016a2100200541016b22050d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002001470d000b0b200141e40020036b2203417c716a220020014b0440034020014100360200200141046a22012000490d000b0b024020002003410371220320006a22054f0d002003220104400340200041003a0000200041016a2100200141016b22010d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002005470d000b0b2007200441e4006a100c200620071077200241206a24000f0b2001200228020c107c000b3701017f230041106b22002400101a41001063200041046a41ab81084101107d2000280204200028020810774201101c200041106a24000b02000b0b0041da8508410e1000000b200020020440418886082d00001a1051000b20004100360204200020013602000b3801017f230041106b22032400200341086a2001200210c101200328020c21012000200328020836020020002001360204200341106a24000b8c0501087f024020024110490440200021030c010b024020002000410020006b41037122066a22054f0d00200021032001210420060440200621070340200320042d00003a0000200441016a2104200341016a2103200741016b22070d000b0b200641016b4107490d000340200320042d00003a0000200341016a200441016a2d00003a0000200341026a200441026a2d00003a0000200341036a200441036a2d00003a0000200341046a200441046a2d00003a0000200341056a200441056a2d00003a0000200341066a200441066a2d00003a0000200341076a200441076a2d00003a0000200441086a2104200341086a22032005470d000b0b2005200220066b2207417c7122086a21030240200120066a2204410371450440200320054d0d0120042101034020052001280200360200200141046a2101200541046a22052003490d000b0c010b200320054d0d002004410374220241187121062004417c71220941046a2101410020026b411871210a2009280200210203402005200220067620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20074103712102200420086a21010b02402003200220036a22064f0d002002410771220404400340200320012d00003a0000200141016a2101200341016a2103200441016b22040d000b0b200241016b4107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032006470d000b0b20000b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b0bb8050400418080080bba04696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f72747032323470323536703338347035323173746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c62626148786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f75386164647201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041fc84080b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041da85080b2970616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e20666f7262696464656e00418486080b0438ffffff", + "code": "0061736d010000000189011560000060027f7f0060017f0060027f7f017f60037f7f7f0060037f7f7f017f60017f017f6000017f60047f7f7f7f017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000203656e76126d427566666572476574417267756d656e74000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000303656e760f6765744e756d417267756d656e7473000703656e760666696e697368000103656e7614626967496e7446696e697368556e7369676e6564000203656e76106d4275666665724765744c656e677468000603656e760a6d4275666665724e6577000703656e76146d427566666572436f707942797465536c696365000803656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000303656e76136d42756666657247657442797465536c696365000803656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e760d6d427566666572417070656e64000303656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000303656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000803656e76136d61727368616c436f6d707265737365644543000803656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000803656e760d6d616e6167656443616c6c6572000203656e76136d616e616765644f776e657241646472657373000203656e76096d4275666665724571000303656e76136d42756666657253657442797465536c696365000803656e760f6d42756666657247657442797465730003039901970101040104010d0905050109020701011302030601010101060107010106050901010302000705020105040104040102050102090402020000020102010109070404090103040103020401020201140104040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404030505030100030616037f01418080080b7f0041a086080b7f0041a086080b07fa0a44066d656d6f7279020004696e6974008001096563686f5f68323536008101136563686f5f626f7865645f61727261795f7538008201106563686f5f626f7865645f62797465730083010d6563686f5f736c6963655f75380084010b6563686f5f7665635f75380085010b6563686f5f737472696e67008601086563686f5f737472008701176563686f5f6173796e635f726573756c745f656d7074790088011b6563686f5f6c617267655f626f7865645f627974655f6172726179008901186563686f5f626f7865645f7365725f6578616d706c655f31008a01176563686f5f6d756c74695f76616c75655f7475706c6573008b01126563686f5f7365725f6578616d706c655f31008c011a6563686f5f7665635f6f665f6d616e616765645f627566666572008d01106563686f5f6269675f696e745f766563008e010f6563686f5f7661726167735f753332008f01146563686f5f7661726167735f6269675f75696e7400900112636f6d707574655f6765745f76616c75657300910111636f6d707574655f6372656174655f656300920115636f6d707574655f6765745f65635f6c656e67746800930120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680094010e636f6d707574655f65635f61646400950111636f6d707574655f65635f646f75626c6500960116636f6d707574655f69735f6f6e5f63757276655f656300970113636f6d707574655f7363616c61725f6d756c7400980118636f6d707574655f7363616c61725f626173655f6d756c7400990112636f6d707574655f6d61727368616c5f6563009a011d636f6d707574655f6d61727368616c5f636f6d707265737365645f6563009b0114636f6d707574655f756e6d61727368616c5f6563009c011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563009d0117636f6d707574655f67656e65726174655f6b65795f6563009e01116f6e6c795f6f776e65725f6c6567616379009f010f72657475726e5f73635f6572726f7200a00115726573756c745f6572725f66726f6d5f627974657300a10116726573756c745f6572725f66726f6d5f737472696e6700a20113726573756c745f6572725f66726f6d5f73747200a3010b726573756c745f6563686f00a4010d726573756c745f6563686f5f3200a5010d726573756c745f6563686f5f3300a601126d6275666665725f66726f6d5f736c69636500a701186d6275666665725f66726f6d5f626f7865645f627974657300a801116d6275666665725f6f766572777269746500a901146d6275666665725f617070656e645f627974657300aa01126d6275666665725f6c6f61645f736c69636500ab01116d6275666665725f7365745f736c69636500ac01146d616e616765645f616464726573735f66726f6d00ad010b6c6f61645f7665635f753800ae01096c6f61645f6164647200af010d6c6f61645f6f70745f6164647200b0011169735f656d7074795f6f70745f6164647200b1010a6c6f61645f7365725f3100b2010c73746f72655f7665635f753800b3010a73746f72655f6164647200b4010e73746f72655f6f70745f6164647200b5010b73746f72655f7365725f3100b6010c636f6d706172655f6832353600b7010c683235365f69735f7a65726f00b80111626f7865645f62797465735f7a65726f7300b90114626f7865645f62797465735f636f6e6361745f3200ba0111626f7865645f62797465735f73706c697400bc01107665635f636f6e6361745f636f6e737400bd0116616c6c6f635f776974685f6661696c5f6d656d6f727900be010863616c6c4261636b00bf010c6563686f5f7374725f626f7800870109726573756c745f6f6b0080010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040af67097010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808008410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3b01017f2000280208200028020422056b20024904402003200441e48008410f1038000b2000280200200520012002106b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361073200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011073200241086a2003105b20002002290308370300200241206a24000b2e01017f418e80084117103f22042000200110011a200441a58008410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104722022000200110151a20020b0d0020001047220010041a20000b190020002001100d36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100d22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b0a0020002001104510410b0d0020001047220010171a20000b1301017f10472202200010051a2002200110480b1901017f419886084198860828020041016b220036020020000b5101027f230041106b2202240020022000100d220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010472200100620000b2f01017f20002802002203419c86082802004e04402001200241a8800841111038000b2000200341016a36020020030b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351070200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341fb820841121038000b2002200341808008410e1038000b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1072200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a20002000280200410141044110107b200228020822044181808080784704402004200228020c107c000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000b1000200020014101104b2001410110530b4301017f230041106b22012400200141086a20002000280200410141044104107b200128020822004181808080784704402000200128020c107c000b200141106a24000b0b0041fb8508411b1000000b0c00410041e98208410d10530b2501017e20001008220342ffffffff0f5804402003a70f0b2001200241808008410e1038000be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41b381084103103541ff01710e020201000b41b381084103418d8308410d1038000b200141106a2202200141046a41b38108410310342001411c6a20021055200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41b381084103419a830841121038000b41b38108410341808008410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541cd83086a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b5a01047f20002001200210362103024002402000280204220520002802002206100d22044b0d002004200320056a2204490d00200620052003100e2203100f450d010b2001200241e48008410f1038000b2000200436020420030b0a0020002001200210310b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b3401027f230041206b22032400200341146a220420012002105a200341086a2004105b20002003290308370300200341206a24000b5901017f230041206b2203240020034100104d2003410c6a20031055200328020c41808080807847044020012002419a830841121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b2801017f2001280208220220012802004904401051000b20002002360204200020012802043602000b080020004100104d0b2401017e2000100822034280808080105a04402001200241808008410e1038000b2003a70b0a00200020014101105a0b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b0c002000200120022003104c0b0c002000410020012002104c0b1900419c860828020020004c04400f0b41b9800841121000000b1400100a20004604400f0b41cb800841191000000b1900419c860828020041004e04400f0b41a8800841111000000b0b00419c8608100a3602000b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100b0b0a002000100c2001100c0b4301017f103a2101200028020020011046200028020420011046200028020820011046200028020c20011046200028021020011046200028021420011030200110021a0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38008200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780080c020b41fb80080c010b41ff80080b41041013210241010b210120002002360204200020013602000b1a00200020012003200210144504400f0b4183810841131000000b0e01017f104722004200101620000b0d00200020012002103f10181a0b2c01017f41968108411b103f2203200010191a200341a58008410310011a20032001200210011a20031003000b3901017f2000280208200028020422046b2002490440200341e48008410f106e000b2000280200200420012002106b2000200220046a3602040b2801017f2000280200220241204f0440107f000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a41042001106f200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5701037f230041106b22022400200241046a20014101107e20022802082103200228020441014604402003200228020c107c000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001106f20022d000f200241106a24000b0a0020004104411010760b5601017f230041106b22032400027f2000450440410021002003410c6a0c010b2003200136020c200020026c2100200341086a0b20003602000240200328020c450d002003280208450d001051000b200341106a24000b0a0020004101410110760b0a00200004401051000b0b1500200028021020002802141077200028020410780b140020004180808080784704402000200110770b0b980202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c2105200641186a0b200536020020042102027f200628021c04402006280218450440200641106a2004200310c10120062802100c020b1051000b200641086a2004200310c20120062802080b2205450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0e002000044010c001000b107f000b5e01027f230041106b22032400200341046a20024100107e20032802082104200328020441014604402004200328020c107c000b200328020c2001200210c4012101200020023602082000200136020420002004360200200341106a24000b970101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f2002044020034101200110c10120032802000c010b200341086a4101200110c20120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b060010c001000b0800101a410010630b2c01017f230041206b22002400101a410110632000410041b281084101106020004120100b200041206a24000b4b01027f101a41011063230041106b22002400200041086a41001042200028020c41800147044041b18108410141fb820841121038000b2000280208200041106a2400418001100b1051000b3801027f230041106b22002400101a41011063200041086a105f2000280208200028020c2201100b2001ad101b20011078200041106a24000b3a01027f230041106b22002400101a41011063200041086a410010582000280208200028020c2201100b2001ad101b20011078200041106a24000b3c01047f230041106b22002400101a410110632000105c20002802002000280204220220002802082203100b2003ad101b20021077200041106a24000b4001047f230041106b22002400101a41011063200041b18108105e20002802002000280204220220002802082203100b2003ad101b20021077200041106a24000b3e01027f230041106b22002400101a41011063200041086a41b18108410110592000280208200028020c2201100b2001ad101b20011078200041106a24000bac0101067f230041106b22002400101a1065106420004100360200200041046a2102230041106b22012400027f4100200041b88108104f2204450d001a41012000280200419c86082802004e0d001a200141086a200041b881084101104b1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a240020002802001062200028020422010440200120002802081049000b200041106a24000b4301027f101a41011063230041106b22012400200141046a410010324180042100034020000440200141046a41ba8108410410351a200041016b21000c010b0b1051000b2301017f101a41011063230041306b22002400200041086a41b68108410210311051000bcf0402097f017e230041206b22022400101a1065106420024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a21040240024003402005280200419c8608280200480440200541b981084101104b100722094280808080087d42ffffffff6f580d022004200541b981084101104b104d200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a104e0c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41b98108410141ac830841121038000b20022802041062200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a104e200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b1075200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100b200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b20051075200241206a24000b0b0b3101027f230041306b22002400101a41011063200041086a220141b68108410210572001103920011079200041306a24000b880201087f230041106b22012400101a41011063200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41c0810841021056210720002802082003460440200041086a1050200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001048200441046a21040c010b0b200010021a2001280204410441041076200141106a24000b960201087f230041106b22012400101a41011063200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41bf8108410110561047220710091a20002802082003460440200041086a1050200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010472204200320056a280200101d1a200420001048200541046a21050c010b0b200010021a2001280204410441041076200141106a24000b890201087f230041206b22022400101a106510642002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c2005280200419c8608280200480440200541b98108104f210720002802042001460440200041046a1050200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106220022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041076200241206a24000bfe0101087f230041106b22002400101a106510642000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c2007280200419c8608280200480440200741b981084101104b104a210520012802042002460440200141046a1050200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10622000280208410274210320002802042105034020032006470440200520066a280200100c200641046a21060c010b0b2000280200410441041076200041106a24000b810101067f230041206b22002400101a4101106320001052106a024020002802004101710440200041086a200028020410690c010b106c2101106c2102106c2103106c2104106c21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b4301037f230041206b22002400101a41011063200041f6820841051059200041086a2201200028020020002802042202101310692001106820021078200041206a24000b3d01027f230041106b22002400101a41011063200041086a10522201106a2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011063200041086a1052106a2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051063105221014101104a21034102104a21044103104a21054104104a2106200041086a2001106a024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106c2101106c21020b200120021067200041106a24000b6c01067f230041106b22002400101a41031063105221014101104a21034102104a2104200041086a2001106a024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106c2101106c21020b200120021067200041106a24000b5201047f230041106b22002400101a41031063105221014101104a21024102104a2103200041086a2001106a2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b890101087f230041106b22002400101a41041063105221014101104a21044102104a2105200041086a41031058200028020c21022000280208210620002001106a024020002802004101710440200028020421074200101022014200101022032007200420052006200210221a0c010b106c2101106c21030b20012003106720021078200041106a24000b7901067f230041106b22002400101a4102106310522101200041086a41011058200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210231a0c010b106c2101106c21030b20012003106720021078200041106a24000b970101057f230041206b22002400101a41031063105221014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100b20011078200041206a24000b940101057f230041206b22002400101a41031063105221014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100b20011078200041206a24000b7901067f230041106b22002400101a4102106310522101200041086a41011058200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210261a0c010b106c2101106c21030b20012003106720021078200041106a24000b7901067f230041106b22002400101a4102106310522101200041086a41011058200028020c21022000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220320052004200210271a0c010b106c2101106c21030b20012003106720021078200041106a24000b990101057f230041206b22002400101a41011063200041186a1052106a024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106c2102106c2103200041106a4100103720002802142104200028021021010b2002100c2003100c20012004100b20041078200041206a24000b3201027f101a4100106310472200102910472201102a41918208410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106341828208410f102e000b2f01027f230041106b22002400101a41011063200041086a105f2000280208200028020c2200103f20001078103e000b3801037f230041106b22002400101a41011063200041046a41d48108105e20002802082201200028020c103f200028020420011077103e000b2f01017f230041106b22002400101a41011063200041086a41d48108410110592000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021063200041046a1054027f0240410110082204420158044041002004a741016b0d021a0c010b41d08108410441ac830841121038000b41010b45044041d5810841161049000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041eb8108200320011b2201360208200041046a106620022001107a200041106a24000b6801057f230041106b22002400101a41011063200041046a220310542000280208210120004117200028020c200028020422024180808080784622041b36020c200041eb8108200120041b2201360208200020023602042003106620022001107a200041106a24000b4f01037f230041106b22002400101a41011063200041046a10542000280204220141808080807846044041eb81084117102e000b20002802082202200028020c100b200120021077200041106a24000b3801027f230041106b22002400101a41011063200041086a410010582000280208200028020c2201103f10021a20011078200041106a24000b3601037f230041106b22002400101a41011063200041086a105f2000280208200028020c2201103f2001107810021a200041106a24000b4301037f230041106b22002400101a41021063410010402101200041086a4101105820012000280208200028020c220210151a200110021a20021078200041106a24000b4301037f230041106b22002400101a41021063410010402101200041086a4101105820012000280208200028020c220210011a200110021a20021078200041106a24000b7e01067f230041106b22012400101a41031063410010402104410141c582084111105d2102410241bc82084109105d210320022004100d22004b200220036a20004b72450440200141086a20031037200128020c210020012802082105200304402004200220052000106b0b20052000100b200010780b200141106a24000b5c01037f230041106b22002400101a41031063410010402102410141b782084105105d2101200041086a4102105820022001200028020c22012000280208102c044041d6820841131049000b200210021a20011078200041106a24000b2d01017f230041206b22002400101a41011063200041b282084105106120004120103f10021a200041206a24000b5301027f230041206b22002400101a41001063200041086a41c383084106103f10451043200041146a2000280208200028020c107220002802182201200028021c100b200028021420011077200041206a24000b9e03010b7f230041406a22002400101a41001063200041c983084104103f220210442000410036021c412021010340200104402000411c6a2000200210741070200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100b200041406b24000f0b200241fb82084112106e000b200241808008410e106e000bfe0201067f23004180016b22002400101a41001063200041d4006a220241aa82084108103f2201104402400240200028025c2000280258460d00024002400240200220011074220441ff01710e020201000b2001418d8308410d106e000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a41202001106f200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100b0b20004180016a24000f0b200141808008410e106e000b1d00101a4100106341aa82084108103f416710171a4167100d45ad101c0ba30302077f017e230041e0006b22002400101a41001063200041c4006a220241be83084105103f22011044200041003b01102002200041106a220341022001106f20002f01102104200041d0006a20022001107110732002200028025420002802582001106f2002200110742105200041c4006a200110712106200042003703102002200341082001106f20002903102107200041086a200041c4006a200110711037200220002802082202200028020c22032001106f200028024c2000280248470440200141808008410e106e000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a2201103920011079200041e0006a24000b4001027f230041106b22002400101a41011063200041046a105c41c383084106103f20002802082201200028020c106d200028020420011077200041106a24000b3201017f230041206b22002400101a41011063200041b381084103106141c983084104103f20004120106d200041206a24000bbd0201087f230041d0006b22002400101a10651064200041003602282000412f6a230041306b220124002001200041286a2204280200419c860828020048047f200141106a200441aa82084108104b41aa82084108104c41000541010b3a000f2001410f6a412110c4011a200141306a240020002802281062200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f41aa82084108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106d0b200041d0006a24000b7e01047f230041306b22002400101a41011063200041086a220241b381084103105741be83084105103f103a210120002f01282001103b200028021c20002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a20021079200041306a24000bc30101017f23004180016b22002400101a41021063200041406b410041c4810841021060200041e0006a410141c2810841021060200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10c30145ad101c20004180016a24000b3301017f230041206b22002400101a410110632000410041b2810841011060200041cd850810c30145ad101c200041206a24000b3d01027f230041106b22002400101a41011063200041086a410041c881084103105d10372000280208200028020c2201100b20011078200041106a24000b7401037f230041206b22002400101a41021063200041086a41001058200028020c21012000410110582000200028020436021c20002001360214410c210103402001417c460440024020024100480d0010bb01000b05200041106a20016a28020020026a2102200141086b21010c010b0b107f000b05001051000b6701047f230041106b22002400101a41021063200041086a105f20002802082102200028020c210102402001410141c681084102105d22034b044020012003480d0110bb01000b20022001100b41014100100b2001107841001078200041106a24000f0b107f000bfe0301087f230041206b22022400101a41001063200241146a220141cb81084105107d024020022802142206200228021c22046b41e3004d0440200241086a2001200441e40041014101107b20022802082201418180808078470d0120022802142106200228021c21040b024041002002280218220720046a22006b410371220320006a220120004d0d0020030440200321050340200041003a0000200041016a2100200541016b22050d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002001470d000b0b200141e40020036b2203417c716a220020014b0440034020014100360200200141046a22012000490d000b0b024020002003410371220320006a22054f0d002003220104400340200041003a0000200041016a2100200141016b22010d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002005470d000b0b2007200441e4006a100b200620071077200241206a24000f0b2001200228020c107c000b3701017f230041106b22002400101a41001063200041046a41be81084101107d2000280204200028020810774201101c200041106a24000b02000b0b0041ed8508410e1000000b1800200204401051000b20004100360204200020013602000b3801017f230041106b22032400200341086a2001200210c101200328020c21012000200328020836020020002001360204200341106a24000b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b8607010c7f230041106b21070240200222054110490440200021020c010b024020002000410020006b41037122066a22044f0d00200021022001210320060440200621080340200220032d00003a0000200341016a2103200241016a2102200841016b22080d000b0b200641016b4107490d000340200220032d00003a0000200241016a200341016a2d00003a0000200241026a200341026a2d00003a0000200241036a200341036a2d00003a0000200241046a200341046a2d00003a0000200241056a200341056a2d00003a0000200241066a200341066a2d00003a0000200241076a200341076a2d00003a0000200341086a2103200241086a22022004470d000b0b2004200520066b220d417c71220e6a21020240200120066a22034103712201450440200220044d0d0120032101034020042001280200360200200141046a2101200441046a22042002490d000b0c010b410021052007410036020c2007410c6a2001722106410420016b22084101710440200620032d00003a0000410121050b20084102710440200520066a200320056a2f01003b01000b200320016b210520014103742108200728020c210b02402002200441046a4d0440200421060c010b410020086b411871210a03402004200b200876200541046a2205280200220b200a7472360200200441086a210c200441046a220621042002200c4b0d000b0b41002104200741003a0008200741003a0006027f20014101460440410021014100210a200741086a0c010b200541056a2d00002007200541046a2d000022013a0008410874210a41022109200741066a0b210c20062003410171047f200c200541046a20096a2d00003a000020072d0006411074210420072d00080520010b41ff01712004200a7272410020086b41187174200b200876723602000b200d41037121052003200e6a21010b02402002200220056a22044f0d002005410771220304400340200220012d00003a0000200141016a2101200241016a2102200341016b22030d000b0b200541016b4107490d000340200220012d00003a0000200241016a200141016a2d00003a0000200241026a200141026a2d00003a0000200241036a200141036a2d00003a0000200241046a200141046a2d00003a0000200241056a200141056a2d00003a0000200241066a200141066a2d00003a0000200241076a200141076a2d00003a0000200141086a2101200241086a22022004470d000b0b20000b0bcb050400418080080bcd04696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f727470323234703235367033383470353231736c696365206f7574206f6620626f756e647373746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c62626148786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f753861646472010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100418f85080b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041ed85080b2970616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e20666f7262696464656e00419886080b0438ffffff", "report": { "imports": [ "addEC", @@ -1164,12 +1164,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/alloc-mem-fail.wasm", - "size": 17651, + "size": 17984, "hasAllocator": true, "hasPanic": "without message" } diff --git a/test/features/alloc-features/output/alloc-mem-leaking.mxsc.json b/test/features/alloc-features/output/alloc-mem-leaking.mxsc.json index f4207da0a..fe8ed0098 100644 --- a/test/features/alloc-features/output/alloc-mem-leaking.mxsc.json +++ b/test/features/alloc-features/output/alloc-mem-leaking.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "alloc-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -1112,7 +1112,7 @@ } } }, - "code": "0061736d010000000189011560000060027f7f0060027f7f017f60017f0060037f7f7f0060037f7f7f017f60017f017f60047f7f7f7f017f6000017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000303656e76126d427566666572476574417267756d656e74000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000203656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e760f6765744e756d417267756d656e7473000803656e7614626967496e7446696e697368556e7369676e6564000303656e760666696e697368000103656e760a6d4275666665724e6577000803656e76146d427566666572436f707942797465536c696365000703656e76106d4275666665724765744c656e677468000603656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000203656e76136d42756666657247657442797465536c696365000703656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d427566666572417070656e64000203656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000703656e76136d61727368616c436f6d707265737365644543000703656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000703656e760d6d616e6167656443616c6c6572000303656e76136d616e616765644f776e657241646472657373000303656e76096d4275666665724571000203656e76136d42756666657253657442797465536c696365000703656e760f6d42756666657247657442797465730002039901970101040104010d0905050109030801011303020601010101060108010106050309020101030104040104090805050201030403050103030000010303010107080404090102040102030401010200140107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000004000000090405010205030100030616037f01418080080b7f0041fc85080b7f00418086080b07fa0a44066d656d6f7279020004696e6974007e096563686f5f68323536007f136563686f5f626f7865645f61727261795f7538008001106563686f5f626f7865645f62797465730081010d6563686f5f736c6963655f75380082010b6563686f5f7665635f75380083010b6563686f5f737472696e67008401086563686f5f737472008501176563686f5f6173796e635f726573756c745f656d7074790086011b6563686f5f6c617267655f626f7865645f627974655f6172726179008701186563686f5f626f7865645f7365725f6578616d706c655f31008801176563686f5f6d756c74695f76616c75655f7475706c6573008901126563686f5f7365725f6578616d706c655f31008a011a6563686f5f7665635f6f665f6d616e616765645f627566666572008b01106563686f5f6269675f696e745f766563008c010f6563686f5f7661726167735f753332008d01146563686f5f7661726167735f6269675f75696e74008e0112636f6d707574655f6765745f76616c756573008f0111636f6d707574655f6372656174655f656300900115636f6d707574655f6765745f65635f6c656e67746800910120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680092010e636f6d707574655f65635f61646400930111636f6d707574655f65635f646f75626c6500940116636f6d707574655f69735f6f6e5f63757276655f656300950113636f6d707574655f7363616c61725f6d756c7400960118636f6d707574655f7363616c61725f626173655f6d756c7400970112636f6d707574655f6d61727368616c5f65630098011d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300990114636f6d707574655f756e6d61727368616c5f6563009a011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563009b0117636f6d707574655f67656e65726174655f6b65795f6563009c01116f6e6c795f6f776e65725f6c6567616379009d010f72657475726e5f73635f6572726f72009e0115726573756c745f6572725f66726f6d5f6279746573009f0116726573756c745f6572725f66726f6d5f737472696e6700a00113726573756c745f6572725f66726f6d5f73747200a1010b726573756c745f6563686f00a2010d726573756c745f6563686f5f3200a3010d726573756c745f6563686f5f3300a401126d6275666665725f66726f6d5f736c69636500a501186d6275666665725f66726f6d5f626f7865645f627974657300a601116d6275666665725f6f766572777269746500a701146d6275666665725f617070656e645f627974657300a801126d6275666665725f6c6f61645f736c69636500a901116d6275666665725f7365745f736c69636500aa01146d616e616765645f616464726573735f66726f6d00ab010b6c6f61645f7665635f753800ac01096c6f61645f6164647200ad010d6c6f61645f6f70745f6164647200ae011169735f656d7074795f6f70745f6164647200af010a6c6f61645f7365725f3100b0010c73746f72655f7665635f753800b1010a73746f72655f6164647200b2010e73746f72655f6f70745f6164647200b3010b73746f72655f7365725f3100b4010c636f6d706172655f6832353600b5010c683235365f69735f7a65726f00b60111626f7865645f62797465735f7a65726f7300b70114626f7865645f62797465735f636f6e6361745f3200b80111626f7865645f62797465735f73706c697400ba01107665635f636f6e6361745f636f6e737400bb0119616c6c6f635f776974685f6c65616b696e675f6d656d6f727900bd010863616c6c4261636b00be010c6563686f5f7374725f626f7800850109726573756c745f6f6b007e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040ac39a0197010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808008410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3001017f20002802002000280204220520012002106b04402003200441e48008410f1038000b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361073200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011073200241086a2003105520002002290308370300200241206a24000b2e01017f418e80084117103f22042000200110011a200441a58008410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104722022000200110151a20020b0d0020001047220010041a20000b190020002001100f36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100f22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b0a0020002001104510410b0d0020001047220010171a20000b1301017f10472202200010051a2002200110480b1901017f41e8850841e8850828020041016b220036020020000b5101027f230041106b2202240020022000100f220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010472200100620000b2f01017f2000280200220341f885082802004e04402001200241a8800841111038000b2000200341016a36020020030b4301017f230041106b22012400200141086a20002000280200410141044104107b200128020822004181808080784704402000200128020c107c000b200141106a24000b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351070200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341e7820841121038000b2002200341808008410e1038000b1000200020014101104b2001410110590b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1072200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a20002000280200410141044110107b200228020822044181808080784704402004200228020c107c000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41a081084103103541ff01710e020201000b41a08108410341f98208410d1038000b200141106a2202200141046a41a08108410310342001411c6a20021052200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41a0810841034186830841121038000b41a08108410341808008410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541b983086a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b3401027f230041206b22032400200341146a2204200120021054200341086a2004105520002003290308370300200341206a24000b5901017f230041206b2203240020034100104f2003410c6a20031052200328020c418080808078470440200120024186830841121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b6101027f024020012802002203200128020822024b044002402002450440410121030c010b2001280204200341012002107d2203450d020b20012002360200200120033602040b20002002360204200020012802043602000f0b41012002107c000b0c002000410020012002104d0b0c002000200120022003104d0b0c00410041d58208410d10590b2501017e20001009220342ffffffff0f5804402003a70f0b2001200241808008410e1038000b4201037f2000200120021036210320002802042104100d21052000280200200420032005100e04402001200241e48008410f1038000b2000200320046a36020420050b1b0041f485082d00001a2001200010792201450440107a000b20010b0a0020002001410110540b080020004100104f0b0a0020002001200210310b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b2401017e2000100922034280808080105a04402001200241808008410e1038000b2003a70b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b190041f8850828020020004c04400f0b41b9800841121000000b1400100a20004604400f0b41cb800841191000000b190041f8850828020041004e04400f0b41a8800841111000000b0b0041f88508100a3602000b0a002000100b2001100b0b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100c0b4301017f103a2101200028020020011046200028020420011046200028020820011046200028020c20011046200028021020011046200028021420011030200110021a0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38008200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780080c020b41fb80080c010b41ff80080b41041013210241010b210120002002360204200020013602000b0f00200020012003200210144100470b0e01017f104722004200101620000b0d00200020012002103f10181a0b2c01017f41838108411b103f2203200010191a200341a58008410310011a20032001200210011a20031003000b2e01017f20002802002000280204220420012002106b0440200341e48008410f106e000b2000200220046a3602040b2801017f2000280200220241204f0440107a000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a41042001106f200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5801037f230041106b22022400200241046a2001410110bc0120022802082103200228020441014604402003200228020c107c000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001106f20022d000f200241106a24000b0a0020004104411010760b3b01017f230041106b2103027f20004504402003410c6a210141000c010b2003200136020c200341086a2101200020026c0b2100200120003602000b0a0020004101410110760b140020004180808080784704402000200110770b0b8b0101027f41ec850828020022022000702203044041ec8508200020026a20036b22023602000b41ec8508200120026a220041f085082802004b047f2001411076200141ffff03714100476a22024000210041f08508280200210341f08508200020026a41107436020041ec85082802002000411074220020002003461b220220016a0520000b36020020020b060010bf01000bae0202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c210520012802042108200641186a0b2005360200027f200628021c044020062802182202450440200641106a20042003410010c00120062802100c020b2008200220042003107d0c010b200641086a2004200310c10120062802080b2105200421022005450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0d0020000440107a000b107a000b2100200220031079220204402002200020032001200120034b1b10c2011a0b20020b0800101a410010630b2c01017f230041206b22002400101a4101106320004100419f81084101105720004120100c200041206a24000b4801027f101a41011063230041106b22002400200041086a41001042200028020c418001470440419e8108410141e7820841121038000b2000280208200041106a2400418001100c0b3401027f230041106b22002400101a41011063200041086a105f2000280208200028020c2201100c2001ad101b200041106a24000b3601027f230041106b22002400101a41011063200041086a410010612000280208200028020c2201100c2001ad101b200041106a24000b3c01047f230041106b22002400101a410110632000105d20002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b4001047f230041106b22002400101a410110632000419e8108105c20002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b3a01027f230041106b22002400101a41011063200041086a419e8108410110532000280208200028020c2201100c2001ad101b200041106a24000bac0101067f230041106b22002400101a1065106420004100360200200041046a2102230041106b22012400027f4100200041a58108104e2204450d001a4101200028020041f885082802004e0d001a200141086a200041a581084101104b1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a240020002802001062200028020422010440200120002802081049000b200041106a24000ba32a0291017f017e101a41011063230041b0066b22002400200041001032200041b0026a21024104210103402001418404470440200041ac026a20016a200041a78108410410353a0000200141016a21010c010b0b20004180043602ac0220002802a406210320002902a806219101200028009d0621042000280196062105200028008f0621062000280288062107200028008106210820002801fa05210920002800f305210a20002802ec05210b20002800e505210c20002801de05210d20002800d705210e20002802d005210f20002800c905211020002801c205211120002800bb05211220002802b405211320002800ad05211420002801a6052115200028009f05211620002802980521172000280091052118200028018a052119200028008305211a20002802fc04211b20002800f504211c20002801ee04211d20002800e704211e20002802e004211f20002800d904212020002801d204212120002800cb04212220002802c404212320002800bd04212420002801b604212520002800af04212620002802a804212720002800a1042128200028019a042129200028009304212a200028028c04212b200028008504212c20002801fe03212d20002800f703212e20002802f003212f20002800e903213020002801e203213120002800db03213220002802d403213320002800cd03213420002801c603213520002800bf03213620002802b803213720002800b103213820002801aa03213920002800a303213a200028029c03213b200028009503213c200028018e03213d200028008703213e200028028003213f20002800f902214020002801f202214120002800eb02214220002802e402214320002800dd02214420002801d602214520002800cf02214620002802c802214720002800c102214820002801ba02214920002800b302214a200041aa026a224b200241026a2d00003a0000200041a2026a224c200041c0026a2d00003a00002000419e026a224d200041c7026a2d00003a00002000419a026a224e200041ce026a2d00003a0000200020022f00003b01a802200020002f00b7023b01a4022000200041b9026a2d00003a00a602200020002f01be023b01a002200020002f00c5023b019c02200020002f01cc023b01980220004196026a2202200041d5026a2d00003a000020004192026a224f200041dc026a2d00003a00002000418e026a2250200041e3026a2d00003a00002000418a026a2251200041ea026a2d00003a000020004186026a2252200041f1026a2d00003a0000200020002f00d3023b019402200020002f01da023b019002200020002f00e1023b018c02200020002f01e8023b018802200020002f00ef023b01840220004182026a2253200041f8026a2d00003a0000200041fe016a2254200041ff026a2d00003a0000200041fa016a225520004186036a2d00003a0000200041f6016a22562000418d036a2d00003a0000200041f2016a225720004194036a2d00003a0000200020002f01f6023b018002200020002f00fd023b01fc01200020002f0184033b01f801200020002f008b033b01f401200020002f0192033b01f001200041ee016a22582000419b036a2d00003a0000200020002f0099033b01ec01200041ea016a2259200041a2036a2d00003a0000200020002f01a0033b01e801200041e6016a225a200041a9036a2d00003a0000200020002f00a7033b01e401200041e2016a225b200041b0036a2d00003a0000200020002f01ae033b01e001200041de016a225c200041b7036a2d00003a0000200020002f00b5033b01dc01200041da016a225d200041be036a2d00003a0000200020002f01bc033b01d801200041d6016a225e200041c5036a2d00003a0000200020002f00c3033b01d401200041d2016a225f200041cc036a2d00003a0000200020002f01ca033b01d001200041ce016a2260200041d3036a2d00003a0000200020002f00d1033b01cc01200041ca016a2261200041da036a2d00003a0000200020002f01d8033b01c801200041c6016a2262200041e1036a2d00003a0000200020002f00df033b01c401200041c2016a2263200041e8036a2d00003a0000200020002f01e6033b01c001200041be016a2264200041ef036a2d00003a0000200020002f00ed033b01bc01200041ba016a2265200041f6036a2d00003a0000200020002f01f4033b01b801200041b6016a2266200041fd036a2d00003a0000200020002f00fb033b01b401200041b2016a226720004184046a2d00003a0000200020002f0182043b01b001200041ae016a22682000418b046a2d00003a0000200020002f0089043b01ac01200041aa016a226920004192046a2d00003a0000200020002f0190043b01a801200041a6016a226a20004199046a2d00003a0000200020002f0097043b01a401200041a2016a226b200041a0046a2d00003a0000200020002f019e043b01a0012000419e016a226c200041a7046a2d00003a0000200020002f00a5043b019c012000419a016a226d200041ae046a2d00003a0000200020002f01ac043b01980120004196016a226e200041b5046a2d00003a0000200020002f00b3043b01940120004192016a226f200041bc046a2d00003a0000200020002f01ba043b0190012000418e016a2270200041c3046a2d00003a0000200020002f00c1043b018c012000418a016a2271200041ca046a2d00003a0000200020002f01c8043b01880120004186016a2272200041d1046a2d00003a0000200020002f00cf043b01840120004182016a2273200041d8046a2d00003a0000200020002f01d6043b018001200041fe006a2274200041df046a2d00003a0000200020002f00dd043b017c200041fa006a2275200041e6046a2d00003a0000200020002f01e4043b0178200041f6006a2276200041ed046a2d00003a0000200020002f00eb043b0174200041f2006a2277200041f4046a2d00003a0000200020002f01f2043b0170200041ee006a2278200041fb046a2d00003a0000200020002f00f9043b016c200041ea006a227920004182056a2d00003a0000200020002f0180053b0168200041e6006a227a20004189056a2d00003a0000200020002f0087053b0164200041e2006a227b20004190056a2d00003a0000200020002f018e053b0160200041de006a227c20004197056a2d00003a0000200020002f0095053b015c200041da006a227d2000419e056a2d00003a0000200020002f019c053b0158200041d6006a227e200041a5056a2d00003a0000200020002f00a3053b0154200041d2006a227f200041ac056a2d00003a0000200020002f01aa053b0150200041ce006a228001200041b3056a2d00003a0000200020002f00b1053b014c200041ca006a228101200041ba056a2d00003a0000200020002f01b8053b0148200041c6006a228201200041c1056a2d00003a0000200020002f00bf053b0144200041c2006a228301200041c8056a2d00003a0000200020002f01c6053b01402000413e6a228401200041cf056a2d00003a0000200020002f00cd053b013c2000413a6a228501200041d6056a2d00003a0000200020002f01d4053b0138200041366a228601200041dd056a2d00003a0000200020002f00db053b0134200041326a228701200041e4056a2d00003a0000200020002f01e2053b01302000412e6a228801200041eb056a2d00003a0000200020002f00e9053b012c2000412a6a228901200041f2056a2d00003a0000200020002f01f0053b0128200041266a228a01200041f9056a2d00003a0000200020002f00f7053b0124200041226a228b0120004180066a2d00003a0000200020002f01fe053b01202000411e6a228c0120004187066a2d00003a0000200020002f0085063b011c2000411a6a228d012000418e066a2d00003a0000200020002f018c063b0118200041166a228e0120004195066a2d00003a0000200020002f0093063b0114200041126a228f012000419c066a2d00003a0000200020002f019a063b01102000410e6a229001200041a3066a2d00003a0000200020002f00a1063b010c4180044101105b2201204a3600032001204936000a20012048360011200141026a204b2d00003a0000200120002f01a8023b0000200120002f01a4023b0007200141096a20002d00a6023a0000200120002f01a0023b000e200141106a204c2d00003a0000200120002f019c023b0015200141176a204d2d00003a0000200120473600182001204636001f200120453600262001204436002d2001411e6a204e2d00003a0000200120002f0198023b001c200141256a20022d00003a0000200120002f0194023b00232001412c6a204f2d00003a0000200120002f0190023b002a200141336a20502d00003a0000200120002f018c023b0031200120433600342001204236003b20012041360042200120403600492001413a6a20512d00003a0000200120002f0188023b0038200141c1006a20522d00003a0000200120002f0184023b003f200141c8006a20532d00003a0000200120002f0180023b0046200141cf006a20542d00003a0000200120002f01fc013b004d2001203f3600502001203e3600572001203d36005e2001203c360065200141d6006a20552d00003a0000200120002f01f8013b0054200141dd006a20562d00003a0000200120002f01f4013b005b200141e4006a20572d00003a0000200120002f01f0013b0062200141eb006a20582d00003a0000200120002f01ec013b00692001203b36006c2001203a3600732001203936007a2001203836008101200141f2006a20592d00003a0000200120002f01e8013b0070200141f9006a205a2d00003a0000200120002f01e4013b007720014180016a205b2d00003a0000200120002f01e0013b007e20014187016a205c2d00003a0000200120002f01dc013b00850120012037360088012001203636008f0120012035360096012001203436009d012001418e016a205d2d00003a0000200120002f01d8013b008c0120014195016a205e2d00003a0000200120002f01d4013b0093012001419c016a205f2d00003a0000200120002f01d0013b009a01200141a3016a20602d00003a0000200120002f01cc013b00a101200120333600a401200120323600ab01200120313600b201200120303600b901200141aa016a20612d00003a0000200120002f01c8013b00a801200141b1016a20622d00003a0000200120002f01c4013b00af01200141b8016a20632d00003a0000200120002f01c0013b00b601200141bf016a20642d00003a0000200120002f01bc013b00bd012001202f3600c0012001202e3600c7012001202d3600ce012001202c3600d501200141c6016a20652d00003a0000200120002f01b8013b00c401200141cd016a20662d00003a0000200120002f01b4013b00cb01200141d4016a20672d00003a0000200120002f01b0013b00d201200141db016a20682d00003a0000200120002f01ac013b00d9012001202b3600dc012001202a3600e301200120293600ea01200120283600f101200141e2016a20692d00003a0000200120002f01a8013b00e001200141e9016a206a2d00003a0000200120002f01a4013b00e701200141f0016a206b2d00003a0000200120002f01a0013b00ee01200141f7016a206c2d00003a0000200120002f019c013b00f501200120273600f801200120263600ff0120012025360086022001202436008d02200141fe016a206d2d00003a0000200120002f0198013b00fc0120014185026a206e2d00003a0000200120002f0194013b0083022001418c026a206f2d00003a0000200120002f0190013b008a0220014193026a20702d00003a0000200120002f018c013b00910220012023360094022001202236009b02200120213600a202200120203600a9022001419a026a20712d00003a0000200120002f0188013b009802200141a1026a20722d00003a0000200120002f0184013b009f02200141a8026a20732d00003a0000200120002f0180013b00a602200141af026a20742d00003a0000200120002f017c3b00ad022001201f3600b0022001201e3600b7022001201d3600be022001201c3600c502200141b6026a20752d00003a0000200120002f01783b00b402200141bd026a20762d00003a0000200120002f01743b00bb02200141c4026a20772d00003a0000200120002f01703b00c202200141cb026a20782d00003a0000200120002f016c3b00c9022001201b3600cc022001201a3600d302200120193600da02200120183600e102200141d2026a20792d00003a0000200120002f01683b00d002200141d9026a207a2d00003a0000200120002f01643b00d702200141e0026a207b2d00003a0000200120002f01603b00de02200141e7026a207c2d00003a0000200120002f015c3b00e502200120173600e802200120163600ef02200120153600f602200120143600fd02200141ee026a207d2d00003a0000200120002f01583b00ec02200141f5026a207e2d00003a0000200120002f01543b00f302200141fc026a207f2d00003a0000200120002f01503b00fa0220014183036a2080012d00003a0000200120002f014c3b00810320012013360084032001201236008b03200120113600920320012010360099032001418a036a2081012d00003a0000200120002f01483b00880320014191036a2082012d00003a0000200120002f01443b008f0320014198036a2083012d00003a0000200120002f01403b0096032001419f036a2084012d00003a0000200120002f013c3b009d032001200f3600a0032001200e3600a7032001200d3600ae032001200c3600b503200141a6036a2085012d00003a0000200120002f01383b00a403200141ad036a2086012d00003a0000200120002f01343b00ab03200141b4036a2087012d00003a0000200120002f01303b00b203200141bb036a2088012d00003a0000200120002f012c3b00b9032001200b3600bc032001200a3600c303200120093600ca03200120083600d103200141c2036a2089012d00003a0000200120002f01283b00c003200141c9036a208a012d00003a0000200120002f01243b00c703200141d0036a208b012d00003a0000200120002f01203b00ce03200141d7036a208c012d00003a0000200120002f011c3b00d503200120073600d803200120063600df03200120053600e603200120043600ed03200141de036a208d012d00003a0000200120002f01183b00dc03200141e5036a208e012d00003a0000200120002f01143b00e303200141ec036a208f012d00003a0000200120002f01103b00ea03200141f3036a2090012d00003a0000200120002f010c3b00f10320012091013700f803200120033600f4032000280208200028020447044041a78108410441808008410e1038000b200041b0066a2400103a2200200141800410011a200010021a0b4901027f101a41011063230041306b22002400200041086a220141a381084102103141284108105b2001412810c201200041306a2400220010392000280210200041146a28020010770bcf0402097f017e230041206b22022400101a1065106420024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a2104024002400340200528020041f88508280200480440200541a681084101104b100722094280808080087d42ffffffff6f580d022004200541a681084101104b104f200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a10500c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41a6810841014198830841121038000b20022802041062200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a1050200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b1075200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100c200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b20051075200241206a24000b0b0b3901027f230041306b22002400101a41011063200041086a220141a381084102105e200110392000280218200028021c1077200041306a24000b880201087f230041106b22012400101a41011063200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ac81084102105a210720002802082003460440200041086a104c200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001048200441046a21040c010b0b200010021a2001280204410441041076200141106a24000b960201087f230041106b22012400101a41011063200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41ab81084101105a1047220710081a20002802082003460440200041086a104c200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010472204200320056a280200101d1a200420001048200541046a21050c010b0b200010021a2001280204410441041076200141106a24000b890201087f230041206b22022400101a106510642002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c200528020041f88508280200480440200541a68108104e210720002802042001460440200041046a104c200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106220022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041076200241206a24000bfe0101087f230041106b22002400101a106510642000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c200728020041f88508280200480440200741a681084101104b104a210520012802042002460440200141046a104c200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10622000280208410274210320002802042105034020032006470440200520066a280200100b200641046a21060c010b0b2000280200410441041076200041106a24000b810101067f230041206b22002400101a4101106320001058106a024020002802004101710440200041086a200028020410690c010b106c2101106c2102106c2103106c2104106c21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b3d01027f230041206b22002400101a41011063200041e2820841051053200041086a2201200028020020002802041013106920011068200041206a24000b3d01027f230041106b22002400101a41011063200041086a10582201106a2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011063200041086a1058106a2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051063105821014101104a21034102104a21044103104a21054104104a2106200041086a2001106a024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106c2101106c21020b200120021066200041106a24000b6c01067f230041106b22002400101a41031063105821014101104a21034102104a2104200041086a2001106a024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106c2101106c21020b200120021066200041106a24000b5201047f230041106b22002400101a41031063105821014101104a21024102104a2103200041086a2001106a2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b850101087f230041106b22002400101a41041063105821014101104a21034102104a2104200041086a41031061200028020c21052000280208210620002001106a024020002802004101710440200028020421074200101022014200101022022007200320042006200510221a0c010b106c2101106c21020b200120021066200041106a24000b7501067f230041106b22002400101a4102106310582101200041086a41011061200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310231a0c010b106c2101106c21020b200120021066200041106a24000b930101057f230041206b22002400101a41031063105821014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b900101057f230041206b22002400101a41031063105821014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b7501067f230041106b22002400101a4102106310582101200041086a41011061200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310261a0c010b106c2101106c21020b200120021066200041106a24000b7501067f230041106b22002400101a4102106310582101200041086a41011061200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310271a0c010b106c2101106c21020b200120021066200041106a24000b950101057f230041206b22002400101a41011063200041186a1058106a024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106c2102106c2103200041106a4100103720002802142104200028021021010b2002100b2003100b20012004100c200041206a24000b3201027f101a4100106310472200102910472201102a41fd8108410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106341ee8108410f102e000b2901017f230041106b22002400101a41011063200041086a105f2000280208200028020c103f103e000b3801037f230041106b22002400101a41011063200041046a41c08108105c20002802082201200028020c103f200028020420011077103e000b2f01017f230041106b22002400101a41011063200041086a41c08108410110532000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021063200041046a1051027f0240410110092204420158044041002004a741016b0d021a0c010b41bc810841044198830841121038000b41010b45044041c1810841161049000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041d78108200320011b2201360208200041046a1067200220011078200041106a24000b6801057f230041106b22002400101a41011063200041046a220310512000280208210120004117200028020c200028020422024180808080784622041b36020c200041d78108200120041b22013602082000200236020420031067200220011078200041106a24000b4f01037f230041106b22002400101a41011063200041046a10512000280204220141808080807846044041d781084117102e000b20002802082202200028020c100c200120021077200041106a24000b3201017f230041106b22002400101a41011063200041086a410010612000280208200028020c103f10021a200041106a24000b3001017f230041106b22002400101a41011063200041086a105f2000280208200028020c103f10021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101106120012000280208200028020c10151a200110021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101106120012000280208200028020c10011a200110021a200041106a24000b5301037f230041106b22002400101a4103106341001040410141b1820841111060200041086a410241a8820841091060103720002802082201200028020c2202106b45044020012002100c0b200041106a24000b5601037f230041106b22002400101a41031063410010402101410141a38208410510602102200041086a4102106120012002200028020c2000280208102c044041c2820841131049000b200110021a200041106a24000b2d01017f230041206b22002400101a410110632000419e82084105105620004120103f10021a200041206a24000b5301027f230041206b22002400101a41001063200041086a41af83084106103f10451043200041146a2000280208200028020c107220002802182201200028021c100c200028021420011077200041206a24000b9e03010b7f230041406a22002400101a41001063200041b583084104103f220210442000410036021c412021010340200104402000411c6a2000200210741070200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100c200041406b24000f0b200241e782084112106e000b200241808008410e106e000bfe0201067f23004180016b22002400101a41001063200041d4006a2202419682084108103f2201104402400240200028025c2000280258460d00024002400240200220011074220441ff01710e020201000b200141f98208410d106e000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a41202001106f200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100c0b20004180016a24000f0b200141808008410e106e000b1d00101a41001063419682084108103f416710171a4167100f45ad101c0ba90302077f017e230041e0006b22002400101a41001063200041c4006a220241aa83084105103f22011044200041003b01102002200041106a220341022001106f20002f01102104200041d0006a20022001107110732002200028025420002802582001106f2002200110742105200041c4006a200110712106200042003703102002200341082001106f20002903102107200041086a200041c4006a200110711037200220002802082202200028020c22032001106f200028024c2000280248470440200141808008410e106e000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a1039200028022020002802241077200041e0006a24000b4001027f230041106b22002400101a41011063200041046a105d41af83084106103f20002802082201200028020c106d200028020420011077200041106a24000b3201017f230041206b22002400101a41011063200041a081084103105641b583084104103f20004120106d200041206a24000bbd0201087f230041d0006b22002400101a10651064200041003602282000412f6a230041306b220124002001200041286a220428020041f8850828020048047f200141106a2004419682084108104b419682084108104d41000541010b3a000f2001410f6a412110c2011a200141306a240020002802281062200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f419682084108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106d0b200041d0006a24000b830101047f230041306b22002400101a41011063200041086a41a081084103105e41aa83084105103f103a210120002f01282001103b200028021c220320002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a200028021820031077200041306a24000bc30101017f23004180016b22002400101a41021063200041406b410041b0810841021057200041e0006a410141ae810841021057200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10c40145ad101c20004180016a24000b3301017f230041206b22002400101a4101106320004100419f810841011057200041b9850810c40145ad101c200041206a24000b3701017f230041106b22002400101a41011063200041086a410041b481084103106010372000280208200028020c100c200041106a24000bc70102067f017e230041206b22002400101a41021063200041086a41001061200029030821062000410110612000200029030037021820002006370210410c210103402001417c460440200241004e044041002101200210b901210503402001411046450440200320056a200041106a20016a2204280200200441046a280200220410c2011a200141086a2101200320046a21030c010b0b20052002100c200041206a24000f0b107a0005200041106a20016a28020020026a2102200141086b21010c010b000b000b100041f485082d00001a4101200010790b890101067f230041106b22012400101a41021063200141086a105f200128020821024101210502400240200128020c2204410141b281084102106022004d0440200421000c010b200420006b22034100480d01200310b9012205200020026a200310c2011a2002200441012000107d21020b20022000100c20052003100c200141106a24000f0b107a000be90101057f230041206b22002400101a4100106341052103200041146a22044105410010bc0120002802182102024020002802144101470440200028021c220141046a41bb81082d00003a0000200141b781082800003600002000410536021c2000200136021820002002360214200241056b41e3004d0440200041086a2004410541e40041014101107b20002802082201418180808078470d0220002802142102200028021c2103200028021821010b200120036a41e40010c3012001200341e4006a100c200220011077200041206a24000f0b2002200028021c107c000b2001200028020c107c000b990101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f20020440200341012001410110c00120032802000c010b200341086a4101200110c10120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b1700101a4100106341044104105b412a3602004201101c0b02000b0b0041d98508410e1000000b4601017f02402002450440200121040c010b41f485082d00001a2001200210792101200304402001450d012001200210c3010b200121040b20002002360204200020043602000b3a01017f230041106b22032400200341086a20012002410010c001200328020c21012000200328020836020020002001360204200341106a24000b8c0501087f024020024110490440200021030c010b024020002000410020006b41037122066a22054f0d00200021032001210420060440200621070340200320042d00003a0000200441016a2104200341016a2103200741016b22070d000b0b200641016b4107490d000340200320042d00003a0000200341016a200441016a2d00003a0000200341026a200441026a2d00003a0000200341036a200441036a2d00003a0000200341046a200441046a2d00003a0000200341056a200441056a2d00003a0000200341066a200441066a2d00003a0000200341076a200441076a2d00003a0000200441086a2104200341086a22032005470d000b0b2005200220066b2207417c7122086a21030240200120066a2204410371450440200320054d0d0120042101034020052001280200360200200141046a2101200541046a22052003490d000b0c010b200320054d0d002004410374220241187121062004417c71220941046a2101410020026b411871210a2009280200210203402005200220067620012802002202200a7472360200200141046a2101200541046a22052003490d000b0b20074103712102200420086a21010b02402003200220036a22064f0d002002410771220404400340200320012d00003a0000200141016a2101200341016a2103200441016b22040d000b0b200241016b4107490d000340200320012d00003a0000200341016a200141016a2d00003a0000200341026a200141026a2d00003a0000200341036a200141036a2d00003a0000200341046a200141046a2d00003a0000200341056a200141056a2d00003a0000200341066a200141066a2d00003a0000200341076a200141076a2d00003a0000200141086a2101200341086a22032006470d000b0b20000bf70201037f200141104f0440024020002000410020006b41037122036a22024f0d0020030440200321040340200041003a0000200041016a2100200441016b22040d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200120036b2201417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200141037121010b02402000200020016a22034f0d002001410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200141016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b0b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b0b9c050400418080080bb904696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f72747032323470323536703338347035323173746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c626261786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f75386164647201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041fb84080b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041d985080b0e70616e6963206f636375727265640041e885080b0438ffffff", + "code": "0061736d010000000189011560000060027f7f0060027f7f017f60017f0060037f7f7f0060037f7f7f017f60017f017f60047f7f7f7f017f60047f7f7f7f006000017f60057f7f7f7f7f017f60017f017e60017e0060057f7f7f7f7f0060017e017f60067f7f7f7f7f7f017f60027f7e0060077f7f7f7f7f7f7f0060077f7f7f7f7f7f7f017f60027e7f0060067f7f7f7f7f7f0002a9082e03656e760b7369676e616c4572726f72000103656e76126d427566666572417070656e644279746573000503656e760d6d42756666657246696e697368000603656e76126d616e616765645369676e616c4572726f72000303656e76126d427566666572476574417267756d656e74000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000b03656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e76156d427566666572546f426967496e745369676e6564000203656e760f6765744e756d417267756d656e7473000903656e7614626967496e7446696e697368556e7369676e6564000303656e760666696e697368000103656e76106d4275666665724765744c656e677468000603656e760a6d4275666665724e6577000903656e76146d427566666572436f707942797465536c696365000703656e7609626967496e744e6577000e03656e7616656c6c6970746963437572766547657456616c756573000f03656e761067657443757276654c656e6774684543000603656e76086372656174654543000203656e76136d42756666657247657442797465536c696365000703656e760f6d4275666665725365744279746573000503656e760e626967496e74536574496e743634001003656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760d6d427566666572417070656e64000203656e760e636865636b4e6f5061796d656e74000003656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e7614736d616c6c496e7446696e6973685369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e7616676574507269764b6579427974654c656e6774684543000603656e76056164644543001103656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e760c7363616c61724d756c744543001203656e76107363616c6172426173654d756c744543000a03656e76096d61727368616c4543000703656e76136d61727368616c436f6d707265737365644543000703656e760b756e6d61727368616c4543000a03656e7615756e6d61727368616c436f6d707265737365644543000a03656e760d67656e65726174654b65794543000703656e760d6d616e6167656443616c6c6572000303656e76136d616e616765644f776e657241646472657373000303656e76096d4275666665724571000203656e76136d42756666657253657442797465536c696365000703656e760f6d42756666657247657442797465730002039901970101040104010d0805050108030901011303020601010101060109010106050302080101040905040401030203010801030405050103030000010303010108090404080102040102030401010200140107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000004000000080402050105030100030616037f01418080080b7f00418c86080b7f00419086080b07fa0a44066d656d6f7279020004696e6974007e096563686f5f68323536007f136563686f5f626f7865645f61727261795f7538008001106563686f5f626f7865645f62797465730081010d6563686f5f736c6963655f75380082010b6563686f5f7665635f75380083010b6563686f5f737472696e67008401086563686f5f737472008501176563686f5f6173796e635f726573756c745f656d7074790086011b6563686f5f6c617267655f626f7865645f627974655f6172726179008701186563686f5f626f7865645f7365725f6578616d706c655f31008801176563686f5f6d756c74695f76616c75655f7475706c6573008901126563686f5f7365725f6578616d706c655f31008a011a6563686f5f7665635f6f665f6d616e616765645f627566666572008b01106563686f5f6269675f696e745f766563008c010f6563686f5f7661726167735f753332008d01146563686f5f7661726167735f6269675f75696e74008e0112636f6d707574655f6765745f76616c756573008f0111636f6d707574655f6372656174655f656300900115636f6d707574655f6765745f65635f6c656e67746800910120636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680092010e636f6d707574655f65635f61646400930111636f6d707574655f65635f646f75626c6500940116636f6d707574655f69735f6f6e5f63757276655f656300950113636f6d707574655f7363616c61725f6d756c7400960118636f6d707574655f7363616c61725f626173655f6d756c7400970112636f6d707574655f6d61727368616c5f65630098011d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300990114636f6d707574655f756e6d61727368616c5f6563009a011f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f6563009b0117636f6d707574655f67656e65726174655f6b65795f6563009c01116f6e6c795f6f776e65725f6c6567616379009d010f72657475726e5f73635f6572726f72009e0115726573756c745f6572725f66726f6d5f6279746573009f0116726573756c745f6572725f66726f6d5f737472696e6700a00113726573756c745f6572725f66726f6d5f73747200a1010b726573756c745f6563686f00a2010d726573756c745f6563686f5f3200a3010d726573756c745f6563686f5f3300a401126d6275666665725f66726f6d5f736c69636500a501186d6275666665725f66726f6d5f626f7865645f627974657300a601116d6275666665725f6f766572777269746500a701146d6275666665725f617070656e645f627974657300a801126d6275666665725f6c6f61645f736c69636500a901116d6275666665725f7365745f736c69636500aa01146d616e616765645f616464726573735f66726f6d00ab010b6c6f61645f7665635f753800ac01096c6f61645f6164647200ad010d6c6f61645f6f70745f6164647200ae011169735f656d7074795f6f70745f6164647200af010a6c6f61645f7365725f3100b0010c73746f72655f7665635f753800b1010a73746f72655f6164647200b2010e73746f72655f6f70745f6164647200b3010b73746f72655f7365725f3100b4010c636f6d706172655f6832353600b5010c683235365f69735f7a65726f00b60111626f7865645f62797465735f7a65726f7300b70114626f7865645f62797465735f636f6e6361745f3200b80111626f7865645f62797465735f73706c697400ba01107665635f636f6e6361745f636f6e737400bb0119616c6c6f635f776974685f6c65616b696e675f6d656d6f727900bd010863616c6c4261636b00be010c6563686f5f7374725f626f7800850109726573756c745f6f6b007e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01040aff9c0197010900200020011000000b110020012002103020022000200110011a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410011a200241106a24000bde0202067f017e230041306b220324002003410c6a220441001032200341003b01182004200341186a2205410220012002103320032f01182106200520042001200210342004200120021035210520042001200210362107200342003703282004200341286a41082001200210332003290328210920032003410c6a200120021036103720042003280200220420032802042208200120021033200328021420032802104704402001200241808008410e1038000b20002003290318370310200020053a00222000200736021c2000200836020420002004360200200041186a200341206a2802003602002000200641087420064180fe0371410876723b01202000200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484370308200341306a24000b0a0020002001104010410b3b01017f2000280208200028020422056b20024904402003200441e48008410f1038000b2000280200200520012002106b2000200220056a3602040b5101017f230041106b22042400200441046a20012002200310361073200120042802082004410c6a2201280200200220031033200041086a200128020036020020002004290204370200200441106a24000b2f01017f230041106b22032400200341003a000f20002003410f6a410120012002103320032d000f200341106a24000b5201017f230041106b220324002003410036020c20002003410c6a4104200120021033200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3201027f230041206b22022400200241146a220320011073200241086a2003105620002002290308370300200241206a24000b2e01017f418e80084117103f22042000200110011a200441a58008410310011a20042002200310011a20041003000b4d01017f103a210120002f01202001103b200028021420002802182001102f200120002d0022103c200028021c2001103020002903082001103d200028020020002802042001102f200110021a0b080041014100103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210011a200241106a24000b2701017f230041106b22022400200220013a000f20002002410f6a410110011a200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810011a200241106a24000b070020001003000b1101017f104722022000200110151a20020b0d0020001047220010041a20000b190020002001100d36020820004100360204200020013602000b3c01017f230041106b220224002001416710041a200241086a41671043200228020c21012000200228020836020020002001360204200241106a24000b4c01047f230041106b22022400200241086a2001100d22041037200228020c210520022802082103200441004a044020012003102d1a0b2000200336020020002005360204200241106a24000b0a0020002001104510410b0d0020001047220010171a20000b1301017f10472202200010051a2002200110480b1901017f41fc850841fc850828020041016b220036020020000b5101027f230041106b2202240020022000100d220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410011a2001200010191a200241106a24000b090020002001102e000b0c00200010472200100620000b2f01017f20002802002203418886082802004e04402001200241a8800841111038000b2000200341016a36020020030b4301017f230041106b22012400200141086a20002000280200410141044104107b200128020822004181808080784704402000200128020c107c000b200141106a24000b1000200020014101104b2001410110530b8d0301097f230041406a220424002004200110322004410036021c412021010340200104402004411c6a20042002200310351070200141016b21010c010b0b0240200428021c411f4b04402004411a6a2201200441226a2d00003a0000200441166a2205200441296a2d00003a0000200441126a2206200441306a2d00003a0000200420042f01203b0118200420042f00273b0114200420042f012e3b0110200428023c21072004280238210820042800232109200428012a210a2004280031210b2004410e6a220c200441376a2d00003a0000200420042f00353b010c20042802082004280204470d01200020042f01183b0000200020042f01143b0007200020042f01103b000e200020042f010c3b00152000200736001c200020083600182000200b3600112000200a36000a20002009360003200041026a20012d00003a0000200041096a20052d00003a0000200041106a20062d00003a0000200041176a200c2d00003a0000200441406b24000f0b2002200341fa820841121038000b2002200341808008410e1038000b2b01017f230041106b22022400200241086a2001104220002002280208200228020c1072200241106a24000b820101037f200028020822032000280200460440230041106b22022400200241086a20002000280200410141044110107b200228020822044181808080784704402004200228020c107c000b200241106a24000b2000200341016a360208200028020420034104746a22002001290200370200200041086a200141086a2902003702000b0c002000410020012002104e0b0c00410041e88208410d10530b2501017e20001008220342ffffffff0f5804402003a70f0b2001200241808008410e1038000b3401027f230041206b22032400200341146a2204200120021055200341086a2004105620002003290308370300200341206a24000b5901017f230041206b2203240020034100104f2003410c6a2003105a200328020c418080808078470440200120024199830841121038000b20002003290210370200200041086a200341186a280200360200200341206a24000b6101027f024020012802002203200128020822024b044002402002450440410121030c010b2001280204200341012002107d2203450d020b20012002360200200120033602040b20002002360204200020012802043602000f0b41012002107c000b080020004100104f0b13002001200010792201450440107a000b20010be90102027f017e230041306b22012400200141046a41001032024002400240200128020c200128020846044041808080807821020c010b4180808080782102024002400240200141046a41b381084103103541ff01710e020201000b41b381084103418c8308410d1038000b200141106a2202200141046a41b38108410310342001411c6a2002105a200128021c418080808078470d0220012902242103200128022021020b200128020c2001280208470d020b2000200337020420002002360200200141306a24000f0b41b3810841034199830841121038000b41b38108410341808008410e1038000bcb0501097f024020012802082204450d00200441076b22024100200220044d1b21092001280204220641036a417c7120066b210a410021020340024002400240200220066a2d00002205c0220841004e0440200a20026b4103710d01200220094f0d020340200220066a220741046a280200200728020072418081828478710d03200241086a22022009490d000b0c020b418002210741012103024002400240027f02400240024002400240024002400240200541cc83086a2d000041026b0e030003010b0b200241016a22052004490d01410021070c090b41002107200241016a22032004490d020c080b200520066a2c000041bf7f4a0d080c060b41002107200241016a220320044f0d06200320066a2c0000210302400240200541e001470440200541ed01460d012008411f6a41ff0171410c490d022008417e71416e470d0420034140480d050c040b200341607141a07f460d040c030b2003419f7f4a0d020c030b20034140480d020c010b200320066a2c000021030240024002400240200541f0016b0e050100000002000b2008410f6a41ff017141024b200341404e720d030c020b200341f0006a41ff017141304f0d020c010b2003418f7f4a0d010b200241026a220320044f0d05200320066a2c000041bf7f4a0d0241002103200241036a220520044f0d06200520066a2c00004140480d044180060c030b4180020c020b41002103200241026a220520044f0d04200520066a2c000041bf7f4c0d020b4180040b2107410121030c020b200541016a21020c040b410021030b2000200236020c2000200129020037020020002003200772360210200041086a200141086a2802003602000f0b200241016a21020c010b200220044f0d000340200220066a2c00004100480d012004200241016a2202470d000b0c020b20022004490d000b0b2000418080808078360200200020012902003702042000410c6a200141086a2802003602000b0c002000200120022003104e0b3501017f230041106b22022400200241086a20011042200228020c21012000200228020836020020002001360204200241106a24000b3501027f230041106b22012400200141086a41001042200128020c21022000200128020836020020002002360204200141106a24000b0a0020002001200210310b5a01047f20002001200210362103024002402000280204220520002802002206100d22044b0d002004200320056a2204490d00200620052003100e2203100f450d010b2001200241e48008410f1038000b2000200436020420030b2401017e2000100822034280808080105a04402001200241808008410e1038000b2003a70b0a0020002001410110550b19004188860828020020004c04400f0b41b9800841121000000b1400100a20004604400f0b41cb800841191000000b19004188860828020041004e04400f0b41a8800841111000000b0b0041888608100a3602000b0a002000100b2001100b0b2a00200028020041808080807846044020002802042000280208102e000b20002802042000280208100c0b4301017f103a2101200028020020011046200028020420011046200028020820011046200028020c20011046200028021020011046200028021420011030200110021a0b5301057f200142001010220242001010220342001010220442001010220542001010220610111a200020011012360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41f38008200141e001460d001a2001418904470440200141800347044041002001418002470d031a41f780080c020b41fb80080c010b41ff80080b41041013210241010b210120002002360204200020013602000b1a00200020012003200210144504400f0b4183810841131000000b0e01017f104722004200101620000b0d00200020012002103f10181a0b2c01017f41968108411b103f2203200010191a200341a58008410310011a20032001200210011a20031003000b3901017f2000280208200028020422046b2002490440200341e48008410f106e000b2000280200200420012002106b2000200220046a3602040b2801017f2000280200220241204f0440107a000b2000200241016a360200200020026a20013a00040b5001017f230041106b220224002002410036020c20002002410c6a41042001106f200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1c00200020023602082000200236020020002001410120021b3602040b5801037f230041106b22022400200241046a2001410110bc0120022802082103200228020441014604402003200228020c107c000b200228020c2104200020013602082000200436020420002003360200200241106a24000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001106f20022d000f200241106a24000b0a0020004104411010760b3b01017f230041106b2103027f20004504402003410c6a210141000c010b2003200136020c200341086a2101200020026c0b2100200120003602000b0a0020004101410110760b140020004180808080784704402000200110770b0b8b0101027f4180860828020022022000702203044041808608200020026a20036b22023602000b41808608200120026a2200418486082802004b047f2001411076200141ffff03714100476a22024000210041848608280200210341848608200020026a411074360200418086082802002000411074220020002003461b220220016a0520000b36020020020b060010bf01000bae0202037f017e230041206b2206240002402002200220036a22034b0440410021020c010b41002102200420056a41016b410020046b71ad2003200128020022084101742207200320074b1b22034108410420054101461b2207200320074b1b2207ad7e2209422088a70d002009a7220341808080807820046b4b0d00027f2008450440410021052006411c6a0c010b2006200436021c200520086c210520012802042108200641186a0b2005360200027f200628021c044020062802182202450440200641106a20042003410010c00120062802100c020b2008200220042003107d0c010b200641086a2004200310c10120062802080b2105200421022005450d00200120073602002001200536020441818080807821020b2000200336020420002002360200200641206a24000b0d0020000440107a000b107a000b2100200220031079220204402002200020032001200120034b1b10c3011a0b20020b0800101a410010630b2c01017f230041206b22002400101a410110632000410041b281084101105b20004120100c200041206a24000b4801027f101a41011063230041106b22002400200041086a41001042200028020c41800147044041b18108410141fa820841121038000b2000280208200041106a2400418001100c0b3401027f230041106b22002400101a41011063200041086a105d2000280208200028020c2201100c2001ad101b200041106a24000b3601027f230041106b22002400101a41011063200041086a4100105c2000280208200028020c2201100c2001ad101b200041106a24000b3c01047f230041106b22002400101a410110632000105720002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b4001047f230041106b22002400101a41011063200041b18108106120002802002000280204220220002802082203100c2003ad101b20021077200041106a24000b3a01027f230041106b22002400101a41011063200041086a41b18108410110542000280208200028020c2201100c2001ad101b200041106a24000bac0101067f230041106b22002400101a1065106420004100360200200041046a2102230041106b22012400027f4100200041b88108104d2204450d001a41012000280200418886082802004e0d001a200141086a200041b881084101104b1042200128020c210320012802080b2105200220043602082002200336020420022005360200200141106a240020002802001062200028020422010440200120002802081049000b200041106a24000ba32a0291017f017e101a41011063230041b0066b22002400200041001032200041b0026a21024104210103402001418404470440200041ac026a20016a200041ba8108410410353a0000200141016a21010c010b0b20004180043602ac0220002802a406210320002902a806219101200028009d0621042000280196062105200028008f0621062000280288062107200028008106210820002801fa05210920002800f305210a20002802ec05210b20002800e505210c20002801de05210d20002800d705210e20002802d005210f20002800c905211020002801c205211120002800bb05211220002802b405211320002800ad05211420002801a6052115200028009f05211620002802980521172000280091052118200028018a052119200028008305211a20002802fc04211b20002800f504211c20002801ee04211d20002800e704211e20002802e004211f20002800d904212020002801d204212120002800cb04212220002802c404212320002800bd04212420002801b604212520002800af04212620002802a804212720002800a1042128200028019a042129200028009304212a200028028c04212b200028008504212c20002801fe03212d20002800f703212e20002802f003212f20002800e903213020002801e203213120002800db03213220002802d403213320002800cd03213420002801c603213520002800bf03213620002802b803213720002800b103213820002801aa03213920002800a303213a200028029c03213b200028009503213c200028018e03213d200028008703213e200028028003213f20002800f902214020002801f202214120002800eb02214220002802e402214320002800dd02214420002801d602214520002800cf02214620002802c802214720002800c102214820002801ba02214920002800b302214a200041aa026a224b200241026a2d00003a0000200041a2026a224c200041c0026a2d00003a00002000419e026a224d200041c7026a2d00003a00002000419a026a224e200041ce026a2d00003a0000200020022f00003b01a802200020002f00b7023b01a4022000200041b9026a2d00003a00a602200020002f01be023b01a002200020002f00c5023b019c02200020002f01cc023b01980220004196026a2202200041d5026a2d00003a000020004192026a224f200041dc026a2d00003a00002000418e026a2250200041e3026a2d00003a00002000418a026a2251200041ea026a2d00003a000020004186026a2252200041f1026a2d00003a0000200020002f00d3023b019402200020002f01da023b019002200020002f00e1023b018c02200020002f01e8023b018802200020002f00ef023b01840220004182026a2253200041f8026a2d00003a0000200041fe016a2254200041ff026a2d00003a0000200041fa016a225520004186036a2d00003a0000200041f6016a22562000418d036a2d00003a0000200041f2016a225720004194036a2d00003a0000200020002f01f6023b018002200020002f00fd023b01fc01200020002f0184033b01f801200020002f008b033b01f401200020002f0192033b01f001200041ee016a22582000419b036a2d00003a0000200020002f0099033b01ec01200041ea016a2259200041a2036a2d00003a0000200020002f01a0033b01e801200041e6016a225a200041a9036a2d00003a0000200020002f00a7033b01e401200041e2016a225b200041b0036a2d00003a0000200020002f01ae033b01e001200041de016a225c200041b7036a2d00003a0000200020002f00b5033b01dc01200041da016a225d200041be036a2d00003a0000200020002f01bc033b01d801200041d6016a225e200041c5036a2d00003a0000200020002f00c3033b01d401200041d2016a225f200041cc036a2d00003a0000200020002f01ca033b01d001200041ce016a2260200041d3036a2d00003a0000200020002f00d1033b01cc01200041ca016a2261200041da036a2d00003a0000200020002f01d8033b01c801200041c6016a2262200041e1036a2d00003a0000200020002f00df033b01c401200041c2016a2263200041e8036a2d00003a0000200020002f01e6033b01c001200041be016a2264200041ef036a2d00003a0000200020002f00ed033b01bc01200041ba016a2265200041f6036a2d00003a0000200020002f01f4033b01b801200041b6016a2266200041fd036a2d00003a0000200020002f00fb033b01b401200041b2016a226720004184046a2d00003a0000200020002f0182043b01b001200041ae016a22682000418b046a2d00003a0000200020002f0089043b01ac01200041aa016a226920004192046a2d00003a0000200020002f0190043b01a801200041a6016a226a20004199046a2d00003a0000200020002f0097043b01a401200041a2016a226b200041a0046a2d00003a0000200020002f019e043b01a0012000419e016a226c200041a7046a2d00003a0000200020002f00a5043b019c012000419a016a226d200041ae046a2d00003a0000200020002f01ac043b01980120004196016a226e200041b5046a2d00003a0000200020002f00b3043b01940120004192016a226f200041bc046a2d00003a0000200020002f01ba043b0190012000418e016a2270200041c3046a2d00003a0000200020002f00c1043b018c012000418a016a2271200041ca046a2d00003a0000200020002f01c8043b01880120004186016a2272200041d1046a2d00003a0000200020002f00cf043b01840120004182016a2273200041d8046a2d00003a0000200020002f01d6043b018001200041fe006a2274200041df046a2d00003a0000200020002f00dd043b017c200041fa006a2275200041e6046a2d00003a0000200020002f01e4043b0178200041f6006a2276200041ed046a2d00003a0000200020002f00eb043b0174200041f2006a2277200041f4046a2d00003a0000200020002f01f2043b0170200041ee006a2278200041fb046a2d00003a0000200020002f00f9043b016c200041ea006a227920004182056a2d00003a0000200020002f0180053b0168200041e6006a227a20004189056a2d00003a0000200020002f0087053b0164200041e2006a227b20004190056a2d00003a0000200020002f018e053b0160200041de006a227c20004197056a2d00003a0000200020002f0095053b015c200041da006a227d2000419e056a2d00003a0000200020002f019c053b0158200041d6006a227e200041a5056a2d00003a0000200020002f00a3053b0154200041d2006a227f200041ac056a2d00003a0000200020002f01aa053b0150200041ce006a228001200041b3056a2d00003a0000200020002f00b1053b014c200041ca006a228101200041ba056a2d00003a0000200020002f01b8053b0148200041c6006a228201200041c1056a2d00003a0000200020002f00bf053b0144200041c2006a228301200041c8056a2d00003a0000200020002f01c6053b01402000413e6a228401200041cf056a2d00003a0000200020002f00cd053b013c2000413a6a228501200041d6056a2d00003a0000200020002f01d4053b0138200041366a228601200041dd056a2d00003a0000200020002f00db053b0134200041326a228701200041e4056a2d00003a0000200020002f01e2053b01302000412e6a228801200041eb056a2d00003a0000200020002f00e9053b012c2000412a6a228901200041f2056a2d00003a0000200020002f01f0053b0128200041266a228a01200041f9056a2d00003a0000200020002f00f7053b0124200041226a228b0120004180066a2d00003a0000200020002f01fe053b01202000411e6a228c0120004187066a2d00003a0000200020002f0085063b011c2000411a6a228d012000418e066a2d00003a0000200020002f018c063b0118200041166a228e0120004195066a2d00003a0000200020002f0093063b0114200041126a228f012000419c066a2d00003a0000200020002f019a063b01102000410e6a229001200041a3066a2d00003a0000200020002f00a1063b010c418004410110582201204a3600032001204936000a20012048360011200141026a204b2d00003a0000200120002f01a8023b0000200120002f01a4023b0007200141096a20002d00a6023a0000200120002f01a0023b000e200141106a204c2d00003a0000200120002f019c023b0015200141176a204d2d00003a0000200120473600182001204636001f200120453600262001204436002d2001411e6a204e2d00003a0000200120002f0198023b001c200141256a20022d00003a0000200120002f0194023b00232001412c6a204f2d00003a0000200120002f0190023b002a200141336a20502d00003a0000200120002f018c023b0031200120433600342001204236003b20012041360042200120403600492001413a6a20512d00003a0000200120002f0188023b0038200141c1006a20522d00003a0000200120002f0184023b003f200141c8006a20532d00003a0000200120002f0180023b0046200141cf006a20542d00003a0000200120002f01fc013b004d2001203f3600502001203e3600572001203d36005e2001203c360065200141d6006a20552d00003a0000200120002f01f8013b0054200141dd006a20562d00003a0000200120002f01f4013b005b200141e4006a20572d00003a0000200120002f01f0013b0062200141eb006a20582d00003a0000200120002f01ec013b00692001203b36006c2001203a3600732001203936007a2001203836008101200141f2006a20592d00003a0000200120002f01e8013b0070200141f9006a205a2d00003a0000200120002f01e4013b007720014180016a205b2d00003a0000200120002f01e0013b007e20014187016a205c2d00003a0000200120002f01dc013b00850120012037360088012001203636008f0120012035360096012001203436009d012001418e016a205d2d00003a0000200120002f01d8013b008c0120014195016a205e2d00003a0000200120002f01d4013b0093012001419c016a205f2d00003a0000200120002f01d0013b009a01200141a3016a20602d00003a0000200120002f01cc013b00a101200120333600a401200120323600ab01200120313600b201200120303600b901200141aa016a20612d00003a0000200120002f01c8013b00a801200141b1016a20622d00003a0000200120002f01c4013b00af01200141b8016a20632d00003a0000200120002f01c0013b00b601200141bf016a20642d00003a0000200120002f01bc013b00bd012001202f3600c0012001202e3600c7012001202d3600ce012001202c3600d501200141c6016a20652d00003a0000200120002f01b8013b00c401200141cd016a20662d00003a0000200120002f01b4013b00cb01200141d4016a20672d00003a0000200120002f01b0013b00d201200141db016a20682d00003a0000200120002f01ac013b00d9012001202b3600dc012001202a3600e301200120293600ea01200120283600f101200141e2016a20692d00003a0000200120002f01a8013b00e001200141e9016a206a2d00003a0000200120002f01a4013b00e701200141f0016a206b2d00003a0000200120002f01a0013b00ee01200141f7016a206c2d00003a0000200120002f019c013b00f501200120273600f801200120263600ff0120012025360086022001202436008d02200141fe016a206d2d00003a0000200120002f0198013b00fc0120014185026a206e2d00003a0000200120002f0194013b0083022001418c026a206f2d00003a0000200120002f0190013b008a0220014193026a20702d00003a0000200120002f018c013b00910220012023360094022001202236009b02200120213600a202200120203600a9022001419a026a20712d00003a0000200120002f0188013b009802200141a1026a20722d00003a0000200120002f0184013b009f02200141a8026a20732d00003a0000200120002f0180013b00a602200141af026a20742d00003a0000200120002f017c3b00ad022001201f3600b0022001201e3600b7022001201d3600be022001201c3600c502200141b6026a20752d00003a0000200120002f01783b00b402200141bd026a20762d00003a0000200120002f01743b00bb02200141c4026a20772d00003a0000200120002f01703b00c202200141cb026a20782d00003a0000200120002f016c3b00c9022001201b3600cc022001201a3600d302200120193600da02200120183600e102200141d2026a20792d00003a0000200120002f01683b00d002200141d9026a207a2d00003a0000200120002f01643b00d702200141e0026a207b2d00003a0000200120002f01603b00de02200141e7026a207c2d00003a0000200120002f015c3b00e502200120173600e802200120163600ef02200120153600f602200120143600fd02200141ee026a207d2d00003a0000200120002f01583b00ec02200141f5026a207e2d00003a0000200120002f01543b00f302200141fc026a207f2d00003a0000200120002f01503b00fa0220014183036a2080012d00003a0000200120002f014c3b00810320012013360084032001201236008b03200120113600920320012010360099032001418a036a2081012d00003a0000200120002f01483b00880320014191036a2082012d00003a0000200120002f01443b008f0320014198036a2083012d00003a0000200120002f01403b0096032001419f036a2084012d00003a0000200120002f013c3b009d032001200f3600a0032001200e3600a7032001200d3600ae032001200c3600b503200141a6036a2085012d00003a0000200120002f01383b00a403200141ad036a2086012d00003a0000200120002f01343b00ab03200141b4036a2087012d00003a0000200120002f01303b00b203200141bb036a2088012d00003a0000200120002f012c3b00b9032001200b3600bc032001200a3600c303200120093600ca03200120083600d103200141c2036a2089012d00003a0000200120002f01283b00c003200141c9036a208a012d00003a0000200120002f01243b00c703200141d0036a208b012d00003a0000200120002f01203b00ce03200141d7036a208c012d00003a0000200120002f011c3b00d503200120073600d803200120063600df03200120053600e603200120043600ed03200141de036a208d012d00003a0000200120002f01183b00dc03200141e5036a208e012d00003a0000200120002f01143b00e303200141ec036a208f012d00003a0000200120002f01103b00ea03200141f3036a2090012d00003a0000200120002f010c3b00f10320012091013700f803200120033600f4032000280208200028020447044041ba8108410441808008410e1038000b200041b0066a2400103a2200200141800410011a200010021a0b4901027f101a41011063230041306b22002400200041086a220141b68108410210314128410810582001412810c301200041306a2400220010392000280210200041146a28020010770bcf0402097f017e230041206b22022400101a1065106420024100360204200241106a2100200241046a2105230041306b220124002001410036020c20014280808080c000370204200141146a2104024002400340200528020041888608280200480440200541b981084101104b100722094280808080087d42ffffffff6f580d022004200541b981084101104b104f200141286a200141186a290200370300200120093e021020012001290210370320200141046a200141206a10500c010b0b20002001290204370200200041086a2001410c6a280200360200200141306a24000c010b41b98108410141ab830841121038000b20022802041062200228021020022802142104200228021821002002410036020c20024280808080c0003702042004200041047422086a210620042100027f0340200620032008460d011a2000280204220141808080807847044020002802002105200220002902083702182002200136021420022005360210200341106a2103200241046a200241106a1050200041106a21000c010b0b200320046a41106a0b220441086a2100200620046b4104762103034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b1075200228020c22034104742101200228020421052002280208220421000340200104402000340200101c2000280208200028020c100c200141106b2101200041106a21000c0105200441086a2100034020030440200041046b28020020002802001077200341016b2103200041106a21000c010b0b20051075200241206a24000b0b0b3901027f230041306b22002400101a41011063200041086a220141b681084102105e200110392000280218200028021c1077200041306a24000b880201087f230041106b22012400101a41011063200141046a2105230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41bf81084102105f210720002802082003460440200041086a104c200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20052000290208370200200541086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a2100034020022004470440200320046a28020020001048200441046a21040c010b0b200010021a2001280204410441041076200141106a24000b960201087f230041106b22012400101a41011063200141046a2104230041206b220024002000410036021020004280808080c000370208200041146a41001032410421060340200028021c2000280218470440200041146a41be81084101105f1047220710091a20002802082003460440200041086a104c200028020c21060b200220066a20073602002000200341016a2203360210200241046a21020c010b0b20042000290208370200200441086a200041106a280200360200200041206a2400200128020c410274210220012802082103103a210003402002200547044010472204200320056a280200101d1a200420001048200541046a21050c010b0b200010021a2001280204410441041076200141106a24000b890201087f230041206b22022400101a106510642002410036020c200241106a21042002410c6a2105230041106b2200240020004280808080c0003702044104210603402000200136020c200528020041888608280200480440200541b98108104d210720002802042001460440200041046a104c200028020821060b200320066a2007360200200341046a2103200141016a21010c010b0b20042000290204370200200441086a2000410c6a280200360200200041106a2400200228020c106220022802142100200228021020022802182201ad101b200141027421010340200104402000350200101b200141046b2101200041046a21000c010b0b410441041076200241206a24000bfe0101087f230041106b22002400101a106510642000410036020c2000410c6a2107230041106b2201240020014280808080c0003702044104210303402001200236020c200728020041888608280200480440200741b981084101104b104a210520012802042002460440200141046a104c200128020821030b200320046a2005360200200441046a2104200241016a21020c010b0b20002001290204370200200041086a2001410c6a280200360200200141106a2400200028020c10622000280208410274210320002802042105034020032006470440200520066a280200100b200641046a21060c010b0b2000280200410441041076200041106a24000b810101067f230041206b22002400101a4101106320001052106a024020002802004101710440200041086a200028020410690c010b106c2101106c2102106c2103106c2104106c21052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a1068200041206a24000b3d01027f230041206b22002400101a41011063200041f5820841051054200041086a2201200028020020002802041013106920011068200041206a24000b3d01027f230041106b22002400101a41011063200041086a10522201106a2000280208410171047f200028020c10120520010bad101b200041106a24000b3d02017f017e230041106b22002400101a41011063200041086a1052106a2000280208410171047e200028020c101ead0542000b101b200041106a24000b7c01087f230041106b22002400101a41051063105221014101104a21034102104a21044103104a21054104104a2106200041086a2001106a024020002802084101710440200028020c210742001010220142001010220220072003200420052006101f0c010b106c2101106c21020b200120021066200041106a24000b6c01067f230041106b22002400101a41031063105221014101104a21034102104a2104200041086a2001106a024020002802084101710440200028020c210542001010220142001010220220052003200410200c010b106c2101106c21020b200120021066200041106a24000b5201047f230041106b22002400101a41031063105221014101104a21024102104a2103200041086a2001106a2000280208410171047e200028020c20022003102141004aad0542000b101c200041106a24000b850101087f230041106b22002400101a41041063105221014101104a21034102104a2104200041086a4103105c200028020c21052000280208210620002001106a024020002802004101710440200028020421074200101022014200101022022007200320042006200510221a0c010b106c2101106c21020b200120021066200041106a24000b7501067f230041106b22002400101a4102106310522101200041086a4101105c200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310231a0c010b106c2101106c21020b200120021066200041106a24000b930101057f230041206b22002400101a41031063105221014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d4101744101721037200028020c21012002200320042000280208220210241a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b900101057f230041206b22002400101a41031063105221014101104a21024102104a2103200041186a2001106a024020002802184101710440200041086a200028021c2204101241076a41086d41016a1037200028020c21012002200320042000280208220210251a0c010b200041106a4100103720002802142101200028021021020b20022001100c200041206a24000b7501067f230041106b22002400101a4102106310522101200041086a4101105c200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310261a0c010b106c2101106c21020b200120021066200041106a24000b7501067f230041106b22002400101a4102106310522101200041086a4101105c200028020c21032000280208210420002001106a0240200028020041017104402000280204210542001010220142001010220220052004200310271a0c010b106c2101106c21020b200120021066200041106a24000b950101057f230041206b22002400101a41011063200041186a1052106a024020002802184101710440200028021c2101420010102102420010102103200041086a2001101e1037200028020c21042002200320012000280208220110281a0c010b106c2102106c2103200041106a4100103720002802142104200028021021010b2002100b2003100b20012004100c200041206a24000b3201027f101a4100106310472200102910472201102a41908208410020002001102b41004c1b2200044020004119102e000b0b1100101a4100106341818208410f102e000b2901017f230041106b22002400101a41011063200041086a105d2000280208200028020c103f103e000b3801037f230041106b22002400101a41011063200041046a41d38108106120002802082201200028020c103f200028020420011077103e000b2f01017f230041106b22002400101a41011063200041086a41d38108410110542000280208200028020c103f103e000bac0102047f017e230041106b22002400101a41021063200041046a1059027f0240410110082204420158044041002004a741016b0d021a0c010b41cf8108410441ab830841121038000b41010b45044041d4810841161049000b200028020c21012000280208210320002000280204220236020420004117200120024180808080784622011b36020c200041ea8108200320011b2201360208200041046a1067200220011078200041106a24000b6801057f230041106b22002400101a41011063200041046a220310592000280208210120004117200028020c200028020422024180808080784622041b36020c200041ea8108200120041b22013602082000200236020420031067200220011078200041106a24000b4f01037f230041106b22002400101a41011063200041046a10592000280204220141808080807846044041ea81084117102e000b20002802082202200028020c100c200120021077200041106a24000b3201017f230041106b22002400101a41011063200041086a4100105c2000280208200028020c103f10021a200041106a24000b3001017f230041106b22002400101a41011063200041086a105d2000280208200028020c103f10021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101105c20012000280208200028020c10151a200110021a200041106a24000b3d01027f230041106b22002400101a41021063410010402101200041086a4101105c20012000280208200028020c10011a200110021a200041106a24000b7a01067f230041106b22002400101a41031063410010402104410141c48208411110602102410241bb820841091060210320022004100d22014b200220036a20014b72450440200041086a20031037200028020c210120002802082105200304402004200220052001106b0b20052001100c0b200041106a24000b5601037f230041106b22002400101a41031063410010402101410141b68208410510602102200041086a4102105c20012002200028020c2000280208102c044041d5820841131049000b200110021a200041106a24000b2d01017f230041206b22002400101a41011063200041b182084105105120004120103f10021a200041206a24000b5301027f230041206b22002400101a41001063200041086a41c283084106103f10451043200041146a2000280208200028020c107220002802182201200028021c100c200028021420011077200041206a24000b9e03010b7f230041406a22002400101a41001063200041c883084104103f220210442000410036021c412021010340200104402000411c6a2000200210741070200141016b21010c010b0b0240200028021c411f4b04402000411a6a2201200041226a2d00003a0000200041166a2203200041296a2d00003a0000200041126a2204200041306a2d00003a0000200020002f01203b0118200020002f00273b0114200020002f012e3b0110200028023c21052000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c20002802082000280204470d012000411e6a20012d00003a0000200041256a20032d00003a00002000412c6a20042d00003a0000200041336a200a2d00003a0000200020002f01183b011c200020002f01143b0023200020002f01103b012a200020002f010c3b003120002005360138200020063601342000200936002d200020083601262000200736001f2000411c6a4120100c200041406b24000f0b200241fa82084112106e000b200241808008410e106e000bfe0201067f23004180016b22002400101a41001063200041d4006a220241a982084108103f2201104402400240200028025c2000280258460d00024002400240200220011074220441ff01710e020201000b2001418c8308410d106e000b200041206a22024200370300200041186a22034200370300200041106a2205420037030020004200370308200041d4006a200041086a41202001106f200041f8006a2002290300370300200041f0006a2003290300370300200041e8006a2005290300370300200020002903083703600b200028025c2000280258470d01200041c8006a2201200041f8006a290300370300200041406b2202200041f0006a290300370300200041386a2203200041e8006a290300370300200020002903603703302004410171450d00200041216a2001290300370000200041196a2002290300370000200041116a200329030037000020002000290330370009200041003a0008200041096a4120100c0b20004180016a24000f0b200141808008410e106e000b1d00101a4100106341a982084108103f416710171a4167100d45ad101c0ba90302077f017e230041e0006b22002400101a41001063200041c4006a220241bd83084105103f22011044200041003b01102002200041106a220341022001106f20002f01102104200041d0006a20022001107110732002200028025420002802582001106f2002200110742105200041c4006a200110712106200042003703102002200341082001106f20002903102107200041086a200041c4006a200110711037200220002802082202200028020c22032001106f200028024c2000280248470440200141808008410e106e000b200041286a200041d8006a280200360200200041376a200041c3006a2d00003a000020002000290350370320200020053a00322000200636022c20002003360214200020023602102000200028003f3600332000200441087420044180fe0371410876723b01302000200742388620074280fe0383422886842007428080fc0783421886200742808080f80f834208868484200742088842808080f80f832007421888428080fc07838420074228884280fe03832007423888848484370318200041106a1039200028022020002802241077200041e0006a24000b4001027f230041106b22002400101a41011063200041046a105741c283084106103f20002802082201200028020c106d200028020420011077200041106a24000b3201017f230041206b22002400101a41011063200041b381084103105141c883084104103f20004120106d200041206a24000bbd0201087f230041d0006b22002400101a10651064200041003602282000412f6a230041306b220124002001200041286a22042802004188860828020048047f200141106a200441a982084108104b41a982084108104e41000541010b3a000f2001410f6a412110c3011a200141306a240020002802281062200041106a2201200041386a2203290000370300200041186a2204200041406b2205290000370300200041206a2206200041c8006a22072900003703002000200029003037030820002d002f41017145044020072006290300370000200520042903003700002003200129030037000020002000290308370030410121020b200020023a002f41a982084108103f2101024020020440103a22024101103c2002200041306a412010011a2001200210181a0c010b200141014100106d0b200041d0006a24000b830101047f230041306b22002400101a41011063200041086a41b381084103105e41bd83084105103f103a210120002f01282001103b200028021c220320002802202001102f200120002d002a103c20002802242001103020002903102001103d2000280208200028020c2001102f200110181a200028021820031077200041306a24000bc30101017f23004180016b22002400101a41021063200041406b410041c381084102105b200041e0006a410141c181084102105b200041186a200041d8006a290000370300200041106a200041d0006a290000370300200041086a200041c8006a290000370300200041286a200041e8006a290000370300200041306a200041f0006a290000370300200041386a200041f8006a29000037030020002000290040370300200020002900603703202000200041206a10c20145ad101c20004180016a24000b3301017f230041206b22002400101a410110632000410041b281084101105b200041cc850810c20145ad101c200041206a24000b3701017f230041106b22002400101a41011063200041086a410041c781084103106010372000280208200028020c100c200041106a24000bc70102067f017e230041206b22002400101a41021063200041086a4100105c2000290308210620004101105c2000200029030037021820002006370210410c210103402001417c460440200241004e044041002101200210b901210503402001411046450440200320056a200041106a20016a2204280200200441046a280200220410c3011a200141086a2101200320046a21030c010b0b20052002100c200041206a24000f0b107a0005200041106a20016a28020020026a2102200141086b21010c010b000b000b08004101200010790b890101067f230041106b22012400101a41021063200141086a105d200128020821024101210502400240200128020c2204410141c581084102106022004d0440200421000c010b200420006b22034100480d01200310b9012205200020026a200310c3011a2002200441012000107d21020b20022000100c20052003100c200141106a24000f0b107a000be90101057f230041206b22002400101a4100106341052103200041146a22044105410010bc0120002802182102024020002802144101470440200028021c220141046a41ce81082d00003a0000200141ca81082800003600002000410536021c2000200136021820002002360214200241056b41e3004d0440200041086a2004410541e40041014101107b20002802082201418180808078470d0220002802142102200028021c2103200028021821010b200120036a41e40010c4012001200341e4006a100c200220011077200041206a24000f0b2002200028021c107c000b2001200028020c107c000b990101017f230041106b220324002000027f200141004804402000410036020441010c010b0240200145044020004280808080103702040c010b027f20020440200341012001410110c00120032802000c010b200341086a4101200110c10120032802080b2202044020002002360208200020013602040c010b200020013602082000410136020441010c010b41000b360200200341106a24000b1700101a41001063410441041058412a3602004201101c0b02000b0b0041ec8508410e1000000b380002402002450d0020012002107921012003450d002001450440410021010c010b2001200210c4010b20002002360204200020013602000b3a01017f230041106b22032400200341086a20012002410010c001200328020c21012000200328020836020020002001360204200341106a24000b4201047f412021020240034020002d0000220320012d00002204460440200041016a2100200141016a2101200241016b22020d010c020b0b200320046b21050b20050b8607010c7f230041106b21070240200222054110490440200021020c010b024020002000410020006b41037122066a22044f0d00200021022001210320060440200621080340200220032d00003a0000200341016a2103200241016a2102200841016b22080d000b0b200641016b4107490d000340200220032d00003a0000200241016a200341016a2d00003a0000200241026a200341026a2d00003a0000200241036a200341036a2d00003a0000200241046a200341046a2d00003a0000200241056a200341056a2d00003a0000200241066a200341066a2d00003a0000200241076a200341076a2d00003a0000200341086a2103200241086a22022004470d000b0b2004200520066b220d417c71220e6a21020240200120066a22034103712201450440200220044d0d0120032101034020042001280200360200200141046a2101200441046a22042002490d000b0c010b410021052007410036020c2007410c6a2001722106410420016b22084101710440200620032d00003a0000410121050b20084102710440200520066a200320056a2f01003b01000b200320016b210520014103742108200728020c210b02402002200441046a4d0440200421060c010b410020086b411871210a03402004200b200876200541046a2205280200220b200a7472360200200441086a210c200441046a220621042002200c4b0d000b0b41002104200741003a0008200741003a0006027f20014101460440410021014100210a200741086a0c010b200541056a2d00002007200541046a2d000022013a0008410874210a41022109200741066a0b210c20062003410171047f200c200541046a20096a2d00003a000020072d0006411074210420072d00080520010b41ff01712004200a7272410020086b41187174200b200876723602000b200d41037121052003200e6a21010b02402002200220056a22044f0d002005410771220304400340200220012d00003a0000200141016a2101200241016a2102200341016b22030d000b0b200541016b4107490d000340200220012d00003a0000200241016a200141016a2d00003a0000200241026a200141026a2d00003a0000200241036a200141036a2d00003a0000200241046a200141046a2d00003a0000200241056a200141056a2d00003a0000200241066a200141066a2d00003a0000200241076a200141076a2d00003a0000200141086a2101200241086a22022004470d000b0b20000bf70201037f200141104f0440024020002000410020006b41037122036a22024f0d0020030440200321040340200041003a0000200041016a2100200441016b22040d000b0b200341016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200120036b2201417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200141037121010b02402000200020016a22034f0d002001410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200141016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b0b0baf050400418080080bcc04696e70757420746f6f206c6f6e67617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f727470323234703235367033383470353231736c696365206f7574206f6620626f756e647373746f72616765206465636f6465206572726f7220286b65793a2073686172677365616d6c626261786d626832683161746c656e706172743174657374657465737420617267756d656e742069732066616c73656f7074696f6e20617267756d656e74206973206e6f6e6572657475726e5f73635f6572726f72437573746f6d206f6e6c79206f776e6572206d6573736167656f70745f616464726279746573696e646578736c6963655f6c656e7374617274696e675f706f736974696f6e696e646578206f7574206f6620626f756e647363757276655f62697473697a6563757276656172726179206465636f6465206572726f72696e76616c69642076616c75657574662d38206465636f6465206572726f72696e707574206f7574206f662072616e67657365725f317665635f753861646472010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100418e85080b330202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040041ec85080b0e70616e6963206f636375727265640041fc85080b0438ffffff", "report": { "imports": [ "addEC", @@ -1164,12 +1164,12 @@ ], "isMemGrow": true, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/alloc-mem-leaking.wasm", - "size": 23263, + "size": 23598, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/barnard-features/output/barnard-features.mxsc.json b/test/features/barnard-features/output/barnard-features.mxsc.json deleted file mode 100644 index f87ea4c6b..000000000 --- a/test/features/barnard-features/output/barnard-features.mxsc.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", - "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" - }, - "contractCrate": { - "name": "barnard-features", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.59.0" - } - }, - "abi": { - "name": "BarnardFeatures", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "epochInfo", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - }, - { - "type": "u64" - }, - { - "type": "u64" - }, - { - "type": "u64" - } - ] - }, - { - "name": "codeHash", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "docs": [ - "Prev block timestamp (ms, then s), current block timestamp (ms, then s)" - ], - "name": "get_block_timestamps", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - }, - { - "type": "u64" - }, - { - "type": "u64" - }, - { - "type": "u64" - } - ] - }, - { - "name": "get_block_timestamp_ms", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_timestamp_ms", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "docs": [ - "Different implementation based on feature flag.", - "", - "TODO: deduplicate after Barnard release." - ], - "name": "get_esdt_token_data", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "EsdtTokenType" - }, - { - "type": "BigUint" - }, - { - "type": "bool" - }, - { - "type": "bytes" - }, - { - "type": "bytes" - }, - { - "type": "bytes" - }, - { - "type": "Address" - }, - { - "type": "BigUint" - }, - { - "type": "List" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": false, - "types": { - "EsdtTokenType": { - "type": "enum", - "variants": [ - { - "name": "Fungible", - "discriminant": 0 - }, - { - "name": "NonFungible", - "discriminant": 1 - }, - { - "name": "SemiFungible", - "discriminant": 2 - }, - { - "name": "Meta", - "discriminant": 3 - }, - { - "name": "Invalid", - "discriminant": 4 - } - ] - } - } - }, - "code": "0061736d0100000001590f6000006000017e60017f0060017f017f60027f7f017f6000017f60037f7f7f017f60017f017e60027f7f0060017e0060047f7f7f7f017f60017e017f600b7f7f7e7f7f7f7f7f7f7f7f0060047f7f7e7f0060047f7f7f7f0002f9051f03656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000203656e76106d4275666665724765744c656e677468000303656e76136d42756666657247657442797465536c696365000a03656e760f6d4275666665725365744279746573000603656e76096d4275666665724571000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000703656e760f6765744e756d417267756d656e7473000503656e760b7369676e616c4572726f72000803656e7616736d616c6c496e7446696e697368556e7369676e6564000903656e76126d427566666572476574417267756d656e74000403656e760e636865636b4e6f5061796d656e74000003656e7613676574426c6f636b526f756e6454696d654d73000103656e761a65706f63685374617274426c6f636b54696d657374616d704d73000103656e761465706f63685374617274426c6f636b4e6f6e6365000103656e761465706f63685374617274426c6f636b526f756e64000103656e76126d616e61676564476574436f646548617368000803656e760d6d42756666657246696e697368000303656e761767657450726576426c6f636b54696d657374616d704d73000103656e761567657450726576426c6f636b54696d657374616d70000103656e7613676574426c6f636b54696d657374616d704d73000103656e7611676574426c6f636b54696d657374616d70000103656e7609626967496e744e6577000b03656e760a6d4275666665724e6577000503656e76176d616e6167656447657445534454546f6b656e44617461000c03656e76176d616e6167656447657445534454546f6b656e54797065000d03656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000703656e7614626967496e7446696e697368556e7369676e6564000203656e7614736d616c6c496e7446696e6973685369676e6564000903656e760d6d427566666572417070656e64000403100f0e040503020205000000000000000005030100030616037f01418080080b7f00419081080b7f00419081080b07b2010b066d656d6f7279020004696e697400260965706f6368496e666f002708636f6465486173680028146765745f626c6f636b5f74696d657374616d70730029166765745f626c6f636b5f74696d657374616d705f6d73002a1b6765745f707265765f626c6f636b5f74696d657374616d705f6d73002b136765745f657364745f746f6b656e5f64617461002c0863616c6c4261636b002d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020a84070f2e01017f41a080084117102022042000200110001a200441b78008410310001a20042002200310001a20041001000b1101017f102522022000200110041a20020b2301017f4100102222001002412047044041fb8008410741eb80084110101f000b20000b0d00200010252200100a1a20000b1400100720004604400f0b41ba800841191008000b1e00200029030010092000290308100920002903101009200029031810090b1901017f418c8108418c810828020041016b220036020020000b0800100b410010230b4802017f037e230041206b22002400100b41001023100c2101100d2102100e21032000100f37031820002003370310200020023703082000200137030020001024200041206a24000b1701017f100b410110231021102522001010200010111a0b4802017f037e230041206b22002400100b410010231012210110132102101421032000101537031820002003370310200020023703082000200137030020001024200041206a24000b0c00100b41001023101410090b0c00100b41001023101210090bf003020c7f017e230041106b22032400100b4103102310212200230041106b22012400024041011022220210024104470d002001410036020c2002410041042001410c6a10031a200128020c41c58eb1a204470d0041d38008410b102021020b415841d38008410b10041a41582002100541004a044041828108410841de8008410d101f000b200141106a24002002220441021006220c4200101622051017220710172208101722091017220a1017220142001016220b10172206101820002002200c4175101941084175101a220241004a047f4175101ba70520040b41ff01712200200041084f1b210020011002450440200141808008412010041a0b200341003b0106200741004102200341066a10031a20032d000642082000ad200241004c1b10092005101c410047ad101d200810111a200910111a200a10111a200110111a200b101c41014100102021012006100221044100210203402002200449044020034100360208200620024104200341086a10031a20032003280208220041187420004180fe03714108747220004108764180fe03712000411876727222051002220041187420004180fe03714108747220004108764180fe03712000411876727236020c20012003410c6a410410001a20012005101e1a200241046a21020c010b0b200110111a200341106a24000b02000b0b7d020041a080080b6a617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e747345474c442d30303030303045534454206578706563746564626164206172726179206c656e67746861646472657373746f6b656e5f696400418c81080b0438ffffff", - "report": { - "imports": [ - "bigIntFinishUnsigned", - "bigIntGetInt64", - "bigIntIsInt64", - "bigIntNew", - "checkNoPayment", - "epochStartBlockNonce", - "epochStartBlockRound", - "epochStartBlockTimestampMs", - "getBlockRoundTimeMs", - "getBlockTimestamp", - "getBlockTimestampMs", - "getNumArguments", - "getPrevBlockTimestamp", - "getPrevBlockTimestampMs", - "mBufferAppend", - "mBufferAppendBytes", - "mBufferEq", - "mBufferFinish", - "mBufferGetArgument", - "mBufferGetByteSlice", - "mBufferGetLength", - "mBufferNew", - "mBufferSetBytes", - "managedGetCodeHash", - "managedGetESDTTokenData", - "managedGetESDTTokenType", - "managedSignalError", - "signalError", - "smallIntFinishSigned", - "smallIntFinishUnsigned", - "smallIntGetUnsignedArgument" - ], - "isMemGrow": false, - "eiCheck": { - "eiVersion": "1.5", - "ok": true - }, - "codeReport": { - "path": "../output/barnard-features.wasm", - "size": 2124, - "hasAllocator": false, - "hasPanic": "None" - } - } -} diff --git a/test/features/basic-features/output/basic-features-barnard.mxsc.json b/test/features/basic-features/output/basic-features-barnard.mxsc.json deleted file mode 100644 index 78b747170..000000000 --- a/test/features/basic-features/output/basic-features-barnard.mxsc.json +++ /dev/null @@ -1,6861 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", - "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" - }, - "contractCrate": { - "name": "basic-features", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.59.0" - } - }, - "abi": { - "name": "BasicFeatures", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "panicWithMessage", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Operation that has caused issues in the past" - ], - "name": "count_ones", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "u64" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "endpoint_with_mutable_arg", - "mutability": "mutable", - "inputs": [ - { - "name": "arg1", - "type": "BigUint" - }, - { - "name": "arg2", - "type": "u64" - }, - { - "name": "arg3", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sqrt_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sqrt_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "log2_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "log2_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "pow_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "pow_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "pow_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "pow_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_to_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bu", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "biguint_overwrite_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bu", - "type": "BigUint" - }, - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_u64_1", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_u64_2", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "biguint_from_u128", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_uint_from_managed_buffer_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "big_int_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_from_i64_1", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_from_i64_2", - "mutability": "mutable", - "inputs": [ - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_uint_eq_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - }, - { - "name": "small", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "big_int_to_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "bigint_overwrite_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - }, - { - "name": "small", - "type": "i64" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "big_int_to_parts", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "Sign" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "big_int_from_biguint", - "mutability": "mutable", - "inputs": [ - { - "name": "sign", - "type": "Sign" - }, - { - "name": "unsigned", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "add_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "add_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "sub_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "sub_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "mul_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mul_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "div_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "div_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_assign_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_assign_big_int_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigInt" - }, - { - "name": "b", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "rem_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "rem_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_and_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_or_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "bit_xor_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shr_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_assign_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "shl_assign_big_uint_ref", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "BigUint" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "get_block_timestamp", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_nonce", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_round", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_epoch", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_block_random_seed", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "array48" - } - ] - }, - { - "name": "get_prev_block_timestamp", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_nonce", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_round", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_epoch", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_prev_block_random_seed", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "array48" - } - ] - }, - { - "name": "get_caller", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "get_owner_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "get_shard_of_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "is_smart_contract", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "get_state_root_hash", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "get_tx_hash", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "get_gas_left", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "get_cumulated_validator_rewards", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "get_code_metadata", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "CodeMetadata" - } - ] - }, - { - "name": "is_builtin_function", - "mutability": "mutable", - "inputs": [ - { - "name": "function_name", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "codec_err_finish", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "CodecErrorTestType" - } - ] - }, - { - "name": "codec_err_storage_key", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "codec_err_storage_get", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "CodecErrorTestType" - } - ] - }, - { - "name": "codec_err_storage_set", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "codec_err_event_topic", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "codec_err_event_data", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Never actually calls any deploy/upgrade, so it is appropriate in this contract.", - "It just covers contract init serialization errors." - ], - "name": "codec_err_contract_init", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "docs": [ - "Never actually calls any async/sync call, so it is appropriate in this contract.", - "It just covers contract call serialization errors." - ], - "name": "codec_err_contract_call", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "compute_sha256", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "compute_keccak256", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array32" - } - ] - }, - { - "name": "compute_ripemd160", - "mutability": "mutable", - "inputs": [ - { - "name": "input", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "array20" - } - ] - }, - { - "name": "verify_bls_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "verify_ed25519_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "verify_secp256k1_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "verify_custom_secp256k1_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - }, - { - "name": "hash_type", - "type": "MessageHashType" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "compute_secp256k1_der_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "r", - "type": "bytes" - }, - { - "name": "s", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "verify_secp256r1_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "verify_bls_signature_share", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "verify_bls_aggregated_signature", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "List" - }, - { - "name": "message", - "type": "bytes" - }, - { - "name": "signature", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "echo_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u64" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "echo_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "echo_i32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "echo_u32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "echo_isize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "echo_usize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "echo_i8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i8" - } - ], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "echo_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u8" - } - ], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "echo_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bool" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "echo_opt_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "Option" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "echo_nothing", - "mutability": "mutable", - "inputs": [ - { - "name": "nothing", - "type": "()" - } - ], - "outputs": [] - }, - { - "name": "echo_array_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "s", - "type": "array5" - } - ], - "outputs": [ - { - "type": "array5" - } - ] - }, - { - "name": "echo_multi_value_u32", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "u32" - }, - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "echo_multi_value_tuples", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "echo_ser_example_2", - "mutability": "mutable", - "inputs": [ - { - "name": "se", - "type": "ExampleEnumWithFields" - } - ], - "outputs": [ - { - "type": "ExampleEnumWithFields" - } - ] - }, - { - "name": "echo_simple_enum", - "mutability": "readonly", - "inputs": [ - { - "name": "se", - "type": "ExampleEnumSimple" - } - ], - "outputs": [ - { - "type": "ExampleEnumSimple" - } - ] - }, - { - "name": "finish_simple_enum_variant_1", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "ExampleEnumSimple" - } - ] - }, - { - "name": "echo_non_zero_usize", - "mutability": "readonly", - "inputs": [ - { - "name": "nz", - "type": "NonZeroUsize" - } - ], - "outputs": [ - { - "type": "NonZeroUsize" - } - ] - }, - { - "name": "echo_some_args_ignore_others", - "mutability": "readonly", - "inputs": [ - { - "name": "i", - "type": "i32" - }, - { - "name": "opt", - "type": "optional", - "multi_arg": true - }, - { - "name": "_ignore", - "type": "ignore", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "i32" - }, - { - "type": "optional", - "multi_result": true - } - ], - "allow_multiple_var_args": true - }, - { - "name": "echo_arrayvec", - "mutability": "readonly", - "inputs": [ - { - "name": "av", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "echo_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "echo_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "echo_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "echo_managed_address", - "mutability": "mutable", - "inputs": [ - { - "name": "ma", - "type": "Address" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "docs": [ - "This tests how is generated type name in proxy" - ], - "name": "echo_managed_option", - "mutability": "mutable", - "inputs": [ - { - "name": "mo", - "type": "Option" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_managed_vec", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_tuple", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "tuple" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "docs": [ - "This tests that nested serialization of big ints within unmanaged types works." - ], - "name": "echo_big_int_option", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "Option" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "echo_tuple_into_multiresult", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - }, - { - "name": "vec", - "type": "List" - } - ], - "outputs": [ - { - "type": "Address" - }, - { - "type": "List" - } - ] - }, - { - "name": "echo_managed_vec_of_managed_vec", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List>" - } - ], - "outputs": [ - { - "type": "List>" - } - ] - }, - { - "name": "echo_managed_vec_of_token_identifier", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "echo_managed_async_result_empty", - "mutability": "mutable", - "inputs": [ - { - "name": "a", - "type": "AsyncCallResult<()>" - } - ], - "outputs": [] - }, - { - "name": "echo_varags_managed_eager", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "u32" - }, - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "echo_varags_managed_sum", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "echo_varags_vec_with_counted", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>>", - "multi_result": true - } - ] - }, - { - "name": "echo_varags_vec_with_counted_pairs", - "mutability": "mutable", - "inputs": [ - { - "name": "m", - "type": "variadic>>>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>>>", - "multi_result": true - } - ] - }, - { - "name": "convert_varags_vec_with_counted_pairs_1", - "mutability": "mutable", - "inputs": [ - { - "name": "address_number_pairs", - "type": "variadic>>>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>>>", - "multi_result": true - } - ] - }, - { - "name": "convert_varags_vec_with_counted_pairs_2", - "mutability": "mutable", - "inputs": [ - { - "name": "address_number_pairs", - "type": "variadic>>>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "variadic>>>", - "multi_result": true - } - ] - }, - { - "name": "compute_get_values", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "name": "compute_create_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "tuple" - } - ] - }, - { - "name": "compute_get_ec_length", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "compute_get_priv_key_byte_length", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "compute_ec_add", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_first_point", - "type": "BigUint" - }, - { - "name": "y_first_point", - "type": "BigUint" - }, - { - "name": "x_second_point", - "type": "BigUint" - }, - { - "name": "y_second_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_ec_double", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_is_on_curve_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "compute_scalar_mult", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_point", - "type": "BigUint" - }, - { - "name": "y_point", - "type": "BigUint" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_scalar_base_mult", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_marshal_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_pair", - "type": "BigUint" - }, - { - "name": "y_pair", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "compute_marshal_compressed_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "x_pair", - "type": "BigUint" - }, - { - "name": "y_pair", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "compute_unmarshal_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_unmarshal_compressed_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - }, - { - "name": "data", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - } - ] - }, - { - "name": "compute_generate_key_ec", - "mutability": "mutable", - "inputs": [ - { - "name": "curve_bitsize", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "BigUint" - }, - { - "type": "bytes" - } - ] - }, - { - "name": "logEventA", - "mutability": "mutable", - "inputs": [ - { - "name": "data", - "type": "u32" - } - ], - "outputs": [] - }, - { - "docs": [ - "Logs `event_a` a repeated number of times." - ], - "name": "logEventARepeat", - "mutability": "mutable", - "inputs": [ - { - "name": "num_logs", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "logEventB", - "mutability": "mutable", - "inputs": [ - { - "name": "arg1", - "type": "BigUint" - }, - { - "name": "arg2", - "type": "Address" - }, - { - "name": "data", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [] - }, - { - "name": "only_owner_endpoint", - "onlyOwner": true, - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "only_user_account_endpoint", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "require_equals", - "mutability": "readonly", - "inputs": [ - { - "name": "a", - "type": "u32" - }, - { - "name": "b", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "sc_panic", - "mutability": "readonly", - "inputs": [], - "outputs": [] - }, - { - "name": "maddress_from_array", - "mutability": "mutable", - "inputs": [ - { - "name": "array", - "type": "array32" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "maddress_from_managed_buffer", - "mutability": "mutable", - "inputs": [ - { - "name": "managed_buffer", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "mbuffer_new", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_concat", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "bytes" - }, - { - "name": "mb2", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_copy_slice", - "mutability": "mutable", - "inputs": [ - { - "name": "mb", - "type": "bytes" - }, - { - "name": "starting_position", - "type": "u32" - }, - { - "name": "slice_len", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "mbuffer_set_random", - "mutability": "mutable", - "inputs": [ - { - "name": "nr_bytes", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mbuffer_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "bytes" - }, - { - "name": "mb2", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_address_zero", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "managed_address_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mb1", - "type": "Address" - }, - { - "name": "mb2", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_vec_new", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_biguint_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_biguint_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "mv1", - "type": "List" - }, - { - "name": "mv2", - "type": "List" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_vec_address_push", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List
" - }, - { - "name": "item", - "type": "Address" - } - ], - "outputs": [ - { - "type": "List
" - } - ] - }, - { - "name": "managed_vec_set", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "managed_vec_find", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "managed_vec_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "item", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_ref_explicit", - "mutability": "mutable", - "inputs": [ - { - "name": "mv", - "type": "List" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "storage_read_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "storage_key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "storage_write_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "storage_key", - "type": "bytes" - }, - { - "name": "value", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "storage_read_from_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "storage_key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "load_bytes", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "load_big_uint", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_big_int", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "load_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "load_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "load_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "load_bool", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "load_addr", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Address" - } - ] - }, - { - "name": "load_opt_addr", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional
", - "multi_result": true - } - ] - }, - { - "name": "is_empty_opt_addr", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "get_nr_to_clear", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "clear_storage_value", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "load_ser_2", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "ExampleEnumWithFields" - } - ] - }, - { - "name": "load_map1", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_map2", - "mutability": "mutable", - "inputs": [ - { - "name": "addr1", - "type": "Address" - }, - { - "name": "addr2", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "load_map3", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "load_from_address_raw", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "store_bytes", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "store_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_big_int", - "mutability": "mutable", - "inputs": [ - { - "name": "bi", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "store_usize", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "store_i32", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i32" - } - ], - "outputs": [] - }, - { - "name": "store_u64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "u64" - } - ], - "outputs": [] - }, - { - "name": "store_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [] - }, - { - "name": "store_bool", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bool" - } - ], - "outputs": [] - }, - { - "name": "store_addr", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "Address" - } - ], - "outputs": [] - }, - { - "name": "store_opt_addr", - "mutability": "mutable", - "inputs": [ - { - "name": "opt_addr", - "type": "optional
", - "multi_arg": true - } - ], - "outputs": [] - }, - { - "name": "store_ser_2", - "mutability": "mutable", - "inputs": [ - { - "name": "arg", - "type": "ExampleEnumWithFields" - } - ], - "outputs": [] - }, - { - "name": "store_map1", - "mutability": "mutable", - "inputs": [ - { - "name": "addr", - "type": "Address" - }, - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_map2", - "mutability": "mutable", - "inputs": [ - { - "name": "addr1", - "type": "Address" - }, - { - "name": "addr2", - "type": "Address" - }, - { - "name": "bi", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_map3", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "u32" - }, - { - "name": "b", - "type": "bool" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_i64", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "i64" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_big_uint", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "store_reserved_vec_u8", - "mutability": "mutable", - "inputs": [ - { - "name": "i", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "token_has_transfer_role", - "mutability": "mutable", - "inputs": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "timelock_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "timelock_set_initial_value", - "mutability": "mutable", - "inputs": [ - { - "name": "initial_value", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "timelock_set_unlock_timestamp", - "mutability": "mutable", - "inputs": [ - { - "name": "unlock_timestamp", - "type": "u64" - }, - { - "name": "future_value", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "timelock_commit_action", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "timelock_get_unlock_timestamp", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "timelock_get_future_value", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "timelock_get_current_value_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "timelock_get_unlock_timestamp_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "timelock_get_future_value_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "address_to_id_mapper_get_id", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_id_non_zero", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "Option
" - } - ] - }, - { - "name": "address_to_id_mapper_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "address_to_id_mapper_set", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_get_id_or_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "address_to_id_mapper_remove_by_id", - "mutability": "mutable", - "inputs": [ - { - "name": "address_id", - "type": "u64" - } - ], - "outputs": [ - { - "type": "Option
" - } - ] - }, - { - "name": "address_to_id_mapper_remove_by_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "getListMapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushBack", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperPushFront", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperPopFront", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPopBack", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperFront", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperBack", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushAfter", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "element", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperPushBefore", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "element", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperRemoveNode", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperRemoveNodeById", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "optional", - "multi_result": true - } - ] - }, - { - "name": "listMapperSetValue", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "new_value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperSetValueById", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - }, - { - "name": "new_value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "listMapperIterateByHand", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "listMapperIterateByIter", - "mutability": "mutable", - "inputs": [ - { - "name": "node_id", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "queue_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "queue_mapper_push_back", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "queue_mapper_pop_front", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "queue_mapper_front", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic>", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_keys", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_values", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_mapper_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_contains_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_mapper_entry_or_default_update_increment", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_or_insert_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "default", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_and_modify", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - }, - { - "name": "otherwise", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_mapper_entry_or_insert_with_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key_increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_view", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_storage_mapper_insert_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_contains_key", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "map_storage_mapper_insert_value", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_storage_mapper_get_value", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "map_storage_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "map_storage_mapper_clear", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "map_storage_mapper_entry_or_default_update_increment", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "increment", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_entry_and_modify_increment_or_default", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - }, - { - "name": "other", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_storage_mapper_entry_or_default_update", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - }, - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "u32" - } - ], - "outputs": [ - { - "type": "Option" - } - ] - }, - { - "name": "set_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "set_mapper_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "set_mapper_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "set_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "set_mapper_front", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "set_mapper_back", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "set_mapper_next", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "set_mapper_previous", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "set_mapper_iter_from_and_count", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "map_my_single_value_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "BigInt" - } - ] - }, - { - "name": "my_single_value_mapper_increment_1", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "docs": [ - "Same as my_single_value_mapper_increment_1, but expressed more compactly." - ], - "name": "my_single_value_mapper_increment_2", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "my_single_value_mapper_subtract_with_require", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "my_single_value_mapper_set_if_empty", - "mutability": "mutable", - "inputs": [ - { - "name": "value", - "type": "BigInt" - } - ], - "outputs": [] - }, - { - "name": "clear_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "get_from_address_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "is_empty_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "is_empty_at_address_single_value_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "raw_byte_length_single_value_mapper", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "set_single_value_mapper_with_key", - "mutability": "mutable", - "inputs": [ - { - "name": "key", - "type": "u32" - }, - { - "name": "value", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "vec_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "vec_mapper_push", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "vec_mapper_get", - "mutability": "readonly", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_get_at_address", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_len", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "vec_mapper_len_at_address", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "token_attributes_set", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_update", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_get_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "TokenAttributesStruct" - } - ] - }, - { - "name": "token_attributes_get_nonce", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "attributes", - "type": "TokenAttributesStruct" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "token_attributes_clear", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [] - }, - { - "name": "token_attributes_has_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "add_to_whitelist", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "remove_from_whitelist", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "check_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "check_contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "require_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "require_contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "item", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "issue_fungible_default_callback", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - }, - { - "name": "initial_supply", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "issue_fungible_custom_callback", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - }, - { - "name": "initial_supply", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "issue_and_set_all_roles_fungible", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "set_local_roles_fungible", - "mutability": "mutable", - "inputs": [], - "outputs": [] - }, - { - "name": "mint_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mint_and_send_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "burn_fungible", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "get_balance_fungible", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "require_same_token_fungible", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [] - }, - { - "name": "require_all_same_token_fungible", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [] - }, - { - "name": "getFungibleTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "issue_and_set_all_roles_meta", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [ - { - "name": "token_ticker", - "type": "bytes" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_set_token_id", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "TokenIdentifier" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_create", - "mutability": "mutable", - "inputs": [ - { - "name": "amount", - "type": "BigUint" - }, - { - "name": "attributes", - "type": "RgbColor" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_create_and_send", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "amount", - "type": "BigUint" - }, - { - "name": "attributes", - "type": "RgbColor" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_add_quantity", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_add_quantity_and_send", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [ - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "mapper_nft_burn", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ], - "outputs": [] - }, - { - "name": "mapper_nft_get_balance", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "mapper_get_token_attributes", - "mutability": "mutable", - "inputs": [ - { - "name": "token_nonce", - "type": "u64" - } - ], - "outputs": [ - { - "type": "RgbColor" - } - ] - }, - { - "name": "getNonFungibleTokenId", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "init_unique_id_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "len", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "unique_id_mapper_get", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "unique_id_mapper_swap_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "unique_id_mapper_set", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - }, - { - "name": "id", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "unique_id_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "unordered_set_mapper", - "mutability": "readonly", - "inputs": [], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "unordered_set_mapper_insert", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "unordered_set_mapper_contains", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "unordered_set_mapper_remove", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_struct_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "s1", - "type": "ExampleStructManaged" - }, - { - "name": "s2", - "type": "ExampleStructManaged" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "no_overflow_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "no_overflow_u8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "no_overflow_u16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u16" - } - ] - }, - { - "name": "no_overflow_u32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "no_overflow_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "overflow_usize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "overflow_u8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u8" - } - ] - }, - { - "name": "overflow_u16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u16" - } - ] - }, - { - "name": "overflow_u32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "overflow_u64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "no_overflow_isize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "no_overflow_i8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "no_overflow_i16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i16" - } - ] - }, - { - "name": "no_overflow_i32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "no_overflow_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "overflow_isize", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "overflow_i8", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i8" - } - ] - }, - { - "name": "overflow_i16", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i16" - } - ] - }, - { - "name": "overflow_i32", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i32" - } - ] - }, - { - "name": "overflow_i64", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "i64" - } - ] - }, - { - "name": "token_identifier_egld", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "token_identifier_is_valid_1", - "mutability": "mutable", - "inputs": [ - { - "name": "token_id", - "type": "EgldOrEsdtTokenIdentifier" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "token_identifier_is_valid_2", - "mutability": "mutable", - "inputs": [ - { - "name": "bytes", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "non_zero_usize_iter", - "mutability": "readonly", - "inputs": [ - { - "name": "how_many", - "type": "u32" - } - ], - "outputs": [ - { - "type": "variadic", - "multi_result": true - } - ] - }, - { - "name": "non_zero_usize_macro", - "mutability": "readonly", - "inputs": [ - { - "name": "number", - "type": "u32" - } - ], - "outputs": [ - { - "type": "NonZeroUsize" - } - ] - }, - { - "name": "returns_egld_decimal", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [], - "outputs": [ - { - "type": "ManagedDecimal<18>" - } - ] - }, - { - "name": "set_contract_address", - "mutability": "mutable", - "inputs": [ - { - "name": "address", - "type": "Address" - } - ], - "outputs": [] - }, - { - "name": "is_empty_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "contains_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "len_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "next_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "previous_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "front_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "back_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "keys_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "values_at_address", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "contains_unordered_at_address", - "mutability": "mutable", - "inputs": [ - { - "name": "item", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "get_by_index", - "mutability": "mutable", - "inputs": [ - { - "name": "index", - "type": "u32" - } - ], - "outputs": [ - { - "type": "u32" - } - ] - }, - { - "name": "fill_set_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "fill_map_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "fill_unordered_set_mapper", - "mutability": "mutable", - "inputs": [ - { - "name": "value", - "type": "u32" - } - ], - "outputs": [] - }, - { - "name": "get_value_from_address_with_keys", - "mutability": "readonly", - "inputs": [ - { - "name": "address", - "type": "Address" - }, - { - "name": "extra_key", - "type": "u32" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "address_to_id_mapper_get_id_from_address", - "mutability": "readonly", - "inputs": [ - { - "name": "address_arg", - "type": "Address" - } - ], - "outputs": [ - { - "type": "u64" - } - ] - }, - { - "name": "managed_decimal_addition", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal<2>" - }, - { - "name": "second", - "type": "ManagedDecimal<2>" - } - ], - "outputs": [ - { - "type": "ManagedDecimal<2>" - } - ] - }, - { - "name": "managed_decimal_subtraction", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal<2>" - }, - { - "name": "second", - "type": "ManagedDecimal<2>" - } - ], - "outputs": [ - { - "type": "ManagedDecimal<2>" - } - ] - }, - { - "name": "managed_decimal_eq", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal<2>" - }, - { - "name": "second", - "type": "ManagedDecimal<2>" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_decimal_trunc", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "managed_decimal_into_raw_units", - "mutability": "mutable", - "inputs": [], - "outputs": [ - { - "type": "BigUint" - } - ] - }, - { - "name": "managed_decimal_ln", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "ManagedDecimal<9>" - } - ], - "outputs": [ - { - "type": "ManagedDecimalSigned<9>" - } - ] - }, - { - "name": "managed_decimal_log2", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "ManagedDecimal<9>" - } - ], - "outputs": [ - { - "type": "ManagedDecimalSigned<9>" - } - ] - }, - { - "name": "managed_decimal_addition_var", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal" - }, - { - "name": "second", - "type": "ManagedDecimal" - } - ], - "outputs": [ - { - "type": "ManagedDecimal" - } - ] - }, - { - "name": "managed_decimal_subtraction_var", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal" - }, - { - "name": "second", - "type": "ManagedDecimal" - } - ], - "outputs": [ - { - "type": "ManagedDecimal" - } - ] - }, - { - "name": "managed_decimal_eq_var", - "mutability": "mutable", - "inputs": [ - { - "name": "first", - "type": "ManagedDecimal" - }, - { - "name": "second", - "type": "ManagedDecimal" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "managed_decimal_ln_var", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "ManagedDecimal" - } - ], - "outputs": [ - { - "type": "ManagedDecimalSigned<9>" - } - ] - }, - { - "name": "managed_decimal_log2_var", - "mutability": "mutable", - "inputs": [ - { - "name": "x", - "type": "ManagedDecimal" - } - ], - "outputs": [ - { - "type": "ManagedDecimalSigned<9>" - } - ] - }, - { - "name": "mm_get", - "mutability": "readonly", - "inputs": [ - { - "name": "key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - } - ] - }, - { - "name": "mm_contains", - "mutability": "readonly", - "inputs": [ - { - "name": "key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "mm_remove_get", - "mutability": "readonly", - "inputs": [ - { - "name": "remove_key", - "type": "bytes" - }, - { - "name": "get_key", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - }, - { - "type": "bytes" - } - ] - }, - { - "name": "mm_mutable_input_test", - "mutability": "readonly", - "inputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "value", - "type": "bytes" - } - ], - "outputs": [ - { - "type": "bytes" - }, - { - "type": "bytes" - } - ] - } - ], - "events": [ - { - "identifier": "event_err_topic", - "inputs": [ - { - "name": "err_topic", - "type": "CodecErrorTestType", - "indexed": true - } - ] - }, - { - "identifier": "event_err_data", - "inputs": [ - { - "name": "data", - "type": "CodecErrorTestType" - } - ] - }, - { - "identifier": "event_a", - "inputs": [ - { - "name": "data", - "type": "u32" - } - ] - }, - { - "docs": [ - "If event identifier is missing, the name of the method will be used." - ], - "identifier": "event_b", - "inputs": [ - { - "name": "arg1", - "type": "BigUint", - "indexed": true - }, - { - "name": "arg2", - "type": "Address", - "indexed": true - }, - { - "name": "data", - "type": "List" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": true, - "types": { - "CodecErrorTestType": { - "type": "struct", - "docs": [ - "Helper type to explore encode/decode errors." - ] - }, - "EsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - }, - "ExampleEnumSimple": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "docs": [ - "Variant 0 doc comment.", - "This will show up in the ABI." - ], - "name": "Variant0", - "discriminant": 0 - }, - { - "name": "Variant1", - "discriminant": 1 - }, - { - "docs": [ - "One line is enough. The one above doesn't have any." - ], - "name": "Variant2", - "discriminant": 2 - } - ] - }, - "ExampleEnumWithFields": { - "type": "enum", - "docs": [ - "Copied from multiversx-sc serialization tests." - ], - "variants": [ - { - "name": "Unit", - "discriminant": 0 - }, - { - "name": "Newtype", - "discriminant": 1, - "fields": [ - { - "name": "0", - "type": "u32" - } - ] - }, - { - "name": "Tuple", - "discriminant": 2, - "fields": [ - { - "name": "0", - "type": "u32" - }, - { - "name": "1", - "type": "u32" - } - ] - }, - { - "name": "Struct", - "discriminant": 3, - "fields": [ - { - "name": "a", - "type": "u32" - } - ] - } - ] - }, - "ExampleStructManaged": { - "type": "struct", - "fields": [ - { - "name": "big_uint", - "type": "BigUint" - }, - { - "name": "int", - "type": "u32" - }, - { - "name": "bytes", - "type": "bytes" - } - ] - }, - "RgbColor": { - "type": "struct", - "fields": [ - { - "name": "r", - "type": "u8" - }, - { - "name": "g", - "type": "u8" - }, - { - "name": "b", - "type": "u8" - } - ] - }, - "TokenAttributesStruct": { - "type": "struct", - "fields": [ - { - "name": "field_biguint", - "type": "BigUint" - }, - { - "name": "field_u64", - "type": "u64" - }, - { - "name": "field_vec_u32", - "type": "List" - } - ] - } - } - }, - "code": "0061736d01000000018a022660000060027f7f0060027f7f017f60017f017f60017f0060037f7f7f017f60037f7f7f006000017f60047f7f7f7f0060047f7f7f7f017f6000017e60027f7e0060017f017e60057f7f7f7f7f0060027f7f017e60037f7f7e017f60017e017f60037f7e7f0060047f7f7f7e0060057f7f7f7e7f0060017e0060057f7f7e7f7f017f60067f7f7f7f7f7f017f60047f7f7e7f0060037f7f7f017e60067e7f7f7f7f7f017f60077f7f7f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060047e7f7f7f017f60027e7f0060017e017e60027f7e017f60037f7f7e0060067f7f7f7f7f7f0060047f7e7f7f0060057f7e7e7e7e00600c7f7f7f7f7f7e7e7e7e7e7e7e0060067f7e7f7f7f7f0002ee177b03656e76126d616e616765645369676e616c4572726f72000403656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000703656e760d6d427566666572417070656e64000203656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001903656e760d6d616e6167656443616c6c6572000403656e76186d616e616765644765744f726967696e616c547848617368000403656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001303656e76136d616e616765644f776e657241646472657373000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6d4275666665725365744279746573000503656e7612626967496e7447657443616c6c56616c7565000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e76126d427566666572476574417267756d656e74000203656e76126d427566666572417070656e644279746573000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e7619736d616c6c496e744765745369676e6564417267756d656e74000c03656e7611676574417267756d656e744c656e677468000303656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000703656e7616736d616c6c496e7446696e697368556e7369676e6564001403656e760d6d42756666657246696e697368000303656e760666696e697368000103656e7614626967496e7446696e697368556e7369676e6564000403656e7609626967496e74537562000603656e762c6d616e616765644d756c74695472616e73666572455344544e4654457865637574655769746852657475726e001503656e760a6765744761734c656674000a03656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000003656e7609626967496e74436d70000203656e760d6d616e616765644d6170476574000503656e7609626967496e744e6577001003656e7616656c6c6970746963437572766547657456616c756573001603656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000903656e76176d427566666572546f536d616c6c496e745369676e6564000c03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000603656e761776616c6964617465546f6b656e4964656e746966696572000303656e760a626967496e7454446976000603656e7609626967496e744d756c000603656e7609626967496e7453686c000603656e7609626967496e74536872000603656e760a626967496e744c6f6732000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000603656e76196d42756666657246726f6d536d616c6c496e745369676e6564000b03656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000b03656e760d6d616e616765644d61704e6577000703656e760d6d616e616765644d6170507574000503656e761b6d616e616765645472616e7366657256616c756545786563757465001503656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e7612626967496e7446696e6973685369676e6564000403656e7614736d616c6c496e7446696e6973685369676e6564001403656e7609626967496e74416273000103656e7609626967496e744e6567000103656e760a626967496e74544d6f64000603656e7609626967496e74416e64000603656e7608626967496e744f72000603656e7609626967496e74586f72000603656e7611676574426c6f636b54696d657374616d70000a03656e760d676574426c6f636b4e6f6e6365000a03656e760d676574426c6f636b526f756e64000a03656e760d676574426c6f636b45706f6368000a03656e76196d616e61676564476574426c6f636b52616e646f6d53656564000403656e761567657450726576426c6f636b54696d657374616d70000a03656e761167657450726576426c6f636b4e6f6e6365000a03656e761167657450726576426c6f636b526f756e64000a03656e761167657450726576426c6f636b45706f6368000a03656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000403656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000403656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000503656e76146d616e6167656456657269667945643235353139000503656e76166d616e61676564566572696679536563703235366b31000503656e761c6d616e61676564566572696679437573746f6d536563703235366b31000903656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000503656e76166d616e61676564566572696679536563703235367231000503656e761e6d616e61676564566572696679424c535369676e61747572655368617265000503656e76236d616e61676564566572696679424c53416767726567617465645369676e6174757265000503656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001a03656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e76136d616e616765645363616c61724d756c744543001603656e76176d616e616765645363616c6172426173654d756c744543000903656e76106d616e616765644d61727368616c4543000903656e761a6d616e616765644d61727368616c436f6d707265737365644543000903656e76126d616e61676564556e6d61727368616c4543000903656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000903656e76146d616e6167656447656e65726174654b65794543000903656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000903656e76176d616e6167656447657445534454546f6b656e44617461001b03656e76176d616e6167656447657445534454546f6b656e54797065001703656e76126d616e616765644d6170436f6e7461696e73000203656e76106d616e616765644d617052656d6f7665000503656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000c03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000903656e76096d4275666665724571000203656e76106d616e616765644173796e6343616c6c00080390068e0607020307040101081003100b020108050106020108010800070103010601030101030101030e01060101110608120801111c07070f0407040704090103010207070e020303080505010105050503050505030306010508020d0305050205070605030505020802090505050105030107020603030201040404000101010101040104010401040104011d0603070808060601010d010705010001080b010404040318030308000504061e02010101030202010102030306020408060103020202010605020803010707010303030c0303030303040606010b0104020201020805020201060501080102020502060502050802060202050109010108010306080101020601080505020201020606020606010808060101040b0311021f0e03200e020206020201070406030802042103170f01120506020202010312080f0f0d050113030302040303070004010101060101020e18010401040d030401030322020204060603020104040404010107070704070407010101040701040701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000230524250605030100030616037f01418080080b7f0041ad9b080b7f0041b09b080b07fc50b403066d656d6f7279020004696e697400f8031070616e6963576974684d65737361676500f9030a636f756e745f6f6e657300fb0319656e64706f696e745f776974685f6d757461626c655f61726700fc030d737172745f6269675f75696e7400fd030d6c6f67325f6269675f75696e7400fe030b706f775f6269675f696e7400ff030c706f775f6269675f75696e740080040f6269675f75696e745f746f5f7536340081041562696775696e745f6f76657277726974655f7536340082040d6269675f75696e745f7a65726f008304136269675f75696e745f66726f6d5f7536345f310084041162696775696e745f66726f6d5f753132380085041c6269675f75696e745f66726f6d5f6d616e616765645f6275666665720086040c6269675f696e745f7a65726f008704126269675f696e745f66726f6d5f6936345f310088040f6269675f75696e745f65715f7536340089040e6269675f696e745f746f5f693634008a0414626967696e745f6f76657277726974655f693634008b04106269675f696e745f746f5f7061727473008c04146269675f696e745f66726f6d5f62696775696e74008d040b6164645f6269675f696e74008e04146164645f6269675f696e745f6269675f75696e74008f04146164645f6269675f75696e745f6269675f696e74009004186164645f6269675f696e745f6269675f75696e745f726566009104186164645f6269675f75696e745f6269675f696e745f7265660092040f6164645f6269675f696e745f7265660093040c6164645f6269675f75696e74009404106164645f6269675f75696e745f7265660095040b7375625f6269675f696e740096040f7375625f6269675f696e745f7265660097040c7375625f6269675f75696e74009804107375625f6269675f75696e745f7265660099040b6d756c5f6269675f696e74009a040f6d756c5f6269675f696e745f726566009b040c6d756c5f6269675f75696e74009c04106d756c5f6269675f75696e745f726566009d040b6469765f6269675f696e74009e040f6469765f6269675f696e745f726566009f040c6469765f6269675f75696e7400a004106469765f6269675f75696e745f72656600a1040b72656d5f6269675f696e7400a2040f72656d5f6269675f696e745f72656600a3040c72656d5f6269675f75696e7400a4041072656d5f6269675f75696e745f72656600a504126164645f61737369676e5f6269675f696e7400a604166164645f61737369676e5f6269675f696e745f72656600a704136164645f61737369676e5f6269675f75696e7400a804176164645f61737369676e5f6269675f75696e745f72656600a904127375625f61737369676e5f6269675f696e7400aa04167375625f61737369676e5f6269675f696e745f72656600ab04137375625f61737369676e5f6269675f75696e7400ac04177375625f61737369676e5f6269675f75696e745f72656600ad04126d756c5f61737369676e5f6269675f696e7400ae04136d756c5f61737369676e5f6269675f75696e7400af04126469765f61737369676e5f6269675f696e7400b004136469765f61737369676e5f6269675f75696e7400b1041272656d5f61737369676e5f6269675f696e7400b2041372656d5f61737369676e5f6269675f75696e7400b304106269745f616e645f6269675f75696e7400b404146269745f616e645f6269675f75696e745f72656600b5040f6269745f6f725f6269675f75696e7400b604136269745f6f725f6269675f75696e745f72656600b704106269745f786f725f6269675f75696e7400b804146269745f786f725f6269675f75696e745f72656600b904176269745f616e645f61737369676e5f6269675f75696e7400ba04166269745f6f725f61737369676e5f6269675f75696e7400bb04176269745f786f725f61737369676e5f6269675f75696e7400bc040c7368725f6269675f75696e7400bd04107368725f6269675f75696e745f72656600be040c73686c5f6269675f75696e7400bf041073686c5f6269675f75696e745f72656600c004137368725f61737369676e5f6269675f75696e7400c1041373686c5f61737369676e5f6269675f75696e7400c204136765745f626c6f636b5f74696d657374616d7000c3040f6765745f626c6f636b5f6e6f6e636500c4040f6765745f626c6f636b5f726f756e6400c5040f6765745f626c6f636b5f65706f636800c604156765745f626c6f636b5f72616e646f6d5f7365656400c704186765745f707265765f626c6f636b5f74696d657374616d7000c804146765745f707265765f626c6f636b5f6e6f6e636500c904146765745f707265765f626c6f636b5f726f756e6400ca04146765745f707265765f626c6f636b5f65706f636800cb041a6765745f707265765f626c6f636b5f72616e646f6d5f7365656400cc040a6765745f63616c6c657200cd04116765745f6f776e65725f6164647265737300ce04146765745f73686172645f6f665f6164647265737300cf041169735f736d6172745f636f6e747261637400d004136765745f73746174655f726f6f745f6861736800d1040b6765745f74785f6861736800d2040c6765745f6761735f6c65667400d3041f6765745f63756d756c617465645f76616c696461746f725f7265776172647300d404116765745f636f64655f6d6574616461746100d5041369735f6275696c74696e5f66756e6374696f6e00d60410636f6465635f6572725f66696e69736800d70415636f6465635f6572725f73746f726167655f6b657900d80415636f6465635f6572725f73746f726167655f67657400d90415636f6465635f6572725f73746f726167655f73657400da0415636f6465635f6572725f6576656e745f746f70696300db0414636f6465635f6572725f6576656e745f6461746100dc0417636f6465635f6572725f636f6e74726163745f696e697400dd0417636f6465635f6572725f636f6e74726163745f63616c6c00de040e636f6d707574655f73686132353600df0411636f6d707574655f6b656363616b32353600e00411636f6d707574655f726970656d6431363000e104147665726966795f626c735f7369676e617475726500e204187665726966795f656432353531395f7369676e617475726500e3041a7665726966795f736563703235366b315f7369676e617475726500e404217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500e5041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500e6041a7665726966795f7365637032353672315f7369676e617475726500e7041a7665726966795f626c735f7369676e61747572655f736861726500e8041f7665726966795f626c735f616767726567617465645f7369676e617475726500e904086563686f5f75363400ea04086563686f5f69363400eb04086563686f5f69333200ec04086563686f5f75333200ed040a6563686f5f6973697a6500ee040a6563686f5f7573697a6500ed04076563686f5f693800ef04076563686f5f753800f004096563686f5f626f6f6c00f1040d6563686f5f6f70745f626f6f6c00f2040c6563686f5f6e6f7468696e6700f3040d6563686f5f61727261795f753800f404146563686f5f6d756c74695f76616c75655f75333200f504176563686f5f6d756c74695f76616c75655f7475706c657300f604126563686f5f7365725f6578616d706c655f3200f704106563686f5f73696d706c655f656e756d00f8041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100f904136563686f5f6e6f6e5f7a65726f5f7573697a6500fa041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300fb040d6563686f5f617272617976656300fc040d6563686f5f6269675f75696e7400fd040c6563686f5f6269675f696e7400fe04136563686f5f6d616e616765645f62756666657200ff04146563686f5f6d616e616765645f61646472657373008005136563686f5f6d616e616765645f6f7074696f6e008105186563686f5f6269675f696e745f6d616e616765645f766563008205126563686f5f6269675f696e745f7475706c65008305136563686f5f6269675f696e745f6f7074696f6e0084051b6563686f5f7475706c655f696e746f5f6d756c7469726573756c740085051f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f766563008605246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e7469666965720087051f6563686f5f6d616e616765645f6173796e635f726573756c745f656d707479008805176563686f5f7661726167735f6d616e616765645f73756d0089051c6563686f5f7661726167735f7665635f776974685f636f756e746564008a0527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f31008b0527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f32008c0512636f6d707574655f6765745f76616c756573008d0511636f6d707574655f6372656174655f6563008e0515636f6d707574655f6765745f65635f6c656e677468008f0520636f6d707574655f6765745f707269765f6b65795f627974655f6c656e6774680090050e636f6d707574655f65635f61646400910511636f6d707574655f65635f646f75626c6500920516636f6d707574655f69735f6f6e5f63757276655f656300930513636f6d707574655f7363616c61725f6d756c7400940518636f6d707574655f7363616c61725f626173655f6d756c7400950512636f6d707574655f6d61727368616c5f65630096051d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300970514636f6d707574655f756e6d61727368616c5f65630098051f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300990517636f6d707574655f67656e65726174655f6b65795f6563009a05096c6f674576656e7441009b050f6c6f674576656e7441526570656174009c05096c6f674576656e7442009d05136f6e6c795f6f776e65725f656e64706f696e74009e051a6f6e6c795f757365725f6163636f756e745f656e64706f696e74009f050e726571756972655f657175616c7300a0050873635f70616e696300a105136d616464726573735f66726f6d5f617272617900a2051c6d616464726573735f66726f6d5f6d616e616765645f62756666657200a3050b6d6275666665725f6e657700a4050e6d6275666665725f636f6e63617400a505126d6275666665725f636f70795f736c69636500a605126d6275666665725f7365745f72616e646f6d00a7050a6d6275666665725f657100a805146d616e616765645f616464726573735f7a65726f00a905126d616e616765645f616464726573735f657100aa050f6d616e616765645f7665635f6e657700ab05186d616e616765645f7665635f62696775696e745f7075736800ac05166d616e616765645f7665635f62696775696e745f657100ad05186d616e616765645f7665635f616464726573735f7075736800ae050f6d616e616765645f7665635f73657400af05126d616e616765645f7665635f72656d6f766500b005106d616e616765645f7665635f66696e6400b105146d616e616765645f7665635f636f6e7461696e7300b205146d616e616765645f7265665f6578706c6963697400b3051073746f726167655f726561645f72617700b4051173746f726167655f77726974655f72617700b5051973746f726167655f726561645f66726f6d5f6164647265737300b6050a6c6f61645f627974657300b7050d6c6f61645f6269675f75696e7400b8050c6c6f61645f6269675f696e7400b905086c6f61645f75363400ba050a6c6f61645f7573697a6500bb05086c6f61645f69363400bc05096c6f61645f626f6f6c00bd05096c6f61645f6164647200be050d6c6f61645f6f70745f6164647200bf051169735f656d7074795f6f70745f6164647200c0050f6765745f6e725f746f5f636c65617200c10513636c6561725f73746f726167655f76616c756500c2050a6c6f61645f7365725f3200c305096c6f61645f6d61703100c405096c6f61645f6d61703200c505096c6f61645f6d61703300c605156c6f61645f66726f6d5f616464726573735f72617700c7050b73746f72655f627974657300c8050e73746f72655f6269675f75696e7400c9050d73746f72655f6269675f696e7400ca050b73746f72655f7573697a6500cb050973746f72655f69333200cc050973746f72655f75363400cd050973746f72655f69363400ce050a73746f72655f626f6f6c00cf050a73746f72655f6164647200d0050e73746f72655f6f70745f6164647200d1050b73746f72655f7365725f3200d2050a73746f72655f6d61703100d3050a73746f72655f6d61703200d4050a73746f72655f6d61703300d5051273746f72655f72657365727665645f69363400d6051773746f72655f72657365727665645f6269675f75696e7400d7051573746f72655f72657365727665645f7665635f753800d80517746f6b656e5f6861735f7472616e736665725f726f6c6500d9050f74696d656c6f636b5f6d617070657200da051a74696d656c6f636b5f7365745f696e697469616c5f76616c756500db051d74696d656c6f636b5f7365745f756e6c6f636b5f74696d657374616d7000dc051674696d656c6f636b5f636f6d6d69745f616374696f6e00dd051d74696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d7000de051974696d656c6f636b5f6765745f6675747572655f76616c756500df052574696d656c6f636b5f6765745f63757272656e745f76616c75655f61745f6164647265737300e0052874696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d705f61745f6164647265737300e1052474696d656c6f636b5f6765745f6675747572655f76616c75655f61745f6164647265737300e2051b616464726573735f746f5f69645f6d61707065725f6765745f696400e30524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f00e40520616464726573735f746f5f69645f6d61707065725f6765745f6164647265737300e5051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300e60518616464726573735f746f5f69645f6d61707065725f73657400e70525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400e80521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400e90526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6164647265737300ea050d6765744c6973744d617070657200eb05126c6973744d6170706572507573684261636b00ec05136c6973744d61707065725075736846726f6e7400ee05126c6973744d6170706572506f7046726f6e7400ef05116c6973744d6170706572506f704261636b00f0050f6c6973744d617070657246726f6e7400f1050e6c6973744d61707065724261636b00f205136c6973744d617070657250757368416674657200f305146c6973744d6170706572507573684265666f726500f405146c6973744d617070657252656d6f76654e6f646500f505186c6973744d617070657252656d6f76654e6f64654279496400f605126c6973744d617070657253657456616c756500f705166c6973744d617070657253657456616c75654279496400f805176c6973744d617070657249746572617465427948616e6400f905176c6973744d61707065724974657261746542794974657200fa050c71756575655f6d617070657200fb051671756575655f6d61707065725f707573685f6261636b00fc051671756575655f6d61707065725f706f705f66726f6e7400fd051271756575655f6d61707065725f66726f6e7400fe050a6d61705f6d617070657200ff050f6d61705f6d61707065725f6b657973008006116d61705f6d61707065725f76616c756573008106116d61705f6d61707065725f696e73657274008206176d61705f6d61707065725f636f6e7461696e735f6b65790083060e6d61705f6d61707065725f676574008406116d61705f6d61707065725f72656d6f76650085062c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74008606226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c740087061b6d61705f6d61707065725f656e7472795f616e645f6d6f64696679008806236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b6579008906176d61705f73746f726167655f6d61707065725f76696577008a06216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c74008b061f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b6579008c06166d61705f73746f726167655f6d61707065725f676574008d061f6d61705f73746f726167655f6d61707065725f696e736572745f76616c7565008e061c6d61705f73746f726167655f6d61707065725f6765745f76616c7565008f06196d61705f73746f726167655f6d61707065725f72656d6f7665009006186d61705f73746f726167655f6d61707065725f636c656172009106346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74009206386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c740093062a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174650094060a7365745f6d6170706572009506117365745f6d61707065725f696e73657274009606137365745f6d61707065725f636f6e7461696e73009706117365745f6d61707065725f72656d6f7665009806107365745f6d61707065725f66726f6e740099060f7365745f6d61707065725f6261636b009a060f7365745f6d61707065725f6e657874009b06137365745f6d61707065725f70726576696f7573009c061e7365745f6d61707065725f697465725f66726f6d5f616e645f636f756e74009d061a6d61705f6d795f73696e676c655f76616c75655f6d6170706572009e06226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f31009f06226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3200a0062c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f7265717569726500a106236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d70747900a20619636c6561725f73696e676c655f76616c75655f6d617070657200a306246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d617070657200a4062769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200a506237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200a606207365745f73696e676c655f76616c75655f6d61707065725f776974685f6b657900a7060a7665635f6d617070657200a8060f7665635f6d61707065725f7075736800a9060e7665635f6d61707065725f67657400aa06197665635f6d61707065725f6765745f61745f6164647265737300ab060e7665635f6d61707065725f6c656e00ac06197665635f6d61707065725f6c656e5f61745f6164647265737300ad0614746f6b656e5f617474726962757465735f73657400ae0617746f6b656e5f617474726962757465735f75706461746500af061f746f6b656e5f617474726962757465735f6765745f6174747269627574657300b0061a746f6b656e5f617474726962757465735f6765745f6e6f6e636500b10616746f6b656e5f617474726962757465735f636c65617200b2061f746f6b656e5f617474726962757465735f6861735f6174747269627574657300b306106164645f746f5f77686974656c69737400b4061572656d6f76655f66726f6d5f77686974656c69737400b5060e636865636b5f636f6e7461696e7300b60619636865636b5f636f6e7461696e735f61745f6164647265737300b70610726571756972655f636f6e7461696e7300b8061b726571756972655f636f6e7461696e735f61745f6164647265737300b9061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00ba061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00bb062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500bc06187365745f6c6f63616c5f726f6c65735f66756e6769626c6500bd060d6d696e745f66756e6769626c6500be06166d696e745f616e645f73656e645f66756e6769626c6500bf060d6275726e5f66756e6769626c6500c006146765745f62616c616e63655f66756e6769626c6500c1061b726571756972655f73616d655f746f6b656e5f66756e6769626c6500c2061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500c3061267657446756e6769626c65546f6b656e496400c4061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100c506176d61707065725f6e66745f7365745f746f6b656e5f696400c606116d61707065725f6e66745f63726561746500c7061a6d61707065725f6e66745f6372656174655f616e645f73656e6400c806176d61707065725f6e66745f6164645f7175616e7469747900c906206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400ca060f6d61707065725f6e66745f6275726e00cb06166d61707065725f6e66745f6765745f62616c616e636500cc061b6d61707065725f6765745f746f6b656e5f6174747269627574657300cd06156765744e6f6e46756e6769626c65546f6b656e496400ce0615696e69745f756e697175655f69645f6d617070657200cf0614756e697175655f69645f6d61707065725f67657400d0061c756e697175655f69645f6d61707065725f737761705f72656d6f766500d10614756e697175655f69645f6d61707065725f73657400d20610756e697175655f69645f6d617070657200d30614756e6f7264657265645f7365745f6d617070657200d4061b756e6f7264657265645f7365745f6d61707065725f696e7365727400d5061d756e6f7264657265645f7365745f6d61707065725f636f6e7461696e7300d6061b756e6f7264657265645f7365745f6d61707065725f72656d6f766500d706116d616e616765645f7374727563745f657100d8060c6f766572666c6f775f75313600d9060f6e6f5f6f766572666c6f775f69313600da060c6f766572666c6f775f69313600db0615746f6b656e5f6964656e7469666965725f65676c6400dc061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100dd061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200de06136e6f6e5f7a65726f5f7573697a655f6974657200df06146e6f6e5f7a65726f5f7573697a655f6d6163726f00e0061472657475726e735f65676c645f646563696d616c00e106147365745f636f6e74726163745f6164647265737300e2061369735f656d7074795f61745f6164647265737300e30613636f6e7461696e735f61745f6164647265737300e4060e6c656e5f61745f6164647265737300e5060f6e6578745f61745f6164647265737300e6061370726576696f75735f61745f6164647265737300e7061066726f6e745f61745f6164647265737300e8060f6261636b5f61745f6164647265737300e9060f6b6579735f61745f6164647265737300ea061176616c7565735f61745f6164647265737300eb061d636f6e7461696e735f756e6f7264657265645f61745f6164647265737300ec060c6765745f62795f696e64657800ed060f66696c6c5f7365745f6d617070657200ee060f66696c6c5f6d61705f6d617070657200ef061966696c6c5f756e6f7264657265645f7365745f6d617070657200f006206765745f76616c75655f66726f6d5f616464726573735f776974685f6b65797300f10628616464726573735f746f5f69645f6d61707065725f6765745f69645f66726f6d5f6164647265737300f206186d616e616765645f646563696d616c5f6164646974696f6e00f3061b6d616e616765645f646563696d616c5f7375627472616374696f6e00f406126d616e616765645f646563696d616c5f657100f506156d616e616765645f646563696d616c5f7472756e6300f6061e6d616e616765645f646563696d616c5f696e746f5f7261775f756e69747300f706126d616e616765645f646563696d616c5f6c6e00f806146d616e616765645f646563696d616c5f6c6f673200f9061c6d616e616765645f646563696d616c5f6164646974696f6e5f76617200fa061f6d616e616765645f646563696d616c5f7375627472616374696f6e5f76617200fb06166d616e616765645f646563696d616c5f65715f76617200fc06166d616e616765645f646563696d616c5f6c6e5f76617200fd06186d616e616765645f646563696d616c5f6c6f67325f76617200fe06066d6d5f67657400ff060b6d6d5f636f6e7461696e730080070d6d6d5f72656d6f76655f676574008107156d6d5f6d757461626c655f696e7075745f746573740082070863616c6c4261636b008307226563686f5f7661726167735f7665635f776974685f636f756e7465645f7061697273008a050e6f766572666c6f775f7573697a6500d9060b6f766572666c6f775f753800d9060c6f766572666c6f775f75333200d9060c6f766572666c6f775f75363400d9060e6f766572666c6f775f6973697a6500db060b6f766572666c6f775f693800db060c6f766572666c6f775f69333200db060c6f766572666c6f775f69363400db06136269675f75696e745f66726f6d5f7536345f32008404126269675f696e745f66726f6d5f6936345f320088041c69735f656d7074795f73696e676c655f76616c75655f6d617070657200a406196563686f5f7661726167735f6d616e616765645f656167657200f5040f706f775f6269675f696e745f72656600ff0310706f775f6269675f75696e745f726566008004116c6f67325f6269675f75696e745f72656600fe03166d756c5f61737369676e5f6269675f696e745f72656600ae04176d756c5f61737369676e5f6269675f75696e745f72656600af04166469765f61737369676e5f6269675f696e745f72656600b004176469765f61737369676e5f6269675f75696e745f72656600b1041672656d5f61737369676e5f6269675f696e745f72656600b2041772656d5f61737369676e5f6269675f75696e745f72656600b3041b6269745f616e645f61737369676e5f6269675f75696e745f72656600ba041a6269745f6f725f61737369676e5f6269675f75696e745f72656600bb041b6269745f786f725f61737369676e5f6269675f75696e745f72656600bc04177368725f61737369676e5f6269675f75696e745f72656600c1041773686c5f61737369676e5f6269675f75696e745f72656600c20411737172745f6269675f75696e745f72656600fd03206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f726566008604116e6f5f6f766572666c6f775f7573697a6500da060e6e6f5f6f766572666c6f775f753800da060f6e6f5f6f766572666c6f775f75333200da060f6e6f5f6f766572666c6f775f75363400da060f6e6f5f6f766572666c6f775f75313600da06116e6f5f6f766572666c6f775f6973697a6500da060e6e6f5f6f766572666c6f775f693800da060f6e6f5f6f766572666c6f775f69333200da060f6e6f5f6f766572666c6f775f69363400da060a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01050ac09a038e060a0041808008410f107c0b1101017f107e220220002001100f1a20020b1601017f107e220142001001200120012000100220010b2801027f41a49a08280200220141016b2200200148044041a49a08200036020020000f0b10a002000b0d0020004116418f80081088070b7a01027f230041106b22022400027f41002001109f01220110a9020d001a02402001100a4107470d002002410036000b2002410036020820014100200241086a2203410710b5011a200341a1920841071085070d0041010c010b200110cc021a41020b21032000200136020420002003360200200241106a24000b0900200020011003000b1c00200120034b044010fa03000b20002001360204200020023602000b0e01017f107e22012000100120010b0f01017f10042201200010051a20010b0f01017f107e2201200010860120010b0b002000200110a40210010b1200200041024f044020011084011a0b20000b6c01047f230041106b2203240020012802042202047f200341086a20012802002204280200200441046a220528020020021089012001200328020c360204200428020020052802002002108a01210241010541000b21012000200236020420002001360200200341106a24000b6f01027f230041106b22042400200441046a22052001200241a88908410b200310f202220110fd022005200110fc022102200441046a200110fc0221032004280208200428020c10d201450440200141a58008410e10a201000b2000200336020420002002360200200441106a24000b14002000200141b389084106200210f20210e9020b5d01037f230041106b2203240020012802042202047f200341086a200128020022042802002002108c012001200328020c36020420042802002002108d01210241010541000b21012000200236020420002001360200200341106a24000b6d01027f230041106b22032400200341046a2204200141a88908410b200210f2022201109e012004200110fc022102200341046a200110fc0221042003280208200328020c10d201450440200141a58008410e10a201000b2000200436020420002002360200200341106a24000b1200200041b389084106200110f20210cb020b10002000200141db8008411b108f01000b160020002001107c22002002200310141a20001000000b7901027f230041106b22022400200241086a2001108b01024020002002280208410171047f200220012802082201280200200141086a280200200228020c22011091012002280200410171450d0120022802042103200020013602042000200336020841010541000b360200200241106a24000f0b109201000b2a002001200310dc02047f2002200310db02210341010541000b210120002003360204200020013602000b060010a002000b080041014100107c0b0c002001200010950110061a0b0f01017f107e2201200010351a20010b910102047f017e230041206b2202240020002001280200410146047f200141106a22032802002104200129020421062002410c6a2001280214280200200128020c220510970120032002411c6a280200360200200141086a200241146a2902003702002001200229020c370200200020043602102000200536020c2000200637020441010541000b360200200241206a24000b2401017f200020012002108503047f410005200041046a2001200210860341010b3602000b0c0020002001109901109a010b0d002000107e220010131a20000b190020002001100a36020820004100360204200020013602000b0c002000109c012001109d010b0f01017f107e22012000102c1a20010b5101027f230041106b2202240020022000100a220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410141a2001200010051a200241106a24000b0c0020002001109f01109a010b0d002000107e220010381a20000b3a02017f017e230041106b2202240020022000109f0110a1012002280200450440200141a58008410e10a201000b2002290308200241106a24000b2101017e20002001100a41084d047e20002001102b37030842010542000b3703000b2c01017f419d8d08411b107c2203200010051a200341a98308410310141a20032001200210141a20031000000b0c0020001095012001109d010b0a0020002001108101000b1500200020012002410b41da840841cd84081087070b190020012002107c21012000109301360204200020013602000b4401017f10930121040240200328020010be01450440200328020010840121040c010b200441e088084104100f1a0b2002200410c30120002002360204200020013602000b2301017f109301220420031096022002200410c30120002002360204200020013602000b17002002200310970220002002360204200020013602000b1701017e1020416210211087022000200110ac011a10220b1500200020012002411241f2840841e584081087070b150020004162200120022003107e220110071a20010b0c01017f107e2200100820000b0c01017f107e2200100920000b2e01027f107e21032001100a2104200010b001200141889b08100b1a41e89a0841889b08200420022003100c20030b0b00200041e89a08100b1a0b0c01017f107e2200100d20000b7501037f230041306b22012400024010b3012203100a4170714110460440200141206a220210b401200341002002411010b5010d01200141106a200210b601200041086a200141186a29030037030020002001290310370300200141306a24000f0b418b820841221003000b41f28708411d1003000b9a0101027f230041206b22002400410210b701450440415a100e0b0240410410b7010d00415841878308410b100f1a2000415a100a360208200042daffffff0f37020003402000410f6a200010b80120002d000f4101470d0141582000280010220141187420014180fe03714108747220014108764180fe03712001411876727210b901450d000b41ad820841181003000b200041206a2400415a0b3e01027f230041106b21010340200120026a41003a0000200241016a22024110470d000b20002001290000370000200041086a200141086a2900003700000b0f00200020012003200210784100470b6b02037f017e230041106b220324002003410436020c2001280000210220012003410c6a220410bc01210520002001200410bd0136020c200020053703002000200241187420024180fe03714108747220024108764180fe037120024118767272360208200341106a24000b2b01027f200041ac9b082d0000220171200041ff017146220245044041ac9b0820002001723a00000b20020b7d01037f230041106b2202240002402001280204220320012802084904402003200341106a22044d0440200210b401200128020020032002411010b5011a20012004360204200041013a000020002002290000370001200041096a200241086a2900003700000c020b10a002000b200041003a00000b200241106a24000b0b0020002001107941004a0b1100410110b701450440415d10100b415d0bc50101047f230041206b22012400410810b701450440415910110b02400240024002404159100a4104760e020102000b41ea8208411d1003000b415d2100415d420010010c010b2001410c6a220010b401415941002000411010b5014504402001410436021c200128020c210220002001411c6a220310bc011a2000200310bd012100200241187420024180fe03714108747220024108764180fe03712002411876727210be010d0141c5820841251003000b41f28708411d1003000b200141206a240020000b7f02017e027f2001280200220341086a220420034f044020012004360200200020036a290000220242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840f0b10a002000b4b01027f2001280200220241046a220320024f044020012003360200200020026a280000220041187420004180fe03714108747220004108764180fe0371200041187672720f0b10a002000b1400415841878308410b100f1a4158200010b9010b0c002000107e2200101220000b2e01017f419283084117107c22042000200110141a200441a98308410310141a20042002200310141a20041000000b2f01017f10930121030340200028020041a89b082802004e450440200320002001200210c20110c3010c010b0b20030b0e0020002001200210c6011099010b4a01017f230041106b2202240010ea011a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410141a200241106a24000ba80101027f230041106b22022400027f200141d99108410610c501220341ebde0147410020031b45044041002103200141d99108410610c60141d99108410610c70121012002410c6a0c010b027f200128020041a89b082802004e04401093010c010b200141d99108410610c2010b21012002200336020c41012103200241086a0b2001360200200020033602002000200228020c36020420002002280208360208200241106a24000b120020002001200210c6012001200210e5010b3001017f2000280200220341a89b082802004e04402001200241ac8308411110c001000b2000200341016a36020020030b4001017f230041106b22032400200341086a200010ed0110e90120032802084101710440200328020c200341106a24000f0b2001200241d38808410d10c001000b1600200041e39208410e10c90141e39208410e10ca010b4001017f230041106b22032400200341086a200010fb0120032802084101710440200328020c108401200341106a24000f0b2001200241ac8308411110c001000b210020001084012200100a41204704402001200241a89208411010c001000b20000b120020002001200210c6012001200210e4010b1000200041d39008410b10c9011084010b1600200041c48d08411410c60141c48d08411410e5010b4501027f230041106b22032400200341046a220410a2022003410036020c200120042003410c6a220110a30220022004200110a30220002004410810141a200341106a24000ba80101037f230041106b22032400200341046a220410b30220032001280208220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001280204220241187420024180fe03714108747220024108764180fe03712002411876727236020820032001280200220141187420014180fe03714108747220014108764180fe03712001411876727236020420002004410c10141a200341106a24000b2c01017e2000101622034280808080087d42ffffffff6f5804402001200241d19208411210c001000b2003a70b5d01027f027f410020012002200310c501220445200441ebde0146720d001a200128020041a89b082802004e0440109301210541010c010b20012002200310c201210541010b21012000200536020820002004360204200020013602000b0a002000200110d701450b4301017f02402000280200200028020422052001200210b501450440200220056a220120054f0d0110a002000b2003200441a68708410f10c001000b200020013602040b800101037f230041106b22012400200141046a22022000109801200241f59108410a10d501200141046a41f59108410a10d5012102200141046a41f59108410a10d50121032001280208200128020c10d20145044041f59108410a41a58008410e10c001000b200141106a240041ff01712003411074200241ff017141087472720b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210d30120032d000f200341106a24000b6901047f230041106b2203240020001099012104109301210520032004100a220036020c200341003602082003200436020403402006200010d70104402005200341046a2001200210d80110c301200328020c2100200328020821060c010b0b200341106a240020050b1400200020014d0440200120006b0f0b10a002000b0e0020002001200210dd01109e020b0d00410041db8f08410110d0010bda0102027f017e230041106b220324000240410010170440200341046a220441001098010240024002400240024020042001200210d50141ff017122040e0404010203000b2001200241b38008410d10c001000b200341046a2001200210db01ad2105410121040c020b200341046a2001200210db01ad200341046a2001200210db01ad422086842105410221040c010b200341046a2001200210db01ad2105410321040b2003280208200328020c10d201450d010b2000200537020420002004360200200341106a24000f0b2001200241a58008410e10c001000b5301017f230041106b220324002003410036020c20002003410c6a41042001200210d301200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1000200041b88d08410110dd01109d020b1400200020002001200210db012001200210e2010b2301017e20001015220342ff015804402003a70f0b2001200241a58008410e10c001000b2601017e4100101622024280017d42ff7d5804402000200141d19208411210c001000b2002a70b6301027f230041106b22042400200441046a2205200110980120052002200310d801210120052002200310db0121052004280208200428020c10d2014504402002200341a58008410e10c001000b2000200536020420002001360200200441106a24000b6901047f230041106b2202240020001099012103109301210420022003100a220036020c200241003602082002200336020403402005200010d70104402004200241046a2001410310dd0110c301200228020c2100200228020821050c010b0b200241106a240020040b6201027f230041106b22042400200441086a2000280200200028020422052001109f02024020042802084101710440200120056a220120054f0d0110a002000b2002200341a68708410f10c001000b200428020c20002001360204200441106a24000b0b0020002001200210e4010b210020001099012200100a41204704402001200241a89208411010c001000b20000b2601017e20001015220342ffffffff0f5804402003a70f0b2001200241a58008410e10c001000b8c0202037f017e230041206b220224002002410c6a22032001109801200341f59108410a10d8012104200242003703182003200241186a410841f59108410a10d30120022903182105200341f59108410a10db012101109301210303402001044020032002410c6a41f59108410a10db0110c301200141016b21010c010b0b2002280210200228021410d20145044041f59108410a41a58008410e10c001000b2000200336020c200020043602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200241206a24000b0b0020002001200210e5010b4b01017f230041106b2201240002402000100a4104470d002001410036020c200041002001410c6a410410b5011a200128020c41c58eb1a204470d0010c20221000b200141106a240020000b1c01017f200110be01210220002001360204200020024101733602000b2c01027f230041106b210103402001410c6a20006a41003a0000200041016a22004104470d000b200128020c0b0b0041002000200110c7010b7501037f230041106b22042400200441046a2203200110980120032002410210d801210120032002410210db01210520032002410210dd0121032004280208200428020c10d2014504402002410241a58008410e10c001000b200020033602082000200536020420002001360200200441106a24000b0a00200010990110e8010b0c002000107e2200101820000b3301017e027f0240200010152202420158044041002002a741016b0d021a0c010b2001410141d19208411210c001000b41010b0b1400200020014f04400f0b41bd830841121003000b190041a89b0828020020004c04400f0b41bd830841121003000b1400101920004604400f0b41cf830841191003000b1900200041a89b082802004c04400f0b41ac830841111003000b0b0041a89b0810193602000b18002000109301220010a3012001200010f6012000101b1a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410141a200241106a24000b0c002000101b1a2001101b1a0b2700200041017104401093012200410110f9012001200010f6012000101b1a0f0b41014100101c0b2701017f230041106b22022400200220013a000f20002002410f6a410110141a200241106a24000b5001017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10fb0120012802084101710440200128020c101b1a0c010b0b200141206a24000b6301027f230041106b220224002002410b6a200110c80320022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4a01017f10930121012000280200200110a3012000280204200110a3012000280208200110a301200028020c200110a3012000280210200110a3012000280214200110f6012001101b1a0b2700200041017104401093012200410110f9012000200110051a2000101b1a0f0b41014100101c0b5c01027f230041206b22012400109301210220012000100a36021c20014100360218200120003602140340200141086a200141146a10fb0120012802084101710440200128020c200210a3010c010b0b2002101b1a200141206a24000b100020004101714504402001ad101a0b0b7a01017f0240024002400240200028020041016b0e03010203000b4200101a0f0b1093012201410110f9012000280204200110f6012001101b1a0f0b1093012201410210f9012000280204200110f6012000280208200110f6012001101b1a0f0b1093012201410310f9012000280204200110f6012001101b1a0b0a002000101d2001101d0b2c01017f10930121012000280208200110830220002903002001108402200028020c200110a3012001101b1a0b1e00200010be0145044020002001109d010f0b41e088084104200110c9030b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810141a200241106a24000b2000200020012002101e200010860241ff017104400f0b4186840841301003000b140020001077220041004a20004100486b41016a0b0a0041764200100141760b0d002000200120022003107a000b2200200020012002108a022000419685084191850820031b4104410520031b108a020b1701017f109301220320012002100f1a2000200310c3010b4c01017f230041106b22032400200341086a20012802002001280204200210950220012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b1601017f10930122022001ad1096022000200210c3010b13001093011a2000200128020010840110c3010b7a01037f230041106b22052400200541086a41858608411610a60120052802082107200528020c22062002108f0220062003108f022006200441ff0171410274220241e499086a280200200241849a086a280200108a0220064100108c02200020063602042000200736020020002001360208200541106a24000b10001093011a2000200110840110c3010b1a01027f10ae01210041a08608410a107c2201200010051a20010b1c01017f2002200028022046047f2000200120021085070541010b450b9e0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a2001100a2206200241106a4120108201200141002002280208200228020c10b5011a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b0c0041aa8608411c109402000b0e001093011a20002001108e01000b21001093011a2002200328020010840110c30120002002360204200020013602000b3101017f230041106b22022400200220014100200241086a10d903200020022802002002280204100f1a200241106a24000b13001093011a2000200128020010950110c3010bae0202017e067f230041106b220224002000290300210120002802102105200028020c20002802081093012106109301210710930121042802001084012100280200107d2103200210b4012002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484843702042002200041187420004180fe03714108747220004108764180fe0371200041187672723602002002200341187420034180fe03714108747220034108764180fe03712003411876727236020c20042002411010141a02402004100a044020052802002004420020062007101f0d01200241106a24000f0b41b881084121108101000b41b684084117108101000bae0101047f2000109a02200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22022400200241e68608109b0236020c230041106b22002400200141106a2201280200210320002002410c6a36020420002001290208370208200041046a2200280200280200200328020020002802042000280208108802000b7d01037f230041206b22012400109002109301210220002802002000280204200210c9032000280208220010b002200210f60120012000100a36021c20014100360218200120003602140340200141086a200141146a10fb0120012802084101710440200128020c2002109d010c010b0b200210061a200141206a24000b080020004120107c0b3c02017f017e230041106b220324002003200010a101200328020041014604402003290308200341106a24000f0b2001200241a58008410e10c001000b0d002000107e2200102d1a20000b0d002000107e220010361a20000b1f0020012002200310042201102921022000200136020420002002453602000b060010fa03000b6001027f230041106b22032400200341086a2000280200200028020422042001109f02024020032802084101710440200120046a220120044f0d0110a002000b200241a68708410f10a201000b200328020c20002001360204200341106a24000b3101027f230041106b21020340200241086a20016a41003a0000200141016a22014108470d000b200020022903083700000b4b01017f2001200228020022036a200041187420004180fe03714108747220004108764180fe0371200041187672723600002003200341046a22004d0440200220003602000f0b10a002000b15002000420053044041b5870841111003000b20000b0f0020002001107e220010241a20000b5301057f200142001025220242001025220342001025220442001025220542001025220610261a200020011027360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41c68708200141e001460d001a2001418904470440200141800347044041002001418002470d031a41ca87080c020b41ce87080c010b41d287080b41041028210241010b210120002002360204200020013602000b2101017e20002001100a41084d047e20002001102a37030842010542000b3703000b07002000100a450b0c00200020002001100220000b1001017f107e220220002001100220020b0a0020002000200110020b0a00200020002001101e0b1701017f200110af022101107e220220002001102e20020b0b0041752000ad100141750b09002000100a4102760b910101047f230041206b220324002001100a21042003410036021c200320043602182003410036021420032001360210024002400340200341086a200341106a10fb012003280208410171450d01200328021c220641016a2201450d02200328020c2003200136021c200210b202450d000b410121050b2000200636020420002005360200200341206a24000f0b10a002000b0900200020011023450b4101027f230041106b21010340200141046a20026a41003a0000200241016a2202410c470d000b20002001290004370000200041086a2001410c6a2800003600000b5401017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b109f02200428020c21012000200428020836020020002001360204200441106a24000f0b10a002000b3a00200020012002411141af880842acacc2ca0242ecd4c6be064285d2fac90842a8c5a0c10a42c085f7bc05429ed69dd501429d9883651086070b1a00200020011034220136020420002001417f73411f763602000b5b01027f0240419c7f20006b2201419c7f48200041004a460440200041c0004f0d01200041a89a086a22022d00004504404175420a100141742000ad1001200141754174102e200241013a00000b20010f0b10a002000b10fa03000b0c00200020002001103220000b1001017f107e220220002001103120020b0c00200020002001103020000b3c02017f017e230041106b220224002002200110c40220002002280200410146047e2000200229030837030842010542000b370300200241106a24000b3a00200020012002411341c08808428094ebdc0342efee9dae09429fb382b00c42dba9e5940f42fb9b9df30742a7b9d0b30242ead28a591086070b5a01017f02400240024002400240200120024b200120024922036b41ff01710e020102000b200120024d0d030c020b2000107d0f0b20030d002000200120026b10b70210be020f0b10a002000b2000200220016b10b70210b9020b1001017f107e220220002001103020020b1b0020012002200310bd02210120002003360204200020013602000b09002000102f4100470b0b002000200020011085020b0a0041878308410b107c0b0e01017f107e22004200100120000b1f0020002001107541004c047e42000520002001107637030842010b3703000b0a002000109f01109e020b0a002000109f01109d020b2101017f2000109f012201100a4120470440200041a89208411010a201000b20010b09002000200010a0010b2301017e2000200010a00122014280025a0440200041a58008410e10a201000b2001a70b3401017e027f02402000200010a0012201420158044041002001a741016b0d021a0c010b200041d19208411210a201000b41010b0b2601017e2000200010a00122014280808080105a0440200041a58008410e10a201000b2001a70b1500200010be01044041d38808410d1003000b20000b0d002000416710381a4167100a0b0b0020004101410010cf020b0d00200020012002107c10061a0b320020014102470440200041a19208410710cf020f0b200210be014504402000200210061a0f0b200041e08808410410cf020b0a0020002001ad10d2020b0f0041672001103b2000416710061a0b0c0020002001109c0110061a0b1200416c41014100100f1a2000416c10061a0b0e0020002001107e2200103920000b0e0020002001416710394167100a0b0c002000200110d80210d4020b1b002000108401220041948908410710141a2001200010f60120000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002109101200429030821072006200210d8022003ad10d20220052001280204200210da021a20002007370300200441106a24000b2c01017f2000200210dc0222034504402001200210e40221012000200210e3022001ad10d2020b20034101730b0c002000200110d80210cb020b0c002000200110e6024100470b3401017f230041106b2202240020022001280200200128020410de022000200228020436020420002001360200200241106a24000baf0101047f230041106b220324002002108401220241b98908410510141a024002402001200210d602450440410021010c010b200341046a22042001200210fd022004200210fc022106200341046a200210fc022101200341046a200210fc022104200341046a200210fc0221052003280208200328020c10d201450d010b2000200536020c200020043602082000200136020420002006360200200341106a24000f0b200241a58008410e10a201000b3701017f230041106b22032400200341086a2000200120021091012003280208410171450440109201000b200328020c200341106a24000b5701037f230041106b22022400200128020821032001280204210420012802004101470440200241086a20042003410010e10220022802082104200228020c21030b2000200436020020002003360204200241106a24000b3001017f230041106b22042400200441086a20012002200310d9022000200136020020002002360204200441106a24000b0c002000200110e30210ce020b1b0020001084012200419b8908410810141a2001200010f60120000baf0101047f230041206b22022400200241106a200010f4020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204108c01200020042002280208200310f5020b200020032004410010f50220022003360218200041b389084106200310f202200110d102200541016a22010d010b10a002000b200220013602102000200241106a10f602200241206a240020030b3801027f230041106b220324002000200210e60222040440200341086a2001200410e7022000200210e2020b200341106a240020044100470b0c002000200110e30210cb020be50101037f230041306b2203240002402002047f200341186a20012002108c01200328021c210420032802182105200341206a200110f402024020050440200341106a20012005108c01200120052003280210200410f5020c010b200320043602240b024020040440200341086a20012004108c01200120042005200328020c10f5020c010b200320053602280b2001200210f10220012002108d0121042001200210f30220032802202202450d012003200241016b3602202001200341206a10f60241010541000b21012000200436020420002001360200200341306a24000f0b10a002000b200020011084012201419b8908410810141a2002200110f6012000200110e9020b2801017e20002001200110ce0322024280808080105a0440200141a58008410e10a201000b2002a70b0e0020002001200210e8024100470b2b0002402002450d00200110cb022002490d002000200210ec022003ad10d2020f0b41a2990841121003000b1b002000108401220041a38908410510141a2001200010f60120000b2901017f200110cb0241016a220304402000200310ec02200210d1022001200310d1020f0b10a002000b0c002000200110ec0210cb020b4b01017f02402001450d0020002802002202200028020810e9022001490d002000280204108401220041a38908410510141a2001200010f6012002200010e9020f0b41a2990841121003000b250002402002450d00200110cb022002490d002000200210ee020f0b41a2990841121003000b1200200041a88908410b200110f20210ce020b1900200010840122002001200210141a2003200010f60120000b1200200041b389084106200110f20210ce020b9c0101057f230041106b2202240002400240200110f702220110cd024504400c010b200241046a22032001109e012003200110fc022106200241046a200110fc022103200241046a200110fc022104200241046a200110fc0221052002280208200228020c10d201450d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141a58008410e10a201000b2500200041a88908410b200110f2022002109301220010f6012003200010f601200010061a0b4e01017f200010f70221022001280200220004402000109301220010f6012001280204200010f6012001280208200010f601200128020c200010f6012002200010061a0f0b20024101410010cf020b14002000108401220041b98908410510141a20000b25002002047f20012002108d01210241010541000b210120002002360204200020013602000b27002003047f200120022003108a01210341010541000b210120002003360204200020013602000b2f01017f230041106b220224002002200128020010f4022000200228020436020420002001360200200241106a24000b3701017f230041206b22022400200241106a200110f402200241086a2001200228021410f80220002002290308370300200241206a24000b5101017f230041106b220224002002410036020c20002002410c6a4104200110b603200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b0e0020002001200210d502109a010b1a002000108401220041cd8908410410141a20002001ad10d2020b15002000200120022003410020022003471b10eb020b2f0002402002450d00200110cb022002490d002000200210ec0210cb022200200220001b0f0b41a2990841121003000b1b00200220011084012201109d012000108401200110d6024100470b1000200120001084012200109d0120000b0f002000200110820310cd024100470bc90101047f230041206b2202240002402000200128020422051085034504402002200010f4020240200128020c22030440200241106a2204200020031086032002200128020822013602182000200320041087030c010b2002200128020822013602040b024020010440200241106a2204200020011086032002200336021c2000200120041087030c010b200220033602080b200020051088034101410010cf0220022802002201450d012002200141016b3602002000200210f6020b200241206a24000f0b10a002000b0d002000200110880310cd02450b8d0101047f230041106b22032400200341046a2204200120021088032201109e012004200110fc022102200341046a200110fc022104200341046a200110fc022105200341046a200110fc0221062003280208200328020c10d201450440200141a58008410e10a201000b2000200636020c200020053602082000200436020420002002360200200341106a24000b3b002000200110880310930121002002280200200010f6012002280204200010f6012002280208200010f601200228020c200010f601200010061a0b1b002000108401220041d18908410510141a2001200010f60120000b2401017f200020012802042203108503450440200120023602002000200320011087030b0b810101027f230041306b220324000240200020012002108503047f4100052003411c6a20012002109701200328021c450d01200341106a2202200341286a290200370300200320032902203703082001200341086a1084032000410c6a20022903003702002000200329030837020441010b360200200341306a24000f0b109201000b2701017f230041106b220224002002200110f402200020012002280204109701200241106a24000b4601017f230041106b220424002004200120022003108d032004280200450440109201000b20002004290204370200200041086a2004410c6a280200360200200441106a24000b2401017f20002001200310dc02047f200041046a20022003108e0341010541000b3602000b20002001108401220141d68908410810141a2002200110f60120002001108f030b3601027f230041106b2202240020011084012103200241086a200110c6032000200229030837020020002003360208200241106a24000b3c01027f200128020821032001280204210220012802004504402002280200200241046a280200200310da021a0b20002003360204200020023602000b0900200042011092030b0f0041672001103a2000416710061a0b0800200010cd02450b16002000200210950310d4022000200110960310d4020b1b002000108401220041899908410410141a2000200110051a20000b1b002000108401220041839908410610141a2001200010840220000b3f01017e200010980310c80242017c22025045044020002001109503200210d20220002002109603200110061a2000109803200210d20220020f0b10a002000b140020001084012200418d9908410610141a20000b2f01017f20012002109603220310cd02047f200310c702210341010541000b210120002003360204200020013602000b0c002000200110950310c8020b3801027f200028020822022001109c032203450440200028020020002802042200200110ed0220022001200010cb02109d030b20034101730b0c0020002001109f034100470b0f0020002001109e032002ad10d2020b1b002000108401220041f88908410610141a2001200010f60120000b0c0020002001109e0310cb020b50000240200028020020002802041087014102470440200110c002450d0120002802084102200110840110d00220002001360204200041023602000f0b418e8a0841141003000b41fe890841101003000b0c01017f107e2200102120000b4701017f230041106b22012400200141086a2000108001024002400240200128020841016b0e020102000b200141106a24000f0b41a28a0841181003000b418e8a0841141003000b4401027f10ad012104200210a903210210930122032004108f0220032001108f02200020033602082000411c411020021b360204200041ff8a0841ef8a0820021b3602000b1c0020002802004102460440200041046a0f0b41fe890841101003000b4d01017f230041106b220424002004200336020820042001200210a603220136020c2004410c6a4200200441086a10ab012000200336020c2000420037030020002001360208200441106a24000b19002000410246044020011084010f0b41fe890841101003000b2e01017f230041106b22012400200141086a200010800120012802084101460440200010d4020b200141106a24000b840401067f230041d0006b2206240020062003360208200620023602042006200436020c200010a203024020052802000440200641186a200541086a280200360200200620052902003703100c010b200641106a2000200410a3030b2006428182848080a0c080013702202006410036021c20004101200610d002230041406a220024002006411c6a22022d000b210320022d000a210420022d0009210520022d0008210720022d0007210820022d0006210920022d0005210a20022d0004210b20022802002102200041106a419b8608410510a6012000200136023c20002000290310370234200041286a2201200041346a200641046a108b022000411c6a2001200641086a108b02200041086a200028021c20002802202006410c6a10a9012000200028020c22013602202000200028020836021c20012002108c022001419a85084109200b108902200141a385084107200a108902200141aa850841082009108902200141b2850841072008108902200141b9850841072007108902200141c08508410e2005108902200141ce8508410a2004108902200141d8850841122003108902200641c4006a22022001360204200220002802243602082002200028021c360200200041406b2400200641306a200641186a280200360200200620062902443703382006200628024c36023420062006290310370328200641286a109902000b0e00200010860241ff017141014b0b330020002001200210ab0310930121002003280208200010a30120032903002000108402200328020c200010ac03200010061a0b22002000108401220041b78c08410510141a2001200010b3032002200010840220000b5c01017f230041206b22022400200010b002200110f60120022000100a36021c20024100360218200220003602140340200241086a200241146a10fb0120022802084101710440200228020c200110f6010c010b0b200241206a24000b100020002001200210ae03200310d2020b910101017f230041206b220324002000108401220041cc8c08410610141a2001200010b30320022802081095012000109d0120022903002000108402200228020c220110b002200010f60120032001100a36021c20034100360218200320013602140340200341086a200341146a10fb0120032802084101710440200328020c200010f6010c010b0b200341206a240020000b0e0020002001200210ae0310d4020b0c002000200110b10310c9020b39002000108401220041c48c08410810141a200110be0145044020012000109d0120000f0b4104200010f601200041e08808410410141a20000b0f002000200110b10310cd024100470b2701017f230041106b22022400200220003a000f20012002410f6a410110141a200241106a24000b14002000108401220041bc8c08410810141a20000b8c0201037f230041206b220424002004410c6a220520012002200310ab032201109e0120052005200110fc02200110a102109e022106200442003703182005200441186a4108200110b603200429031821032004410c6a200110fc022102109301210503402002044020052004410c6a200110fc0210c301200241016b21020c010b0b2004280210200428021410d201450440200141a58008410e10a201000b2000200536020c200020063602082000200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe03832003423888848484370300200441206a24000b4101017f02402000280200200028020422042001200210b501450440200220046a220120044f0d0110a002000b200341a68708410f10a201000b200020013602040b0e0020002001200210b8034101730b0f0020002001200210ab0310cd02450b820402047f017e230041e0006b220524002005200336024020052001200210a60322073602442005109301360248200510c30236024c20051093012206360250200541386a41848508410d10a601200541306a2005280238200528023c200541c4006a10a701200541286a20052802302005280234200541406b10a901200541206a2005280228200528022c200541c8006a109502200541186a20052802202005280224200541cc006a10a901200541106a2005280218200528021c200541d0006a1095022005280210210820052802142101109301108401210220042d0000200210b30320042d0001200210b30320042d0002200210b3032001200210c30102402006100a044020052006100a36025c20054100360258200520063602540340200541086a200541d4006a10fb012005280208410171450d022001200528020c108f020c000b000b109301220241014100100f1a2001200210c3010b1020416210211087022008200110ac0121021022109301210120052002100a36025c200541003602582005200236025403402005200541d4006a10fb01200528020041017104402001200528020410840110c3010c010b0b20052001100a36025c2005410036025820052001360254200541d4006a41868708410b10ba0341868708410b109c0221092000200336020c2000200937030020002007360208200541e0006a24000b6001017f230041106b220324002003410b6a200010c80320032d000b4101460440200328000c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b2001200241ac8308411110c001000b4101017f230041206b220224002002200036021820022001410c6a3602142002200141086a36021020022001290300370308200241086a109802200241206a24000b4d01017f230041106b220524002005200436020820052001200210a603220136020c2005410c6a2003200541086a10ab012000200436020c2000200337030020002001360208200541106a24000b14002000108401220041d28c08410c10141a20000b14002000108401220041de8c08411010141a20000b1401017f109301220220002001107c10c30120020bbd0101037f230041406a22012400200141186a200041046a220210fa02200120012903183702300340200141106a200141306a108b01200128021041017104402000280200200128021410e2020c010b0b200141206a200228020010f40220012802242100034020000440200141086a20022802002000108c01200128020c2002280200200010f1022002280200200010f30221000c010b0b200141386a4200370300200142003703302002280200200141306a10f602200141406b24000b6c01037f230041106b22012400200010c2032102200141086a2000280200200028020422032002109f02024020012802084101710440200220036a22022003490d01200128020c20002002360204200141106a24000f0b419f8108411941a68708410f108f01000b10a002000b5501017f230041106b220124002001410036020c20002001410c6a4104419f8108411910d303200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b5d01057f103c210241809408410e107c10cb02210303402000200346450440200041f293084106107c220110f6012001109f012101200041f893084108107c220410f601200220012004109f01103d1a200041016a21000c010b0b20020b0c0041c59008410e10a401000b5a01017f230041206b22012400200141106a200041046a10fa02200120012903103702180340200141086a200141186a108b01200128020841017104402000280208200128020c10d7020c010b0b200010c003200141206a24000b1901017f2001108401210220002001360204200020023602000b2201017f2001108401220241cd8908410410141a20002002360204200020013602000b7301037f230041106b2202240002402001280204220320012802084904402003200341046a22044d0440200210ea0136020c200128020020032002410c6a410410b5011a20012004360204200041013a00002000200228020c3600010c020b10a002000b200041003a00000b200241106a24000b12002001200210f60120022000200110141a0b820101047f230041106b22022400024020012802042203200128020849044020032003410c6a22044d0440200241046a220510b302200128020020032005410c10b5011a20012004360204200041013a000020002002290004370001200041096a2002410c6a2800003600000c020b10a002000b200041003a00000b200241106a24000b7201047f230041106b2202240002402001280204220320012802084904402003200341086a22044d0440200241086a220510a202200128020020032005410810b5011a20012004360204200041013a0000200020022903083700010c020b10a002000b200041003a00000b200241106a24000b0c002000200110d502109e020b0b0020002001200110ce030ba80102017e017f230041106b22042400200442003703082000200110d5022201100a220041094f0440200241a58008410e10a201000b20014100200420006b41106a200010b5011a20042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b3601027f230041106b2202240020011084012103200241086a200110c7032000200229030837020020002003360208200241106a24000b1900200010be014504402000101b1a0f0b41e088084104101c0b3d01027f230041106b220224002002410036020c20012002410c6a10bd012103200020012002410c6a10bd0136020420002003360200200241106a24000b4f01017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10fb0120012802084101710440200135020c101a0c010b0b200141206a24000b4301017f02402000280200200028020422052001200210b501450440200220056a220120054f0d0110a002000b2003200441a68708410f108f01000b200020013602040b3201017f230041106b22012400200141003a000f20002001410f6a4101418f8808412010d30320012d000f200141106a24000b4901027f20002802082102200028020421012000280200210002400340200120024d04402001417f460d022000280200200110ee02ad101a200141016a21010c010b0b0f0b10a002000b4301017f230041106b220224002002200136020c2002200036020803402002200241086a108b01200228020041017104402002350204101a0c010b0b200241106a24000b3701017e200041b89208410810ba0341b892084108109c0222014280808080105a044041b89208410841a58008410e10c001000b2001a70b1000200041b89208410810ba031084010baa0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200220014200532207716b41ff017122042008a746220520042001423088a741ff01714671220620056a2006410020042009a741ff0171461b22056a2005410020042001422088a741ff0171461b22056a2005410020042001a72205411876461b22066a200641002004200541107641ff0171461b22066a200641002004200541087641ff0171461b22046a200441002001501b6a220420022007200320044107716a2c000041004873200441004771716b22026b3602042000200220036a3602000b2e01017f230041106b22022400200241003a000f20002002410f6a4101200110b60320022d000f200241106a24000bf70201047f230041d0006b220224002002200010920202402002280220450440410021000c010b0240200241ef8a084110109102450440200241ff8a08411c1091020d01410121000c020b10f40141002100410010f3012002410036023c200241406b2002413c6a10c401200228023c10f10120022802442103200228024020022001100a36022c200241003602282002200136022410f401200241246a220110c8012105200110cc0121012002280228200228022c10f0014101710440200510dc03200110d4020c020b20014102200310d0020c010b10f40141002100410010f3012002410036023c200241406b2002413c6a41d99108410610d101200228023c10f101200228024020022001100a360238200241003602342002200136023010f401200241306a220110c8012104200110cc0121012002280234200228023810f0014101710440200410dc03200110d4020c010b200241406b10b20120014102200228024810840110d0020b200241d0006a240020000b2d01017f10ba01220110860241ff017141024f0440416741014100100f1a2000200142001093014167103e1a0b0b2a01017f200110840121032000200210840136020c2000200336020820002002360204200020013602000b2901017f2002108401220341cd8908410410141a2000200336020820002002360204200020013602000b1000200010b00141e89a08103f41004a0b0c002000200110b9014101730b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b1c01027f41f19208410710bf0310930122022000ad109602200210400b0f00200041d49308410a107c108f030b3c01027f230041106b22012400200141086a41de9308410a107c10c603200128020c21022000200128020836020020002002360204200141106a24000b3c01027f230041106b22012400200141086a41e89308410a107c10c703200128020c21022000200128020836020020002002360204200141106a24000b11002000200141e89308410a107c10de030b1601017f10930122022000ad1096022001200210c3010b0a0041d59408410c107c0b0a00418895084116107c0b0a0041ba9508410b107c0b3e01037f230041106b2201240041c595084112107c22021084012103200141086a200210c6032000200129030837020020002003360208200141106a24000b0a0041d79508410b107c0b3801037f41e295084110107c220110840121022001108401220341cd8908410410141a2000200336020420002001360200200020023602080b0a0041f295084110107c0b3301037f41d49308410a107c2102200110840121032002108401210420002001200210dd0320002004360214200020033602100b11002000200141de9308410a107c10dd030b3601037f418296084114107c21022001108401210320021084012104200041086a2001200210de0320002004360204200020033602000b0f002000418296084114107c10cf030b0a0041969608410f107c0b1600200041969608410f107c360204200020013602000b0d002000411341a596081088070b0a0041c09608410f107c0b1600200041c09608410f107c360204200020013602000b09001041410010f2010b0d001041410010f20110fa03000b0b0041d49908410e1003000b10001041410110f201410010157b101a0b4502027f017e1041410310f201410010bf0121004101101521024102419d8e08410410e701210141752002108601200020004175100220002000200110af0210022000101d0b1e01027f1041410110f201410010bf012100107e2201200010372001101d0b3a01017f230041106b220024001041410110f201200041086a410010bf0110b602200035020c420020002802084101711b101a200041106a24000b1e001041410210f201410010ee01410141ed8d08410110e70110ae0210420b1e001041410210f201410010bf01410141ed8d08410110e70110ae02101d0b3701017f230041106b220024001041410110f2012000410010bf0110bb02200028020041014604402000290308101a0b200041106a24000b1d01017f1041410210f201410010bf012200410110151086012000101d0b0e001041410010f20110c302101d0b12001041410110f20141001015108501101d0b3f01027f230041106b220024001041410010f2012000427f3703082000427f370300416720004110100f1a4167107e220110361a2001101d200041106a24000b13001041410110f2014100109901109e02101d0b1701017f1041410010f201107e220042001001200010420b12001041410110f2014100101610830110420b5102017f017e1041410210f201027f410010bf0121004101101510a4022201500440200010860241ff017141016b0c010b417520011001200041751023220041004a20004100486b0b41ff017145ad10430b3701017f230041106b220024001041410110f2012000410010ee0110c40220002802004101460440200029030810430b200041106a24000b1c01017f1041410210f201410010ee012200410110161001200010420b2b01037f1041410110f201410010ee012200108602107e22022000104441ff0171ad42017d10432002101d0b3c01027f1041410210f20141898e08410410df01c0220041004a20004100486b41016a410110bf01210041ff01714504402000200010450b200010420b18001041410210f201410010ee01410110ee0110aa0210420b18001041410210f201410010ee01410110bf0110aa0210420b18001041410210f201410010bf01410110ee0110aa0210420b18001041410210f201410010ee01410110bf0110ab0210420b18001041410210f201410010bf01410110ee0110ab0210420b18001041410210f201410010ee01410110ee0110ab0210420b1f01017f1041410210f201410010bf0122002000410110bf0110022000101d0b2701037f1041410210f201410010bf012100410110bf012101107e22022000200110022002101d0b1f01017f1041410210f201410010ee0122002000410110ee01101e200010420b2701037f1041410210f201410010ee012100410110ee012101107e220220002001101e200210420b2001017f1041410210f201410010bf0122002000410110bf011085022000101d0b2801037f1041410210f201410010bf012100410110bf012101107e2202200020011085022002101d0b1f01017f1041410210f201410010ee0122002000410110ee011031200010420b2701037f1041410210f201410010ee012100410110ee012101107e2202200020011031200210420b1f01017f1041410210f201410010bf0122002000410110bf0110312000101d0b18001041410210f201410010bf01410110bf0110b902101d0b1f01017f1041410210f201410010ee0122002000410110ee011030200010420b2701037f1041410210f201410010ee012100410110ee012101107e2202200020011030200210420b18001041410210f201410010bf01410110bf0110ba02101d0b18001041410210f201410010bf01410110bf0110be02101d0b1f01017f1041410210f201410010ee0122002000410110ee011046200010420b2701037f1041410210f201410010ee012100410110ee012101107e2202200020011046200210420b1f01017f1041410210f201410010bf0122002000410110bf0110462000101d0b2701037f1041410210f201410010bf012100410110bf012101107e22022000200110462002101d0b2501027f1041410210f201410010ee01410110ee012101107d2200200020011002200010420b2401027f1041410210f201410010ee01410110ee012101107d2200200110ac02200010420b2401027f1041410210f201410010bf01410110bf012101107d2200200110ac022000101d0b2501027f1041410210f201410010bf01410110bf012101107d22002000200110022000101d0b2501027f1041410210f201410010ee01410110ee012101107d220020002001101e200010420b2401027f1041410210f201410010ee01410110ee012101107d2200200110ad02200010420b2401027f1041410210f201410010bf01410110bf012101107d2200200110c1022000101d0b2601027f1041410210f201410010bf01410110bf012101107d2200200020011085022000101d0b2501027f1041410210f201410010ee01410110ee012101107d2200200020011031200010420b2501027f1041410210f201410010bf01410110bf012101107d22002000200110312000101d0b2501027f1041410210f201410010ee01410110ee012101107d2200200020011030200010420b2501027f1041410210f201410010bf01410110bf012101107d22002000200110302000101d0b2501027f1041410210f201410010ee01410110ee012101107d2200200020011046200010420b2501027f1041410210f201410010bf01410110bf012101107d22002000200110462000101d0b1f01017f1041410210f201410010bf0122002000410110bf0110472000101d0b2701037f1041410210f201410010bf012100410110bf012101107e22022000200110472002101d0b1f01017f1041410210f201410010bf0122002000410110bf0110482000101d0b2701037f1041410210f201410010bf012100410110bf012101107e22022000200110482002101d0b1f01017f1041410210f201410010bf0122002000410110bf0110492000101d0b2701037f1041410210f201410010bf012100410110bf012101107e22022000200110492002101d0b2501027f1041410210f201410010bf01410110bf012101107d22002000200110472000101d0b2501027f1041410210f201410010bf01410110bf012101107d22002000200110482000101d0b2501027f1041410210f201410010bf01410110bf012101107d22002000200110492000101d0b2501017f1041410210f201410010bf0122002000410141ed8d08410110e70110332000101d0b2d01037f1041410210f201410010bf012100410141ed8d08410110e7012101107e22022000200110332002101d0b1e001041410210f201410010bf01410141ed8d08410110e70110b802101d0b2d01037f1041410210f201410010bf012100410141ed8d08410110e7012101107e22022000200110322002101d0b2b01027f1041410210f201410010bf01410141ed8d08410110e7012101107d22002000200110332000101d0b2b01027f1041410210f201410010bf01410141ed8d08410110e7012101107d22002000200110322000101d0b0d001041410010f201104a101a0b0d001041410010f201104b101a0b0d001041410010f201104c101a0b0d001041410010f201104d101a0b1601017f1041410010f201107e2200104e2000101b1a0b0d001041410010f201104f101a0b0d001041410010f2011050101a0b0d001041410010f2011051101a0b0d001041410010f2011052101a0b1601017f1041410010f201107e220010532000101b1a0b0f001041410010f20110ad01101b1a0b0f001041410010f20110b101101b1a0b20001041410110f201410041a78f08410710e30110b00141e89a081054ad101a0b1a001041410110f201410041a78f08410710e30110df03ad10430b1601017f1041410010f201107e220010552000101b1a0b0f001041410010f20110ae01101b1a0b0d001041410010f2011020101a0b2a01017f1041410010f201416741c89908410c100f1a4167416610381a4166107e220010361a2000101d0b8e0101037f230041106b220024001041410110f201410041a78f08410710e30141671056200041003b010c4167100a220141034f044041d68708411c1003000b200020012000410c6a4102108201416741002000280200200028020410b5011a20002f010c210210930121012000200241850c713b010e20012000410e6a410210141a2001101b1a200041106a24000b13001041410110f20141001099011057ad10430b19001041410010f20141e88308411e41db8008411b108f01000b22001041410010f201419c93084111107c1a41e48808411a41f68008411e108f01000b1b001041410010f20141ad93084113107c41c08008411b10a201000b22001041410010f20141c093084114107c1a41fe8808411641db8008411b108f01000b1d001041410010f201418d9308410f10bf031a41858d084118109402000b21001041410010f20141ff9208410e10bf031a1093011a41ee8c084117108e01000b11001041410010f2011093011a109302000b2601017f230041106b220024001041410010f201200041086a41d88d08410510a601109302000b1c01017f1041410110f2014100109901107e220010581a2000101b1a0b1c01017f1041410110f2014100109901107e220010591a2000101b1a0b1c01017f1041410110f2014100109901107e2200105a1a2000101b1a0b1b001041410310f201410010990141011099014102109901105b1a0b1b001041410310f201410010990141011099014102109901105c1a0b1e001041410310f201410010990141011099014102109901105d45ad10430b5601017f1041410410f201410010990141011099014102109901024041031017450d00410341918e08410910de01220041ff01714105490d0041918e08410941b38008410d10c001000b200041ff0171105e45ad10430b2101017f1041410210f20141001099014101109901107e2200105f1a2000101b1a0b1b001041410310f20141001099014101109901410210990110601a0b1b001041410310f20141001099014101109901410210990110611a0b1f001041410310f2014100418d8e0810e1014101109901410210990110621a0b0f001041410110f20141001015101a0b0f001041410110f2014100101610430b0f001041410110f20110d901ac10430b17001041410110f201410041db8f08410110e701ad101a0b3701017e1041410110f2014100101622004280808080087d42ffffffff6f58044041db8f08410141d19208411210c001000b2000c410430b16001041410110f20141db8f08410110df01adc210430b1b001041410110f201410041db8f08410110de01ad42ff0183101a0b15001041410110f201410041db8f0810ef01ad10430bdb0101037f1041410110f201027f230041106b22002400200041046a2202410010980141022101024002402000280208200028020c10d2010d0002400240200241db8f08410110d50141ff01710e020100030b410021010240200041046a41db8f08410110d50141ff01710e020100030b410121010b2000280208200028020c10d2010d0041db8f08410141a58008410e10c001000b200041106a240020010c010b41db8f08410141b38008410d10c001000b41ff0171220141024704401093012200410110f9012000200110f9012000101b1a0f0b41014100101c0b1100104110f401410010f301410010f1010bbe0102047f017e230041106b220324001041410110f2012003410b6a2102230041206b22002400200041086a410010980141042101034020014109470440200041146a20016a200041086a41908e08410110d5013a0000200141016a21010c010b0b20002902182104200028020c200028021010d20145044041908e08410141a58008410e10c001000b20022004a722013b0000200220044218883d0003200241026a20014110763a0000200041206a240020024105101c200341106a24000b6b01037f230041106b22002400104110f401410010f3012000410036020c2000410c6a210210930121010340200228020041a89b082802004804402001200241bd8d08410110c50110c3010c010b0b200028020c10f101200110b002ad101a200110d203200041106a24000bc80202057f017e230041306b22002400104110f401410010f30120004100360220200041206a41bd8d08410110c1012102200028022010f101109301210320002002100a220436021c200041003602182000200236021402400240034020012004490440200041206a2204200041146a220141b89208410810ba0310a8022000280220450d02200029032822054280808080087d42ffffffff6f580d03200110d80321021093012101200020054101200410d903200120002802002000280204100f1a2003200110c30120032002108f02200028021c2104200028021821010c010b0b20002003100a36022820004100360224200020033602200340200041086a200041206a10fb0120002802084101710440200028020c101b1a0c010b0b200041306a24000f0b41b89208410841918708411510c001000b41b89208410841d19208411210c001000b3001027f230041106b220024001041410110f201200041046a220141969208410210da012001108002200041106a24000b4801017f1041410110f201024041001017450d00410041969208410210de01220041ff01714103490d0041969208410241b38008410d10c001000b200041ff0171ad42ff0183101a0b0d001041410010f2014201101a0b3101017f1041410110f201410041989208410210e501220045044041989208410241b38008410d10c001000b2000ad101a0b9f0101057f230041106b22002400104110f401410110f30110d9012000410136020c02402000410c6a2204220128020041a89b082802004e0440410121020c010b2001419a9208410310c601419a9208410310d00121010b20002001360204200020023602002000280204210120002802002102200441a89b08280200360200200028020c10f101ac104320024101714504402001ac10430b200041106a24000bb80201077f230041106b220224001041410110f201230041206b22002400200041106a4100109801200041046a210402400340200028021422032000280218220610d2010d012000410036021c200041106a2000411c6a410441949208410210d301200141034704402004200028021c220341187420034180fe03714108747220034108764180fe037120034118767272360200200441046a2104200141016a21010c010b0b41949208410241c09208411110c001000b200020013602002003200610d20145044041949208410241a58008410e10c001000b20022000290200370200200241086a200041086a290200370200200041206a2400200228020041027421011093012100034020012005470440200220056a41046a280200200010f601200541046a21050c010b0b2000101b1a200241106a24000b10001041410110f201410010bf01101d0b10001041410110f201410010ee0110420b11001041410110f2014100109901101b1a0b17001041410110f201410041bb8d08410210e301101b1a0bdb0101047f1041410110f201027f230041106b22002400200041046a22034100109801024002402000280208200028020c10d201450440024002400240200341b98d08410210d50141ff01710e020201000b41b98d08410241b38008410d10c001000b41012102200041046a41b98d08410210d80121010b2000280208200028020c10d201450d0220020d010b41feffffff0721010b200041106a240020010c010b41b98d08410241a58008410e10c001000b220141feffffff074704401093012200410110f9012001200010a3012000101b1a0f0b41014100101c0b930201067f230041206b220224001041410110f201230041106b2200240041001099012104109301210320002004100a2205360208200041003602042000200436020003402001200510d7010440200010dc01210110ea011a2000200141187420014180fe03714108747220014108764180fe03712001411876727236020c20032000410c6a410410141a20002802082105200028020421010c010b0b200041106a2400109301210120022003100a360214200241003602102002200336020c03402002411b6a2002410c6a10c80320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe0371200041187672722001109b010c010b0b2001101b1a200241206a24000b9d0101057f230041106b220124001041410110f201200141086a2102230041106b22002400200041046a22034100109801200310dc012104200341b88d08410110dd0121032000280208200028020c10d20145044041b88d08410141a58008410e10c001000b2002200336020420022004360200200041106a2400200128020c20012802081093012200109b012000109d012000101b1a200141106a24000be90101067f230041106b220224001041410110f201200241086a2103230041106b22002400200041046a2205410010980102402000280208200028020c10d2010d00024002400240200541b88d08410110d50141ff017122010e020201000b41b88d08410141b38008410d10c001000b200041046a10dc012104410121010b2000280208200028020c10d2010d0041b88d08410141a58008410e10c001000b2003200436020420032001360200200041106a2400024020022802084101710440200228020c1093012200410110f9012000109b012000101b1a0c010b41014100101c0b200241106a24000b7c01037f230041206b220024001041410210f201410041899908410410e301410141be8d0810e1012102101b1a109301210120002002100a36021c20004100360218200020023602140340200041086a200041146a10fb0120002802084101710440200028020c2001109d010c010b0b2001101b1a200041206a24000bd50301067f230041206b220224001041410110f201230041106b2201240041001099012104109301210520012004100a2200360208200141003602042001200436020003402003200010d7010440200141c28d08410210db0121001093012103034020000440200141c28d08410210db01210410ea011a2001200441187420044180fe03714108747220044108764180fe03712004411876727236020c20032001410c6a410410141a200041016b21000c010b0b10ea011a2001200341187420034180fe03714108747220034108764180fe03712003411876727236020c20052001410c6a410410141a20012802082100200128020421030c010b0b200141106a2400109301210120022005100a3602082002410036020420022005360200034002402002410c6a200210c80320022d000c4101470d00200228000d220041187420004180fe03714108747220004108764180fe0371200041187672722200100a410276200110f60120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10c80320022d001b4101470d02200228001c220041187420004180fe03714108747220004108764180fe037120004118767272200110f6010c000b000b0b2001101b1a200241206a24000bd10201067f230041206b220224001041410110f201027f230041206b2200240041001099012103109301210420002003100a22053602182000410036021420002003360210024003402001200510d7010440200041086a200041106a41c28d08410210dd0110e80110e9012000280208410171450d0210ea011a2000200028020c220141187420014180fe03714108747220014108764180fe03712001411876727236021c20042000411c6a410410141a20002802182105200028021421010c010b0b200041206a240020040c010b41c28d08410241d38808410d10c001000b2100109301210120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10c80320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe03712000411876727220011083020c010b0b2001101b1a200241206a24000b5001017f230041106b22002400104110f401410010f30120004100360200200041046a200041c18d08410110d101200028020010f10120002802044101710440200028020c1000000b200041106a24000bea0101057f230041206b22002400104110f401410010f30120004100360214200041146a41bd8d08410110c1012103200028021410f101109301210220002003100a220436021c200041003602182000200336021402400340200120044f0d01200041146a10d7032201200041146a10d70322036a220420014f04402001200210e7032003200210e7032004200210e703200028021c2104200028021821010c010b0b10a002000b20002002100a36021c20004100360218200020023602140340200041086a200041146a10fb0120002802084101710440200028020c101b1a0c010b0b200041206a24000b7901027f230041206b22002400104110f401410010f30120004100360214200041146a41bd8d08410110c1012101200028021410f10120002001100a36021c20004100360218200020013602140340200041086a200041146a10fb0120002802084101710440200028020c101b1a0c010b0b200041206a24000be10402087f017e230041406a22002400104110f401410010f30120004100360218200041186a41c48d08411410c1012102200028021810f101109301210320002002100a2201360214200041003602102000200236020c4100210202400340200120024b04402000410c6a220141b89208410810ba0341b89208410810ca012106200110d70321072000410c6a10d70322014100480d0220014101742101109301210403402001044020042000410c6a10d80310c301200141016b21010c010b0b109301210520002004100a2201360220410021022000410036021c200020043602180340200120024d4504402005200041186a10d703200041186a10d70310ce0120002802202101200028021c21020c010b0b200020053602202000200736021c200020063602182003200041186a10cf0120002802142101200028021021020c010b0b20002003100a360214200041003602102000200336020c03400240200041186a2000410c6a10ca0320002d00184101470d0020002800212101200028001d21022000280019220341187420034180fe03714108747220034108764180fe037120034118767272101b1a200241187420024180fe03714108747220024108764180fe037120024118767272ad101a200141187420014180fe03714108747220014108764180fe0371200141187672722201100a410376ad101a20002001100a3602202000410036021c200020013602180340200041376a200041186a10cb0320002d00374101470d02200020002900383703282000200041286a10d10320003502042000350200101a101a0c000b000b0b200041406b24000f0b10a002000bec0401087f230041d0006b22002400104110f401410010f30120004100360228200041286a2101230041106b2203240010930121020340200128020041a89b08280200480440200141c48d08411410cb012106200110cd012107200110cd01210510930121040340200504402004200110cd01200110cd0110ce01200541016b21050c010b0b2003200436020c20032007360208200320063602042002200341046a10cf010c010b0b200341106a2400200028022810f101109301210120002002100a360224200041003602202000200236021c03400240200041286a2000411c6a10ca0320002d00284101470d0020002800312102200028002d21052000280029210410930121032000200241187420024180fe03714108747220024108764180fe0371200241187672722202100a3602302000410036022c20002002360228200441187420044180fe03714108747220044108764180fe03712004411876727221020340200041c7006a200041286a10cb0320002d00474101460440200020002900483703382000200041386a10d1032000280204210420032000280200108c0220032004108c020c010b0b20012002108f022001200541187420054180fe03714108747220054108764180fe037120054118767272108c022001200310b002410176108c0220002003100a3602302000410036022c200020033602280340200041086a200041286a10fb012000280208410171450d022001200028020c108f020c000b000b0b20002001100a3602302000410036022c200020013602280340200041106a200041286a10fb01200028021041017104402000280214101b1a0c010b0b200041d0006a24000b930101067f230041206b220024001041410110f2012000410041809008410d10e70110a702024020002802004101710440200041086a200028020410a6020c010b10c302210110c302210210c302210310c302210410c30221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a10fc01200041206a24000b3101027f230041206b220024001041410110f201200041086a22014100109901106310a602200110fc01200041206a24000b4801027f230041106b220024001041410110f201200041086a410041809008410d10e701220110a7022000280208410171047f200028020c10270520010bad101a200041106a24000b4802017f017e230041106b220024001041410110f201200041086a410041809008410d10e70110a7022000280208410171047e200028020c1064ad0542000b101a200041106a24000b8e0101087f230041106b220024001041410510f201410041809008410d10e7012101410110bf012103410210bf012104410310bf012105410410bf012106200041086a200110a702024020002802084101710440200028020c21074200102522014200102522022007200320042005200610650c010b10c302210110c30221020b20012002108102200041106a24000b7c01067f230041106b220024001041410310f201410041809008410d10e7012101410110bf012103410210bf012104200041086a200110a702024020002802084101710440200028020c210542001025220142001025220220052003200410660c010b10c302210110c30221020b20012002108102200041106a24000b5f01047f230041106b220024001041410310f201410041809008410d10e7012101410110bf012102410210bf012103200041086a200110a7022000280208410171047e200028020c20022003106741004aad0542000b1043200041106a24000b860101077f230041106b220024001041410410f201410041809008410d10e7012101410110bf012103410210bf01210441031099012105200041086a200110a702024020002802084101710440200028020c2106420010252201420010252202200620032004200510681a0c010b10c302210110c30221020b20012002108102200041106a24000b7401057f230041106b220024001041410210f201410041809008410d10e701210141011099012103200041086a200110a702024020002802084101710440200028020c21044200102522014200102522022004200310691a0c010b10c302210110c30221020b20012002108102200041106a24000b6a01047f230041106b220024001041410310f201410041809008410d10e7012101410110bf012102410210bf012103200041086a200110a70202402000280208410171044020022003200028020c107e2201106a1a0c010b10930121010b2001101b1a200041106a24000b6a01047f230041106b220024001041410310f201410041809008410d10e7012101410110bf012102410210bf012103200041086a200110a70202402000280208410171044020022003200028020c107e2201106b1a0c010b10930121010b2001101b1a200041106a24000b7401057f230041106b220024001041410210f201410041809008410d10e701210141011099012103200041086a200110a702024020002802084101710440200028020c210442001025220142001025220220042003106c1a0c010b10c302210110c30221020b20012002108102200041106a24000b7401057f230041106b220024001041410210f201410041809008410d10e701210141011099012103200041086a200110a702024020002802084101710440200028020c210442001025220142001025220220042003106d1a0c010b10c302210110c30221020b20012002108102200041106a24000b7601047f230041106b220024001041410110f201200041086a410041809008410d10e70110a702024020002802084101710440200028020c21014200102522024200102522032001107e2201106e1a0c010b10c302210210c302210310930121010b2002101d2003101d2001101b1a200041106a24000b17001041410110f201410041dd8d08410410e70110e2030b3201027f1041410110f201410041e58d08410810e701210103402000200146450440200010e203200041016a21000c010b0b0bc50101047f230041206b22002400104110f401410210f301410010bf012101410141e18d08410410e301210220004102360214200041146a41dd8d08410410c1012103200028021410f1012000200136020c2000200236021041f89208410710bf0322012000410c6a1097022001200041106a108d02109301108401210220002003100a36021c200041003602182000200336021403402000200041146a10fb012000280200410171044020002802042002109d010c010b0b200120021040200041206a24000b1f00104110b10110ad0110b90145044041b3980841241003000b410010f2010b1e00104141671008416710df03044041d79808412c1003000b410010f2010b2d001041410210f201410041c18d08410110e701410141ed8d08410110e70147044041ee8d08410e10a401000b0b13001041410010f20141fc8d08410d10a401000ba203010b7f230041206b220124001041410110f201230041406a220024002000410010980141042102200041206a21030340200241244704402000411c6a20026a200041b59008410510d5013a0000200241016a21020c010b0b2000411a6a2202200341026a2d00003a0000200041166a2204200041296a2d00003a0000200041126a2205200041306a2d00003a0000200020002f00273b0114200020002f012e3b0110200020032f00003b0118200028023c21032000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c2000280204200028020810d20145044041b59008410541a58008410e10c001000b200120002f01183b000020012007360003200120002f01143b00072001200836000a200120002f01103b000e20012009360011200120002f010c3b0015200141026a20022d00003a0000200141096a20042d00003a0000200141106a20052d00003a0000200141176a200a2d00003a00002001200336001c20012006360018200041406b24002001109b02101b1a200141206a24000b2801017f1041410110f20141001099012200100a412047044041a8920841101003000b2000101b1a0b0f001041410010f201109301101b1a0b1f01017f1041410210f20141001099012200410110990110051a2000101b1a0b5101017f230041106b220024001041410310f201200041086a41001099014101419c9008411110e701410241939008410910e701109f0220002802084101710440200028020c101b1a0b200041106a24000b2601027f1041410110f201410041ad9008410810e7012100107e22012000106f1a2001101b1a0b19001041410210f2014100109901410110990110b901ad10430b13001041410010f20141d98108109b02101b1a0b25001041410210f201410041909008410310e3014101418d9008410310e30110b901ad10430b0f001041410010f20110930110fe010b2501017f1041410210f201410041c28d08410210d6012200410110bf0110c301200010fe010bf90102067f017e230041106b220124001041410210f20102400240410041c58f08410310d6012203410141c28f08410310d601220410b9010d002003100a22052004100a470d010340200220054f0d01200110ea01220036020820032002200141086a410410b5011a2001200036020c200420022001410c6a410410b5011a2001280208220041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe03712000411876727210b202450d022002200241046a22004d0440200021020c010b0b10a002000b420121060b20061043200141106a24000bfb0101067f230041206b220124001041410210f201230041106b2200240041001099012104109301210320002004100a220536020c200041003602082000200436020403402002200510d70104402003200041046a412041c28d08410210e20110c301200028020c2105200028020821020c010b0b200041106a24002003410141f38e08410410e30110c301109301210220012003100a360214200141003602102001200336020c03402001411b6a2001410c6a10c80320012d001b41014604402002200128001c220041187420004180fe03714108747220004108764180fe03712000411876727210051a0c010b0b2002101b1a200141206a24000b9b0101047f230041106b220124001041410310f201410041c28d08410210d6012102410141a28f08410510e7012103410210bf0121000240200341808080800449044010ea011a2001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a10700d01200210fe01200141106a24000f0b10a002000b41c88f08411310a401000ba50101057f230041106b220024001041410210f201410041c28d08410210d6012101410141a28f08410510e70122022001100a41027622044904400240027f20024504401093010c010b200041086a20014100200210b4022000280208410171450d01200028020c0b210320002001200241016a200410b4022000280200410171450d002003200028020410051a200310fe01200041106a24000f0b0b41f28708411d1003000b6201037f230041106b220024001041410210f201200041086a410041c28d08410210d601410110bf0110b102024020002802084101710440200028020c1093012201410110f901200110f6012001101b1a0c010b41014100101c0b200041106a24000b3e01017f230041106b220024001041410210f201200041086a410041c28d08410210d601410110bf0110b1022000280208410047ad1043200041106a24000b970101037f230041106b220124001041410210f201410041c28d08410210d6012102410141a28f08410510e7012100200110ea0136020c02402000418080808004490440200220004102742001410c6a410410b5010d01200128020c220041187420004180fe03714108747220004108764180fe037120004118767272107d101d200141106a24000f0b10a002000b41f28708411d1003000b14001041410110f2014100109901109f01101b1a0b16001041410210f2014100109901410110990110061a0b25001041410210f201410041a78f08410710e3014101109901416710394167108401101b1a0b17001041410010f201418e9408410d107c109f01101b1a0b16001041410010f20141ac94084108107c10c502101d0b16001041410010f20141a594084107107c10c60210420b16001041410010f20141c294084103107c10c802101a0b17001041410010f20141a094084105107c10cb02ad101a0b4901027f230041106b220024001041410010f201200041bf94084103107c2201109f0110a8022000280200450440200141918708411510a201000b20002903081043200041106a24000b17001041410010f20141c594084104107c10ca02ad10430b17001041410010f201418999084104107c10c702101b1a0ba50101057f230041106b220024001041410010f201200041046a220341dc8f084108107c2201109e01024002402000280208200028020c10d2010d00410121020240024002402003200110da0341ff01710e020201000b200141b38008410d10a201000b41002102200041046a4120200110a10221040b2000280208200028020c10d201450d0120020d002004101b1a0b200041106a24000f0b200141a58008410e10a201000b18001041410010f20141dc8f084108107c10cd0245ad10430b17001041410010f20141b49408410b107c10cb02ad101a0b14001041410010f20141b49408410b107c10d4020be40102037f017e230041106b220024001041410010f2010240419b94084105107c220110cd020440200041046a22022001109e01024002400240024002402002200110da0341ff017122020e0404010203000b200141b38008410d10a201000b200041046a200110fc02ad2103410121020c020b200041046a200110fc02ad200041046a200110fc02ad422086842103410221020c010b200041046a200110fc02ad2103410321020b2000280208200028020c10d201450d010b2000200337020820002002360204200041046a108002200041106a24000f0b200141a58008410e10a201000b2e01027f1041410110f201410041899908410410e301210041c994084104107c2201200010051a200110c502101d0b4201037f1041410210f201410041b38f08410510e3012101410141ae8f08410510e301210241cd94084104107c2200200110051a2000200210051a200010c502101d0b2b01017f1041410110f201410041b88d08410110e70141d194084104107c220010f601200010ca02ad10430b2601017f1041410210f201410041a78f08410710e3014101109901107e220010392000101b1a0b1f01017f1041410110f20141001099012100418e9408410d107c200010061a0b19001041410110f201410010bf0141ac94084108107c1094010b1f01017f1041410110f201410010ee01210041a594084107107c200010d3020b2601017f1041410110f201410041db8f08410110e701210041a094084105107c2000ad10d2020b1e01017f1041410110f20110d9012100418595084103107c2000ac1092030b1e01017e1041410110f20141001015210041c294084103107c200010d2020b1e01017e1041410110f20141001016210041bf94084103107c20001092030b2401017f1041410110f201410041db8f0810ef01210041c594084104107c2000ad1092030b2501017f1041410110f2014100419a8e08410310e3012100418999084104107c200010061a0bad0101047f230041106b22002400104110f401410010f3012000410036020c02402000410c6a220228020041a89b082802004e0440410121010c010b200241dc8f08410810cb0121020b20002002360204200020013602002000280204210220002802002101200028020c10f10141dc8f084108107c2103024020014101714504401093012201410110f9012001200210051a2003200110061a0c010b20034101410010cf020b200041106a24000bb80101037f230041106b220124001041410110f201200141046a419a8e08410310da01419b94084105107c210202400240024002400240200128020441016b0e03010203000b2002420010d2020c030b1093012200410110f9012001280208200010f6012002200010061a0c020b1093012200410210f9012001280208200010f601200128020c200010f6012002200010061a0c010b1093012200410310f9012001280208200010f6012002200010061a0b200141106a24000b3101037f1041410210f201410041899908410410e3012100410110bf0141c994084104107c2202200010051a20021094010b4501047f1041410310f201410041b38f08410510e3012101410141ae8f08410510e3012102410210bf0141cd94084104107c2200200110051a2000200210051a20001094010b3601027f1041410210f201410041b88d08410110e701410141ed8d0810ef01210141d194084104107c220010f60120002001ad1092030b1e01017e1041410110f20141001016210041e194084109107c20001092030b19001041410110f201410010bf0141f89408410d107c1094010b1f01017f1041410110f2014100109901210041ea9408410e107c200010061a0b4001017f1041410110f20141849208411010eb012100416741f981084112100f1a4167200010051a41c68608109b02416741661039416610a902410173ad10430b11001041410010f20110f60310c502101d0b14001041410110f201410010bf0110f6031094010b2d02017e027f1041410210f201410010152100410110bf0110f603220210be03200010d202200210bd031094010b4502017f027e1041410010f20110f6032100104a2201200010be0310c80222025a0440200010bd03416710381a2000416710061a200010bd0310d4020b200120025aad10430b14001041410010f20110f60310be0310c802101a0b14001041410010f20110f60310bd0310c502101d0b3d01017f230041106b220024001041410110f201200041086a410041a78f08410710e30110f7032000280208200028020c10cc03101d200041106a24000b4d01037f230041106b220024001041410110f201200041086a410041a78f08410710e30110f7032000280208200028020c108401220241de8c08411010141a200210cd03101a200041106a24000b4d01037f230041106b220024001041410110f201200041086a410041a78f08410710e30110f7032000280208200028020c108401220241d28c08410c10141a200210cc03101d200041106a24000b2201017f1041410110f201410041a78f08410710e301210010ec032000109a03101a0b3502017f017e1041410110f201410041a78f08410710e301210010ec032000109a03220150044041939908410f1003000b2001101a0b3d02017f017e230041106b220024001041410110f201410010152101200041086a10ec0320011099032000280208200028020c10fd01200041106a24000b2201017e1041410110f20141001015210010ec03200010960310cd02410047ad10430b3901027f1041410110f201410041a78f08410710e301210010ec0322012000109a035045044041de8908411a1003000b20012000109703101a0b3902027f017e1041410110f201410041a78f08410710e301210010ec032201200010950310c802220250047e200120001097030520020b101a0b5502037f017e230041106b220024001041410110f201410010152103200041086a10ec03220120031099032000280208410171047f20012003200028020c220210940341010541000b200210fd01200041106a24000b3802027f017e1041410110f201410041a78f08410710e301210010ec0322012000109a032202504504402001200220001094030b2002101a0b5b01027f230041306b220024001041410010f201200010ea032201360200200041046a2001108b032000200036021803402000411c6a200041046a109601200028021c4101474504402000350220101a0c010b0b200041306a24000bbf0101077f230041206b220024001041410110f201410041f38e08410410e7012104200010ea03220210f402200010ed052101024020002802002205450440200020013602040c010b200041106a2206200220002802082203108603200020013602182002200320061087030b2000200336021c20004100360218200020013602142000200436021020022001200041106a10870320002001360208200541016a220145044010a002000b200020013602002002200010f602200041206a24000b1f01017f200028020c41016a220104402000200136020c20010f0b10a002000bbf0101077f230041206b220024001041410110f201410041f38e08410410e7012104200010ea03220210f402200010ed052101024020002802002205450440200020013602080c010b200041106a22062002200028020422031086032000200136021c2002200320061087030b2000410036021c20002003360218200020013602142000200436021020022001200041106a10870320002001360204200541016a220145044010a002000b200020013602002002200010f602200041206a24000b4701027f230041306b220024001041410010f201200041206a10ea03220110f4022000410c6a20012000280224108a03200028020c410173200028021010ff01200041306a24000b4701027f230041306b220024001041410010f201200041206a10ea03220110f4022000410c6a20012000280228108a03200028020c410173200028021010ff01200041306a24000b3601017f230041206b220024001041410010f2012000410c6a10ea03108b03200028020c410173200028021010ff01200041206a24000b4701027f230041306b220024001041410010f201200041206a10ea03220110f4022000410c6a20012000280228109701200028020c410173200028021010ff01200041306a24000bd80201077f230041d0006b220024001041410210f201410041ef9008410710e7012101410141f69008410710e70121052000410c6a10ea0320011097010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110ea032202200028022422041085030d001a200041306a2201200210f402200110ed052101200028022821032000200136022820022004200041206a108703024020030440200041406b2206200220031086032000200136024c2002200320061087030c010b200020013602380b2000200436024c20002003360248200020013602442000200536024020022001200041406b108703200028023041016a2201450d01200020013602302002200041306a10f602200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b200110ff01200041d0006a24000f0b10a002000bd80201077f230041d0006b220024001041410210f201410041ef9008410710e7012101410141f69008410710e70121052000410c6a10ea0320011097010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110ea032202200028022422041085030d001a200041306a2201200210f402200110ed052101200028022c21032000200136022c20022004200041206a108703024020030440200041406b220620022003108603200020013602482002200320061087030c010b200020013602340b2000200336024c20002004360248200020013602442000200536024020022001200041406b108703200028023041016a2201450d01200020013602302002200041306a10f602200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b200110ff01200041d0006a24000f0b10a002000b4801027f230041206b220024001041410110f201410041ef9008410710e70121012000410c6a10ea032001109701200028020c044010ea03200041106a1084030b200041206a24000b4501027f230041206b220024001041410110f201410041ef9008410710e70121012000410c6a10ea032001108a03200028020c410173200028021010ff01200041206a24000b7601037f230041306b220024001041410210f201410041ef9008410710e7012101410141e69008410910e70121022000411c6a10ea032001109701200028021c450440109201000b200041106a200041286a2902003703002000200029022037030810ea03200041086a2002108903200041306a24000b7501047f230041306b220024001041410210f201410041ef9008410710e7012101410141e69008410910e70121022000410c6a10ea0322032001109701200028020c4101460440200041286a200041186a290200370300200020002902103703202003200041206a20021089030b200041306a24000b6a01037f230041206b220024001041410110f201410041ef9008410710e701210110930121022000410c6a10ea0320011097010340200028020c0440200028021821012000280210200210e7032000410c6a10ea0320011097010c010b0b200210fa01200041206a24000b7401047f230041306b220024001041410110f201410041ef9008410710e70121021093012101200010ea0322033602182000200320021097012000200041186a36021403402000411c6a2000109601200028021c4101474504402000280220200110e7030c010b0b200110fa01200041306a24000b3a01017f230041106b220024001041410010f201200010e80336020c20002000410c6a10fa022000280200200028020410d603200041106a24000b2101017f1041410110f201410041f38e08410410e701210010e803200010e4021a0b4401027f230041206b220024001041410010f201200041106a10e803220110f402200041086a2001200028021410e7022000280208200028020c10f801200041206a24000b4301017f230041106b220024001041410010f201200041086a10e80310fb02200028020841017145044041e48f08410c10a401000b200035020c101a200041106a24000b6e02027f017e230041306b220024001041410010f2012000410c6a220110e3032000200041106a10fa0220002000290300370218200020013602200340200041246a200041186a1090012000280224410147450440200035022c2000350228101a101a0c010b0b200041306a24000b6b01027f230041306b220024001041410010f20110930121012000411c6a10e303200041106a200041206a10fa02200020002903103702280340200041086a200041286a108b01200028020841017104402001200028020c10c3010c010b0b200110d203200041306a24000ba60101037f230041306b220024001041410010f2011093012102200041186a220110e303200041106a2000411c6a10fa02200020002903103702242000200136022c024003400240200041086a200041246a108b012000280208410171450d002000200028022c2201280200200141086a280200200028020c1091012000280200410171450d022002200028020410c3010c010b0b200210d203200041306a24000f0b109201000b5a01047f230041206b220024001041410210f201410041f38e08410410e7012101410141f78e08410510e7012102200041146a220310e303200041086a20032001200210d9022000280208200028020c10f801200041206a24000b3d01027f230041106b220024001041410110f201410041f38e08410410e7012101200041046a10e3032000280204200110dc02ad1043200041106a24000b5101027f230041206b220024001041410110f201410041f38e08410410e7012101200041146a10e303200041086a2000280214200028021c20011091012000280208200028020c10f801200041206a24000b6101047f230041106b220024001041410110f201410041f38e08410410e7012102200041046a10e30320002802042000280208200210e502047f200028020c2201200210db0221032001200210d70241010541000b200310f801200041106a24000ba90101057f230041306b220024001041410210f201410041f38e08410410e7012101410141858f08410910e701200041246a220310e3032000280224200110dc02210420002001360220200020043602182000200336021c200041106a200041186a10e00220002802102201280200200141086a2802002000280214220410df0222036a2202200349044010a002000b200041086a20012004200210d9022002ad101a200041306a24000b810101047f230041206b220024001041410210f201410041f38e08410410e70121014101418e8f08410710e7012102200041146a220310e3032000280214200110dc02047f200305200041086a200041146a2001200210e102200028020c210120002802080b2202280200200241086a280200200110df02ad101a200041206a24000bbf0101067f230041206b220024001041410310f201410041f38e08410410e7012101410141858f08410910e7012102410241fc8e08410910e7012103200041146a220410e3030240027f20002802142205200110dc02044020022005200028021c200110df0222026a22032002490d02200020042001200310d90220040c010b200041086a200041146a2001200310e102200028020c210120002802080b2202280200200241086a280200200110df02ad101a200041206a24000f0b10a002000b950101047f230041206b220024001041410210f201410041f38e08410410e7012101410141958f08410d10e7012102200041146a220310e30302402000280214200110dc02047f200305200120026a22022001490d01200041086a200041146a2001200210e102200028020c210120002802080b2202280200200241086a280200200110df02ad101a200041206a24000f0b10a002000ba60201077f230041e0006b220024001041410010f2011093012102200041206a220110eb03200041186a200041246a10fa022000200029031837022c200020013602342000413c6a2104200041d4006a2103024003400240200041106a2000412c6a108b012000280210410171450d00200041d0006a20002802342201280200200141086a28020020002802142201108d032000280250450d02200041406b200341086a28020036020020002003290200370338200041086a200410fa02200020002903083702442000200041386a36024c0340200041d0006a200041c4006a10900120002802504101470d02200028025820002802542001200210e703200210e703200210e7030c000b000b0b200210fa01200041e0006a24000f0b41948108410b10a401000b4201027f230041106b220024001041410110f201410041f38e08410410e7012101200041046a10eb0320002802042000280208200110da02ad1043200041106a24000b3d01027f230041106b220024001041410110f201410041f38e08410410e7012101200041046a10eb032000280204200110dc02ad1043200041106a24000bd30101037f230041d0006b220024001041410110f201410041f38e08410410e70121012000410c6a10eb03200041186a200028020c20002802142001108d0320002802184101460440200041306a200041246a2802003602002000200029021c37032810930121012000200041286a220241047210fa0220002000290300370238200020023602400340200041c4006a200041386a1090012000280244410147450440200028024c2000280248200110e703200110e7030c010b0b200110fa01200041d0006a24000f0b41829108410b10a401000b8f0101047f230041306b220024001041410310f201410041f38e08410410e70121014101418d8e08410310e7012102410241f78e08410510e7012103200041146a10eb03200041206a2000280214200028021c2001108d03200028022045044041829108410b10a401000b200041086a200041246a2002200310d9022000280208200028020c10f801200041306a24000b850101037f230041306b220024001041410210f201410041f38e08410410e70121014101418d8e08410310e7012102200041146a10eb03200041206a2000280214200028021c2001108d03200028022045044041829108410b10a401000b200041086a2000280224200028022c20021091012000280208200028020c10f801200041306a24000b5f01047f230041206b220024001041410110f201410041f38e08410410e7012101200041086a10eb032000280208200028020c200110e50222020440200041146a220320002802102001108e03200310c5030b2002ad1043200041206a24000bc60101037f230041d0006b220024001041410010f201200041186a220110eb03200041106a2000411c6a10fa02200020002903103702242000200136022c200041c4006a2101024003400240200041086a200041246a108b012000280208410171450d00200041406b200028022c2202280200200241086a280200200028020c108d032000280240450d02200041386a200141086a28020036020020002001290200370330200041306a10c5030c010b0b200041186a10c003200041d0006a24000f0b109201000bfc0101067f230041306b220024001041410310f201410041f38e08410410e70121014101418d8e08410310e7012103410241858f08410910e701200041246a220510eb032000280224200110dc02210220002001360220200020023602182000200536021c200041106a200041186a2201109003200120002802102202280200200241086a2802002000280214108c032000280218200310dc0221022000200336022c2000200236022420002001360228200041086a200510e00220002802082201280200200141086a280200200028020c220310df0222026a2204200249044010a002000b200020012003200410d9022004ad101a200041306a24000bf20101077f230041306b220024001041410410f201410041f38e08410410e70121024101418d8e08410310e7012103410241f78e08410510e7012104410341fd9008410510e7012105200041186a10eb0320002802182206200210dc020440200041246a2201200620002802202002108c03200041106a20012003200410d902410121010b2000200236022c200020013602242000200041186a360228200041086a200041246a2201109003200120002802082202280200200241086a280200200028020c108c0320002000280224200028022c20031091012000280204200520002802004101711bad101a200041306a24000bb30101067f230041306b220024001041410310f201410041f38e08410410e70121014101418d8e08410310e7012103410241f78e08410510e7012104200041186a220210eb032000280218200110dc0221052000200136022c2000200536022420002002360228200041106a200041246a2202109003200220002802102201280200200141086a2802002000280214108c03200041086a20022003200410d9022000280208200028020c10f801200041306a24000b4701017f230041206b220024001041410010f201200041106a10e40320002000290310370218200041086a2000411c6a10fa022000280208200028020c10d603200041206a24000b4201027f230041106b220024001041410110f201410041f38e08410410e7012101200041086a10e4032000280208200028020c200110da02ad1043200041106a24000b3d01027f230041106b220024001041410110f201410041f38e08410410e7012101200041086a10e4032000280208200110dc02ad1043200041106a24000b4201027f230041106b220024001041410110f201410041f38e08410410e7012101200041086a10e4032000280208200028020c200110e502ad1043200041106a24000b3f01017f230041106b220024001041410010f201200041086a10e4032000200028020c10fb022000350204420020002802004101711b101a200041106a24000b5001027f230041206b220024001041410010f201200041086a10e403200041106a200028020c220110f40220002001200028021810f8022000350204420020002802004101711b101a200041206a24000b7601037f230041206b220024001041410110f201410041f38e08410410e7012101200041186a10e403200028021c21022000280218200110e6022201047e200041106a20022001108c01200041086a2002200028021410f802200035020c420020002802084101711b0542000b101a200041206a24000b7601037f230041206b220024001041410110f201410041f38e08410410e7012101200041186a10e403200028021c21022000280218200110e6022201047e200041106a20022001108c01200041086a2002200028021010f802200035020c420020002802084101711b0542000b101a200041206a24000b910101047f230041206b220024001041410110f201410041f38e08410410e7012102200041086a10e4032000200028020c36021420002000280208220336021020002003200210e60236021c2000200041146a360218024003402000200041186a108b012000280200410171450d012001417f470440200141016a21010c010b0b10a002000b2001ad101a200041206a24000b11001041410010f20110e90310c60210420b2401027f1041410110f201410010ee01210010e9032201200110c602200010aa0210d3020b2801037f1041410110f201410010ee01210010e903220110c6022202200010ac022001200210d3020b3e01037f1041410110f201410010ee01210010e903220210c602220120001023410048044041f08f08411010a401000b2001200010ad022002200110d3020b2401027f1041410110f201410010ee01210010e903220110930304402001200010d3020b0b0f001041410010f20110e90310d4020b12001041410010f20110e903109303ad10430b23001041410110f201410041a78f08410710e301418895084116107c10d60245ad10430b12001041410010f20110e90310cd02ad101a0b3101027f1041410210f2014100418d8e08410310e70141011099012101419e9508411c107c220010f6012000200110061a0b5901027f230041206b220024001041410010f201200010e5032000200028020422013602102000200028020036020c2000200110cb0236021c2000410136021820002000410c6a360214200041146a10d503200041206a24000b3f01027f230041106b220024001041410110f201410041f38e08410410e7012101200041086a10e5032000280208200028020c200110ed02200041106a24000b4201027f230041106b220024001041410110f201410041a28f08410510e7012101200041086a10e5032000280208200028020c200110f002ad101a200041106a24000b4b01047f230041106b220024001041410210f201410041a78f08410710e3012101410141a28f08410510e7012102200041046a2203200110e6032003200210ef02ad101a200041106a24000b2e01017f230041106b220024001041410010f201200041086a10e503200028020c10cb02ad101a200041106a24000b3e01017f230041106b220024001041410110f201200041046a410041a78f08410710e30110e6032000280204200028020c10e902ad101a200041106a24000bc20102047f027e230041106b220224001041410310f20141de9008410810eb0121004101101521042002410210e60102400240107b2201200010b203450440200110b40310c902220341ff017141ff01460d012001200010b103200341016a2200ad42ff0183220510d202200110b403200510d2020c020b2001200010b00321000c010b419b8b0841d7001003000b20012000200410b703450440200120002004200210aa03200120002002200410ad03200241106a24000f0b41f28b0841171003000b990102047f017e230041206b220224001041410310f20141de9008410810eb0121004101101521042002410210e6010240107b2201200010b203044020012001200010b0032200200410b703450d01200241106a220320012000200410b50320012000200310af03200120002004200210aa03200120002002200410ad03200241206a24000f0b41898c0841101003000b41998c08411e1003000b960102037f017e230041106b220124001041410210f20141de9008410810eb0121024101101521030240107b2200200210b203044020002000200210b0032202200310b703450d01200120002002200310b50310930121002001280208200010a30120012903002000108402200128020c200010ac032000101b1a200141106a24000f0b41898c0841101003000b41998c08411e1003000ba00102047f017e230041406a220024001041410210f20141de9008410810eb012101200041306a410110e601200041106a200041386a290300370300200020002903302204370220200020043703080240107b2202200110b203044020022002200110b0032201200041086a220310ae0310cd02450d0120022001200310ae0310c802101a200041406b24000f0b41898c0841101003000b41998c08411e1003000b7002037f017e230041106b220224001041410210f20141de9008410810eb0121004101101521030240107b2201200010b203450d0020012001200010b0032200200310b703450d00200220012000200310b50320012000200310ab0310d40220012000200210af030b200241106a24000b3e02027f017e1041410210f20141de9008410810eb012100410110152102107b2201200010b203047e20012001200010b003200210b803ad0542010b10430b1d01017f1041410110f2014100109901210010f30320001082031091030b1d01017f1041410110f2014100109901210010f303200010820310d4020b1d01017f1041410110f2014100109901210010f3032000108303ad10430b4b01037f230041106b220024001041410210f201410041a78f08410710e301210141011099012102200041086a200110f4032000280208200028020c2002108103ad1043200041106a24000b2701017f1041410110f2014100109901210010f303200010830345044041b4990841141003000b0b5501037f230041106b220024001041410210f201410041a78f08410710e301210141011099012102200041086a200110f4032000280208200028020c200210810345044041b4990841141003000b200041106a24000b5501057f230041206b2200240010bb011a410210f20141001099012102410110bf01210310bb01200041086a10f503107d210110930121042000410036021420002802102001200420022003200041146a10a803000b7d01077f230041206b2200240010bb011a410210f20141001099012104410110bf01210210bb01200210a90321031093012105200041086a10f503107d210110930121062000200536021c2000411f411b20031b360218200041ba9108419f910820031b36021420002802102001200620042002200041146a10a803000bd60101067f230041206b2201240010bb011a410110f2014100109901210410bb01200141086a10f503107d210210930121052001410036021420012802102103230041406a22002400200310a2030240200141146a22012802000440200041106a200141086a280200360200200020012902003703080c010b200041086a200310c30210a3030b20034101200010d002200041346a2002200520044100108e02200041206a200041106a280200360200200020002902343703282000200028023c36022420002000290308370318200041186a109902000b9f04010a7f230041206b220024001041410010f20120004181043b00061093012102200041086a220110f5032000200236021c200041123602182000418d9108360214200041066a2102200041146a2106230041106b22002400200010a10336020c230041206b220424002001280208109303044041cf8a0841201003000b200110a4032101200241026a2108230041106b22052400200541086a41ea8508410e10a60120052005280208200528020c200110a70120052802002109200528020422072000410c6a108d0203400240024002400240024002400240024002400240024002400240200820022201470440200141016a210241cf960821004111210320012d000041016b0e0c0c0102030405060708090a0b0e0b2004200936020020042007360204200541106a24000c0c0b41e0960821000c0a0b41f1960821000c090b418297082100411621030c080b419897082100410f21030c070b41a797082100411b21030c060b41c2970821000c050b41d397082100411321030c040b41e697082100411721030c030b41fd97082100411521030c020b4192980821000c010b41a398082100411021030b109301220120002003100f1a2007200110c3010c010b0b2004411c6a200641086a2802003602002004200429030037020c200420062902003702142004410c6a220241086a220128020004402001109a020b200228020021012002280204210241e68608109b0210870220012002108802000b4001027f230041206b220024001041410110f201410010bf012101200041146a10f503200020002802142000280218200110a5032000108202200041206a24000ba20101037f230041d0006b220024001041410210f201410041df9108410210e3012101410110bf012102200020013602182000411c6a10f503200041286a200028021c2000280220200210a5032000200041346a360244200042003703382000200041186a3602482000200041306a2201360240200041386a109802200041106a200129030037030020002000290328370308200041086a108202200041d0006a24000b3b01027f230041106b220024001041410110f2012000410010bf01360200200041046a220110f503200110a4034200200010a501200041106a24000b3701027f230041106b220024001041410010f201200041046a220110f50310a103200110a403280200420010af01101d200041106a24000b4401027f230041206b22002400410010f201200010b201200041146a220110f503200110a403280200200028020810e003044041ba8a0841151003000b200041206a24000bb20101047f230041e0006b22002400410010f20110b3012101200041086a220210f503200210a403210220002001100a36021c2000410036021820002001360214200041286a2103200041d0006a210102400340200041cf006a200041146a10b80120002d004f4101470d01200041406b200141086a290000370300200020012900003703382003200041386a10b6012002280200200028023010e003450d000b41ba8a0841151003000b200041e0006a24000b4a01017f230041106b220024001041410010f201200041046a10f5030240200028020c1093034504402000280204200028020810a60310d0030c010b109301101b1a0b200041106a24000b8d0201087f230041206b2200240010bb011a410110f2014100109901210610bb01200041086a107f107d210210930121072000410036021420002802102103200041146a2101230041306b2200240020002003108001024002400240200028020041016b0e020001020b41a28a0841181003000b418e8a0841141003000b027f2001280200220504402001280208210420012802040c010b10ad01210110930122042001108f0220042003108f0241ef8a08210541100b210120034101200010d002200041246a2002200720064104108e0220002004360214200020013602102000200536020c200020002802283602202000200028022436021c2000200028022c3602182000410c6a109902000b6d01027f230041106b220024001041410110f20141de9008410810eb012101200041046a107f0240200028020420002802081087014102470440200110c002450d01200028020c4102200110840110d002200041106a24000f0b418e8a0841141003000b41fe890841101003000b5a01037f230041206b220024001041410210f201410010bf0121012000410110d40122024110763a0012200020023b0110200041146a107f2000200028021420002802182001200041106a10b9032000108202200041206a24000b9a0101047f230041406a220024001041410310f201410041df9108410210e3012101410110bf0121022000410210d40122034110763a0022200020033b01202000200136021c200041246a107f200041306a2201200028022420002802282002200041206a10b9032000411c6a200110bb03200041106a200041386a29030037030020002000290330370308200041086a108202200041406b24000b4902027f017e230041206b220024001041410210f201410010152102410110bf012101200041146a107f2000200028021420002802182002200110bc032000108202200041206a24000b860102037f017e230041306b220024001041410310f201410041df9108410210e3012101410110152103410210bf01210220002001360210200041146a107f200041206a2201200028021420002802182003200210bc03200041106a200110bb03200041086a200041286a290300370300200020002903203703002000108202200041306a24000b4202027f017e230041106b220024001041410210f2014100101521022000410110bf01360200200041046a2201107f200110a4032002200010a501200041106a24000b3e02027f017e230041106b220024001041410110f201410010152102200041046a2201107f10a103200110a403280200200210af01101d200041106a24000bab02020b7f017e230041206b220124001041410110f20141001015210b200141046a2200107f10a1032102200010a403210342001025210610042104100421071004210810042105100421004200102521091004210a20022003280200200b2006200420072008200520002009200a107120022003280200200b41751072200141106a417510bb022000100a450440200041d981084120100f1a0b200141003b011020044100200141106a2200410210b5011a200120051084012202100a3602182001410036021420012002360210200010d4032102200010d4032103200141106a10d40321042001280214200128021810d201450440418f8808412041a58008410e108f01000b1093012200200210f9012000200310f9012000200410f9012000101b1a200141206a24000b4801017f230041106b220024001041410010f201200041046a107f0240200028020c10cd0204402000280204200028020810a60310d0030c010b109301101b1a0b200041106a24000b4e01027f230041106b220024001041410110f201410041819208410310e7012101200041046a10ed03200028020810cb02044041be8908410f1003000b200028020c200110fe02200041106a24000b4201027f230041106b220024001041410110f201410041a28f08410510e7012101200041046a10ed03200028020420002802082001108003ad101a200041106a24000b9a0101077f230041106b220024001041410110f201410041a28f08410510e7012103200041046a10ed032000280208220210cb02210120002802042204200220011080032105024020012003460440200521060c010b2004200220031080032106200420022003200510ff020b200420022001410010eb02200145044010a002000b200028020c200141016b10fe022006ad101a200041106a24000b4e01037f230041106b220024001041410210f201410041a28f08410510e7012101410141ff9108410210e7012102200041046a10ed03200028020420002802082001200210ff02200041106a24000b6901057f230041106b220124001041410010f201200141046a10ed032001280208220210cb022103200128020421044101210002400340200020034d04402000417f460d02200420022000108003ad101a200041016a21000c010b0b200141106a24000f0b10a002000b4801027f230041206b220024001041410010f201200041086a220110f2032000200028020c10cb0236021c2000410136021820002001360214200041146a10d503200041206a24000b3c01037f230041106b220024001041410110f201410041f38e08410410e7012101200041046a220210f20320022001109b03ad1043200041106a24000b3d01027f230041106b220024001041410110f201410041f38e08410410e7012101200041046a10f203200028020c2001109c03ad1043200041106a24000bdc0101087f230041106b220124001041410110f201410041f38e08410410e7012104200141046a10f2030240200128020c22052004109f032200044002402001280208220310cb02220220004f044020002002460d01200128020422072003200210f0022106200310cb022000490d032007200010ec022006ad10d2020c010b0c020b200310cb0220024904400c020b2001280204200210ec0210d4022003200241016b10d10220002002470440200520062000109d030b20052004109e0310d4020b2000410047ad1043200141106a24000f0b41a2990841121003000b7902057f017e230041206b220024001041410210f201200041086a4100419f920810ec01200041146a4101419d920810ec01200028021c21012000280218210220002802102103200028020c21042000280208200028021410b20245200220044772047e4200052003200110b901ad0b1043200041206a24000b0d001041410010f2014200101a0b0d001041410010f20110a002000b0d001041410010f201427e10430b0f001041410010f20110c20210d0030b2301017f1041410110f201410010ed01220010be01047e420105200010c002ad0b10430b17001041410110f201410010990110cc0210c002ad10430b900102037f027e230041206b220024001041410110f201410041e58e08410810e701ad21041093012101034020032004514504401093012202200342017c22031096022001200210c3010c010b0b20002001100a36021c20004100360218200020013602140340200041086a200041146a10fb0120002802084101710440200028020c101b1a0c010b0b200041206a24000b2b01017f1041410110f201410041ed8e08410610e701220045044041d78e08410e10a401000b2000ad101a0b120010bb011a410010f20110ba01107d101d0b2001017f1041410110f201410041a78f08410710e301210010ee03200010061a0b4101017f230041206b220024001041410010f201200010ee0310c70210f003200041106a2000280200200028020410de02200028021045ad1043200041206a24000b4501027f230041106b220024001041410110f201410041f38e08410410e7012101200010ee0310c70210f0032000280208200028020c200110ea02ad1043200041106a24000b3f01017f230041206b220024001041410010f201200010ee0310c70210f003200041106a2000280200200028020410de022000350210101a200041206a24000b880101047f230041206b220024001041410110f201410041f38e08410410e7012101200041106a10ee0310c70210f00302402000280218200028021c200110e80222010440200041086a20002802102202200028021422032001108901200020022003200028020c10f90220002802004101710d010b109201000b2000350204101a200041206a24000b880101047f230041206b220024001041410110f201410041f38e08410410e7012101200041106a10ee0310c70210f00302402000280218200028021c200110e80222010440200041086a20002802102202200028021422032001108901200020022003200028020810f90220002802004101710d010b109201000b2000350204101a200041206a24000b6701037f230041306b220024001041410010f201200041106a10ee0310c70210f003200041206a200028021022012000280214220210de02200041086a20012002200028022410f9022000280208410171450440109201000b200035020c101a200041306a24000b6701037f230041306b220024001041410010f201200041106a10ee0310c70210f003200041206a200028021022012000280214220210de02200041086a20012002200028022810f9022000280208410171450440109201000b200035020c101a200041306a24000b7302027f017e230041306b220024001041410010f201200041106a220110ee0310c70210ef03200041086a200110dd022000290308210210930121012000200237022803402000200041286a108801200028020041017104402001200028020410c3010c010b0b2001101b1a200041306a24000bc90102057f017e230041406a220024001041410010f2012000411c6a220110ee0310c70210ef03200041106a200110dd02200029031021051093012102200020053702342000200136023c024003400240200041086a200041346a1088012000280208410171450d00200028023c220141086a2802002001410c6a280200200028020c220410ea02450d022001280214108401220341948908410710141a2004200310f60120022001280210200310e90210c3010c010b0b2002101b1a200041406b24000f0b109201000b5c01037f230041206b220024001041410110f201410041f38e08410410e7012000410c6a10ee0310c70210f1032000280210108401220141f88908410610141a200110f601200028020c200110e902410047ad1043200041206a24000b4301027f230041206b220024001041410110f201410041a28f08410510e70121012000410c6a10ee0310c70210f103200041146a200110ef02ad101a200041206a24000b7e01027f230041206b220024001041410110f201410041f78e08410510e7012101200041003a001c20002001360218200041013602140340200041086a200041146a10e10320002802084101710440200028020c2101200041de9308410a107c10c60320002802002000280204200110da021a0c010b0b200041206a24000b950101047f230041306b220024001041410110f201410041f78e08410510e7012101200041003a00202000200136021c2000410136021802400340200041106a200041186a10e1032000280210410171450d01200028021422014190ce006a220220014f0440200041246a220341d49308410a107c108f03200041086a20032002200110d9020c010b0b10a002000b200041306a24000b7801037f230041206b220024001041410110f201410041f78e08410510e7012101200041003a00102000200136020c2000410136020803402000200041086a10e1032000280200410171044020002802042101200041146a2202418296084114107c10cf0320022001109b031a0c010b0b200041206a24000b3601027f1041410210f201410041a78f08410710e301410141e19108410910e701419e9508411c107c220110f601200110d502101b1a0b4201037f1041410110f201410041ea9108410b10e301210110ee0310c70241d79508410b107c108401220041899908410410141a2000200110051a200010cd03101a0b1e01017f1041410210f201410010bf012200410110bf0110ac022000101d0b1e01017f1041410210f201410010bf012200410110bf0110c1022000101d0b19001041410210f201410010bf01410110bf0110b202ad10430b1a001041410010f20142e4f401108501410210b70210be02101d0b14001041410010f20142b9e000108501107d101d0b4101017f230041106b220024001041410110f201200041086a410010bf01410910b502200028020841017145044010c403000b200028020c1042200041106a24000b4101017f230041106b220024001041410110f201200041086a410010bf01410910bc02200028020841017145044010c403000b200028020c1042200041106a24000ba90101057f230041206b220024001041410210f201200041186a410041c09008410510e00120002802182102200028021c2101200041106a410141ba9008410610e001200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410bf02200028020c2101200028020821020c010b20032004200110bd0221030b2002200310ac022002200110f501200041206a24000ba90101057f230041206b220024001041410210f201200041186a410041c09008410510e00120002802182102200028021c2101200041106a410141ba9008410610e001200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410bf02200028020c2101200028020821020c010b20032004200110bd0221030b2002200310c1022002200110f501200041206a24000bbd0101067f230041106b220024001041410210f201200041086a410041c09008410510e00120002802082103200028020c21012000410141ba9008410610e00120002802002104027f024002400240024002402001200028020422024b200120024922056b41ff01710e020201000b200120024d0d030c020b20050d012004200120026b10b70210b902200310b2020c030b2003200410b2020c020b10a002000b2003200220016b10b70210b902200410b2020bad1043200041106a24000b5101017f230041106b220024001041410110f201200041086a410041b88d08410110e00120002000280208200028020c10b502200028020041017145044010c403000b20002802041042200041106a24000b5101017f230041106b220024001041410110f201200041086a410041b88d08410110e00120002000280208200028020c10bc02200028020041017145044010c403000b20002802041042200041106a24000b1d01017f1041410110f2014100109901210010c303200010a502101b1a0b1f01017f1041410110f2014100109901210010c3032000107341004aad10430b3301037f1041410210f201410010990121004101109901210110c30322022000107e220010741a20002002200110a50210f7010b5301047f1041410210f201410010990121004101109901210110c303220220002001103d1a20001084012103200041b88f08410a10141a200141b88f08410a10141a2002200310a5022002200010a50210f7010bea0401057f230041f0006b220024000240024002401090022204109f01220110a9020d00200020011084012201100a360254200041003602502000200136024c200041cc006a220110c1032102200110c203210310930121010340200304402001200041cc006a10c10310c301200341016b21030c010b0b2000280250200028025410d201450d01200410d4022000410c6a2002109202200028022c450d00200041cc006a22032002109202200028026c450d00024002402003419f9108411b109102450440200341ba9108411f1091020d012003418d91084112109102450d0210f401410010f30120004100360240200041306a200041406b41d99108410610d101200028024010f10120002802302001100a210110f4014100200110f0014101710d0341b896084108107c1091030c030b10f401410010f30120004100360240200041306a2204200041406b10c401200028024010f1012000280234210220002802302001100a210110f4014100200110f0014101710440200410f503200028023810a7030c030b200041306a220110f5032001200210a0030c020b10f401410010f30120004100360240200041306a2203200041406b41d99108410610d101200028024010f10120002802302001100a210110f4014100200110f0014101710440200310f503200028023810a7030c020b200041306a10b201200041406b220110f5032001200028023810840110a0030c010b2002200110db03450d00200041cc006a2002109202200028026c450d002002200110db03450d002002200110db030d020b200041f0006a24000f0b419f8108411941a58008410e108f01000b41a18e0841361003000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072006200342208822067e22082005200142208822097e7c22054220867c220a37030020002007200a56ad200620097e2005200854ad4220862005422088847c7c200120047e200220037e7c7c3703080b4301037f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030b980302047f037e230041f0006b220c2400200c41d8006a200110b60202400240200c280258410171047f200c28025c210d410910b702210e4201108501200d10b802210f200c41e0006a2001200e10b902200f10ba0210bb02200c280260450d01200c41406b200c29036822112011423f872212200b427f108407200c290348200c2903402210423f87520d02200c41306a2010428094ebdc037f200a7c22102010423f8720112012108407200c290338200c2903302210423f87520d02200c41206a2010428094ebdc037f20097d22102010423f8720112012108407200c290328200c2903202210423f87520d02200c41106a2010428094ebdc037f20087c22102010423f8720112012108407200c290318200c2903102212423f87520d02200c2002ad420020074200108407200c290308200c2903002211423f87520d022012428094ebdc037f20067d200dad20057e7c221220117d22102012532011420055730d022010108301210241010541000b21012000200236020420002001360200200c41f0006a24000f0b2004200310a401000b10a002000ba50101027f230041306b22062400027f2001500440200641106a2005410d10a601200641086a20062802102006280214200010a70120062802082107200628020c0c010b200641286a2004200310a601200641206a2006280228200628022c200010a701200641186a20062802202006280224200110a80120062802182107200628021c0b2100200620072000200210a9012006280200200628020410aa01200641306a24000b3501027f230041106b22032400200341086a20022001107c22041080012000200329030837020020002004360208200341106a24000b0b901a0500418080080bd901546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f726d697373696e67206b657973657269616c697a6572206465636f6465206572726f723a207472616e736665722065786563757465207265717569726573207061796d656e740041f981080bed04454c524f4e447472616e7366657265736474696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e656761746976657472616e736665722065786563757465206661696c6564455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c65464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c6573697373756543425f434c4f53555245636f6e74726163742063616c6c20656e636f6465206572726f723a20ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0041ef86080b010100418387080b9e1302ffff73796e6320726573756c74617267756d656e74206f7574206f662072616e6765696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532316661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a206c6e20696e7465726e616c206572726f726c6f673220696e7465726e616c206572726f724553445420657870656374656445474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c726561647920726567697374657265642e696e646578496e76616c696420746f6b656e204944546f6b656e20494420616c72656164792073657449737375652077617320616c72656164792063616c6c6564496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c726561647920736574556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e63656675747572655f76616c7565756e6c6f636b5f74696d657374616d706c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a2073746f72616765206465636f6465206572726f7220286b65793a20786d6f6d616d766563616d76616464726573735f6e756d6265725f706169727364756d6d7964617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472312e2e2e6368616e6765646d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f627974657361727261797365636f6e64666972737463616e6e6f74206265207a65726f73746f726167655f6b6579746f6b656e5f69646e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f65787472615f6b6579616464726573735f6172676174747269627574657369646c656e746f6b656e5f6964656e746966696572617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c65726576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727365745f6d61707065727665635f6d61707065726d6d2d6b65796d6d2d76616c75656d6d2d6e756d2d656e747269657373746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d617070657273696e676c655f76616c75655f6d61707065725f776974685f6b65796c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f61646472657373756e6f7264657265645f7365745f6d617070657277686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657474696d656c6f636b5f6d617070657245534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e46545570646174654174747269627574657345534454526f6c654e465441646455524945534454526f6c654e4654526563726561746545534454526f6c654d6f64696679526f79616c7469657345534454526f6c654d6f6469667943726561746f7245534454526f6c655365744e6577555249455344545472616e73666572526f6c65456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726470616e6963206f636375727265640000f8020200fb020200fb020200fe02020001030200fb020200fe0202000103020003000000030000000300000003000000040000000300000003000000040041a49a080b0438ffffff", - "report": { - "imports": [ - "addEC", - "bigIntAbs", - "bigIntAdd", - "bigIntAnd", - "bigIntCmp", - "bigIntFinishSigned", - "bigIntFinishUnsigned", - "bigIntGetCallValue", - "bigIntGetESDTExternalBalance", - "bigIntGetInt64", - "bigIntGetSignedArgument", - "bigIntGetUnsignedArgument", - "bigIntIsInt64", - "bigIntLog2", - "bigIntMul", - "bigIntNeg", - "bigIntNew", - "bigIntOr", - "bigIntPow", - "bigIntSetInt64", - "bigIntShl", - "bigIntShr", - "bigIntSign", - "bigIntSqrt", - "bigIntSub", - "bigIntTDiv", - "bigIntTMod", - "bigIntXor", - "checkNoPayment", - "cleanReturnData", - "createEC", - "doubleEC", - "ellipticCurveGetValues", - "finish", - "getArgumentLength", - "getBlockEpoch", - "getBlockNonce", - "getBlockRound", - "getBlockTimestamp", - "getCurveLengthEC", - "getGasLeft", - "getNumArguments", - "getPrevBlockEpoch", - "getPrevBlockNonce", - "getPrevBlockRound", - "getPrevBlockTimestamp", - "getPrivKeyByteLengthEC", - "getShardOfAddress", - "isOnCurveEC", - "isSmartContract", - "mBufferAppend", - "mBufferAppendBytes", - "mBufferCopyByteSlice", - "mBufferEq", - "mBufferFinish", - "mBufferFromBigIntSigned", - "mBufferFromBigIntUnsigned", - "mBufferFromSmallIntSigned", - "mBufferFromSmallIntUnsigned", - "mBufferGetArgument", - "mBufferGetByteSlice", - "mBufferGetBytes", - "mBufferGetLength", - "mBufferNew", - "mBufferSetByteSlice", - "mBufferSetBytes", - "mBufferSetRandom", - "mBufferStorageLoad", - "mBufferStorageLoadFromAddress", - "mBufferStorageStore", - "mBufferToBigIntSigned", - "mBufferToBigIntUnsigned", - "mBufferToSmallIntSigned", - "mBufferToSmallIntUnsigned", - "managedAsyncCall", - "managedCaller", - "managedCreateEC", - "managedEncodeSecp256k1DerSignature", - "managedExecuteOnDestContext", - "managedGenerateKeyEC", - "managedGetAllTransfersCallValue", - "managedGetBlockRandomSeed", - "managedGetCodeMetadata", - "managedGetESDTTokenData", - "managedGetESDTTokenType", - "managedGetMultiESDTCallValue", - "managedGetOriginalTxHash", - "managedGetPrevBlockRandomSeed", - "managedGetStateRootHash", - "managedIsBuiltinFunction", - "managedKeccak256", - "managedMapContains", - "managedMapGet", - "managedMapNew", - "managedMapPut", - "managedMapRemove", - "managedMarshalCompressedEC", - "managedMarshalEC", - "managedMultiTransferESDTNFTExecuteWithReturn", - "managedOwnerAddress", - "managedRipemd160", - "managedSCAddress", - "managedScalarBaseMultEC", - "managedScalarMultEC", - "managedSha256", - "managedSignalError", - "managedTransferValueExecute", - "managedUnmarshalCompressedEC", - "managedUnmarshalEC", - "managedVerifyBLS", - "managedVerifyBLSAggregatedSignature", - "managedVerifyBLSSignatureShare", - "managedVerifyCustomSecp256k1", - "managedVerifyEd25519", - "managedVerifySecp256k1", - "managedVerifySecp256r1", - "managedWriteLog", - "signalError", - "smallIntFinishSigned", - "smallIntFinishUnsigned", - "smallIntGetSignedArgument", - "smallIntGetUnsignedArgument", - "validateTokenIdentifier" - ], - "isMemGrow": false, - "eiCheck": { - "eiVersion": "1.5", - "ok": true - }, - "codeReport": { - "path": "../output/basic-features-barnard.wasm", - "size": 70415, - "hasAllocator": false, - "hasPanic": "without message" - } - } -} diff --git a/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json b/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json index 9bc799f87..6b35fa6ae 100644 --- a/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json +++ b/test/features/basic-features/output/basic-features-storage-bytes.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "basic-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -123,6 +123,31 @@ } ] }, + "EsdtTokenType": { + "type": "enum", + "variants": [ + { + "name": "Fungible", + "discriminant": 0 + }, + { + "name": "NonFungible", + "discriminant": 1 + }, + { + "name": "SemiFungible", + "discriminant": 2 + }, + { + "name": "Meta", + "discriminant": 3 + }, + { + "name": "Invalid", + "discriminant": 4 + } + ] + }, "ExampleEnumSimple": { "type": "enum", "docs": [ @@ -263,7 +288,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/features/basic-features/output/basic-features.mxsc.json b/test/features/basic-features/output/basic-features.mxsc.json index fde3b63f3..5887e0a98 100644 --- a/test/features/basic-features/output/basic-features.mxsc.json +++ b/test/features/basic-features/output/basic-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "basic-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -70,6 +70,56 @@ } ] }, + { + "docs": [ + "TODO: it's duplicated in composability, de-duplicate after sorting out the interactors" + ], + "name": "get_esdt_token_data", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + }, + { + "name": "token_id", + "type": "TokenIdentifier" + }, + { + "name": "nonce", + "type": "u64" + } + ], + "outputs": [ + { + "type": "EsdtTokenType" + }, + { + "type": "BigUint" + }, + { + "type": "bool" + }, + { + "type": "bytes" + }, + { + "type": "bytes" + }, + { + "type": "bytes" + }, + { + "type": "Address" + }, + { + "type": "BigUint" + }, + { + "type": "List" + } + ] + }, { "name": "sqrt_big_uint", "mutability": "mutable", @@ -1768,6 +1818,82 @@ } ] }, + { + "name": "epoch_info", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + }, + { + "type": "u64" + }, + { + "type": "u64" + }, + { + "type": "u64" + } + ] + }, + { + "name": "code_hash", + "mutability": "readonly", + "inputs": [ + { + "name": "address", + "type": "Address" + } + ], + "outputs": [ + { + "type": "bytes" + } + ] + }, + { + "docs": [ + "Prev block timestamp (ms, then s), current block timestamp (ms, then s)" + ], + "name": "get_block_timestamps", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + }, + { + "type": "u64" + }, + { + "type": "u64" + }, + { + "type": "u64" + } + ] + }, + { + "name": "get_block_timestamp_ms", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, + { + "name": "get_prev_block_timestamp_ms", + "mutability": "readonly", + "inputs": [], + "outputs": [ + { + "type": "u64" + } + ] + }, { "name": "get_caller", "mutability": "mutable", @@ -6593,6 +6719,31 @@ } ] }, + "EsdtTokenType": { + "type": "enum", + "variants": [ + { + "name": "Fungible", + "discriminant": 0 + }, + { + "name": "NonFungible", + "discriminant": 1 + }, + { + "name": "SemiFungible", + "discriminant": 2 + }, + { + "name": "Meta", + "discriminant": 3 + }, + { + "name": "Invalid", + "discriminant": 4 + } + ] + }, "ExampleEnumSimple": { "type": "enum", "docs": [ @@ -6719,7 +6870,7 @@ } } }, - "code": "0061736d01000000018a022660000060027f7f0060027f7f017f60017f017f60017f0060037f7f7f017f60037f7f7f006000017f60047f7f7f7f0060047f7f7f7f017f6000017e60027f7e0060057f7f7f7f7f0060017f017e60037f7e7f0060037f7f7e017f60027f7f017e60017e017f60047f7f7f7e0060057f7f7f7e7f0060017e0060057f7f7e7f7f017f60067f7f7f7f7f7f017f60037f7f7f017e60067e7f7f7f7f7f017f60077f7f7f7f7f7f7f00600b7f7f7e7f7f7f7f7f7f7f7f0060047e7f7f7f017f60027e7f0060017e017e60027f7e017f60037f7f7e0060067f7f7f7f7f7f0060047f7f7e7f0060047f7e7f7f0060057f7e7e7e7e00600c7f7f7f7f7f7e7e7e7e7e7e7e0060067f7e7f7f7f7f0002a0167503656e76126d616e616765645369676e616c4572726f72000403656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000703656e760d6d427566666572417070656e64000203656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001803656e760d6d616e6167656443616c6c6572000403656e76186d616e616765644765744f726967696e616c547848617368000403656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001303656e76136d616e616765644f776e657241646472657373000403656e760f6d4275666665725365744279746573000503656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e76126d427566666572476574417267756d656e74000203656e76126d427566666572417070656e644279746573000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000d03656e7619736d616c6c496e744765745369676e6564417267756d656e74000d03656e7611676574417267756d656e744c656e677468000303656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000703656e760d6d42756666657246696e697368000303656e760666696e697368000103656e7616736d616c6c496e7446696e697368556e7369676e6564001403656e7614626967496e7446696e697368556e7369676e6564000403656e7609626967496e74537562000603656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001503656e760a6765744761734c656674000a03656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000003656e7609626967496e74436d70000203656e760d6d616e616765644d6170476574000503656e7609626967496e744e6577001103656e7616656c6c6970746963437572766547657456616c756573001603656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000903656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000603656e761776616c6964617465546f6b656e4964656e746966696572000303656e760a626967496e7454446976000603656e7609626967496e744d756c000603656e7609626967496e7453686c000603656e7609626967496e74536872000603656e760a626967496e744c6f6732000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000603656e760d6d616e616765644d61704e6577000703656e760d6d616e616765644d6170507574000503656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e7612626967496e7446696e6973685369676e6564000403656e7614736d616c6c496e7446696e6973685369676e6564001403656e7609626967496e74416273000103656e7609626967496e744e6567000103656e760a626967496e74544d6f64000603656e7609626967496e74416e64000603656e7608626967496e744f72000603656e7609626967496e74586f72000603656e7611676574426c6f636b54696d657374616d70000a03656e760d676574426c6f636b4e6f6e6365000a03656e760d676574426c6f636b526f756e64000a03656e760d676574426c6f636b45706f6368000a03656e76196d616e61676564476574426c6f636b52616e646f6d53656564000403656e761567657450726576426c6f636b54696d657374616d70000a03656e761167657450726576426c6f636b4e6f6e6365000a03656e761167657450726576426c6f636b526f756e64000a03656e761167657450726576426c6f636b45706f6368000a03656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000403656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000403656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000503656e76146d616e6167656456657269667945643235353139000503656e76166d616e61676564566572696679536563703235366b31000503656e761c6d616e61676564566572696679437573746f6d536563703235366b31000903656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000503656e76166d616e61676564566572696679536563703235367231000503656e761e6d616e61676564566572696679424c535369676e61747572655368617265000503656e76236d616e61676564566572696679424c53416767726567617465645369676e6174757265000503656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001903656e7608646f75626c654543000c03656e760b69734f6e43757276654543000503656e76136d616e616765645363616c61724d756c744543001603656e76176d616e616765645363616c6172426173654d756c744543000903656e76106d616e616765644d61727368616c4543000903656e761a6d616e616765644d61727368616c436f6d707265737365644543000903656e76126d616e61676564556e6d61727368616c4543000903656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000903656e76146d616e6167656447656e65726174654b65794543000903656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000903656e76176d616e6167656447657445534454546f6b656e44617461001a03656e76126d616e616765644d6170436f6e7461696e73000203656e76106d616e616765644d617052656d6f7665000503656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000d03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000903656e76096d4275666665724571000203656e761b6d616e616765645472616e7366657256616c756545786563757465001503656e76106d616e616765644173796e6343616c6c00080392069006070203070401081103110b0201080501060201080108000701030106010301010301010301010e06081208010e1b07070f04070407040901070301020707030203030805010305050505030601030505050105080505030502070206050503050602050207010c0902030208030105050305010404040001010401010401010104011c010401040603070808060601010c0107050100010b08010408070404030606030305080004061d0201010302020101020303060204080601030202020106050208020301070103030303100303030d030406010b010604020201020805020201060501080102020502060502050802060205020109010108010306080101060201080505020201020606020606010808060101040b030e021e10031f10020206020201070406030802042003210f01120506020202010312080f0f0c05170113030302040303070004010101060101170210010401040c0301040303220202040606030201040404040101070707040704070101010407010407010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002305240e250605030100030616037f01418080080b7f0041f59a080b7f0041809b080b07fc50b403066d656d6f7279020004696e697400f3031070616e6963576974684d65737361676500f4030a636f756e745f6f6e657300f60319656e64706f696e745f776974685f6d757461626c655f61726700f7030d737172745f6269675f75696e7400f8030d6c6f67325f6269675f75696e7400f9030b706f775f6269675f696e7400fa030c706f775f6269675f75696e7400fb030f6269675f75696e745f746f5f75363400fc031562696775696e745f6f76657277726974655f75363400fd030d6269675f75696e745f7a65726f00fe03136269675f75696e745f66726f6d5f7536345f3100ff031162696775696e745f66726f6d5f753132380080041c6269675f75696e745f66726f6d5f6d616e616765645f6275666665720081040c6269675f696e745f7a65726f008204126269675f696e745f66726f6d5f6936345f310083040f6269675f75696e745f65715f7536340084040e6269675f696e745f746f5f69363400850414626967696e745f6f76657277726974655f693634008604106269675f696e745f746f5f7061727473008704146269675f696e745f66726f6d5f62696775696e740088040b6164645f6269675f696e74008904146164645f6269675f696e745f6269675f75696e74008a04146164645f6269675f75696e745f6269675f696e74008b04186164645f6269675f696e745f6269675f75696e745f726566008c04186164645f6269675f75696e745f6269675f696e745f726566008d040f6164645f6269675f696e745f726566008e040c6164645f6269675f75696e74008f04106164645f6269675f75696e745f7265660090040b7375625f6269675f696e740091040f7375625f6269675f696e745f7265660092040c7375625f6269675f75696e74009304107375625f6269675f75696e745f7265660094040b6d756c5f6269675f696e740095040f6d756c5f6269675f696e745f7265660096040c6d756c5f6269675f75696e74009704106d756c5f6269675f75696e745f7265660098040b6469765f6269675f696e740099040f6469765f6269675f696e745f726566009a040c6469765f6269675f75696e74009b04106469765f6269675f75696e745f726566009c040b72656d5f6269675f696e74009d040f72656d5f6269675f696e745f726566009e040c72656d5f6269675f75696e74009f041072656d5f6269675f75696e745f72656600a004126164645f61737369676e5f6269675f696e7400a104166164645f61737369676e5f6269675f696e745f72656600a204136164645f61737369676e5f6269675f75696e7400a304176164645f61737369676e5f6269675f75696e745f72656600a404127375625f61737369676e5f6269675f696e7400a504167375625f61737369676e5f6269675f696e745f72656600a604137375625f61737369676e5f6269675f75696e7400a704177375625f61737369676e5f6269675f75696e745f72656600a804126d756c5f61737369676e5f6269675f696e7400a904136d756c5f61737369676e5f6269675f75696e7400aa04126469765f61737369676e5f6269675f696e7400ab04136469765f61737369676e5f6269675f75696e7400ac041272656d5f61737369676e5f6269675f696e7400ad041372656d5f61737369676e5f6269675f75696e7400ae04106269745f616e645f6269675f75696e7400af04146269745f616e645f6269675f75696e745f72656600b0040f6269745f6f725f6269675f75696e7400b104136269745f6f725f6269675f75696e745f72656600b204106269745f786f725f6269675f75696e7400b304146269745f786f725f6269675f75696e745f72656600b404176269745f616e645f61737369676e5f6269675f75696e7400b504166269745f6f725f61737369676e5f6269675f75696e7400b604176269745f786f725f61737369676e5f6269675f75696e7400b7040c7368725f6269675f75696e7400b804107368725f6269675f75696e745f72656600b9040c73686c5f6269675f75696e7400ba041073686c5f6269675f75696e745f72656600bb04137368725f61737369676e5f6269675f75696e7400bc041373686c5f61737369676e5f6269675f75696e7400bd04136765745f626c6f636b5f74696d657374616d7000be040f6765745f626c6f636b5f6e6f6e636500bf040f6765745f626c6f636b5f726f756e6400c0040f6765745f626c6f636b5f65706f636800c104156765745f626c6f636b5f72616e646f6d5f7365656400c204186765745f707265765f626c6f636b5f74696d657374616d7000c304146765745f707265765f626c6f636b5f6e6f6e636500c404146765745f707265765f626c6f636b5f726f756e6400c504146765745f707265765f626c6f636b5f65706f636800c6041a6765745f707265765f626c6f636b5f72616e646f6d5f7365656400c7040a6765745f63616c6c657200c804116765745f6f776e65725f6164647265737300c904146765745f73686172645f6f665f6164647265737300ca041169735f736d6172745f636f6e747261637400cb04136765745f73746174655f726f6f745f6861736800cc040b6765745f74785f6861736800cd040c6765745f6761735f6c65667400ce041f6765745f63756d756c617465645f76616c696461746f725f7265776172647300cf04116765745f636f64655f6d6574616461746100d0041369735f6275696c74696e5f66756e6374696f6e00d10410636f6465635f6572725f66696e69736800d20415636f6465635f6572725f73746f726167655f6b657900d30415636f6465635f6572725f73746f726167655f67657400d40415636f6465635f6572725f73746f726167655f73657400d50415636f6465635f6572725f6576656e745f746f70696300d60414636f6465635f6572725f6576656e745f6461746100d70417636f6465635f6572725f636f6e74726163745f696e697400d80417636f6465635f6572725f636f6e74726163745f63616c6c00d9040e636f6d707574655f73686132353600da0411636f6d707574655f6b656363616b32353600db0411636f6d707574655f726970656d6431363000dc04147665726966795f626c735f7369676e617475726500dd04187665726966795f656432353531395f7369676e617475726500de041a7665726966795f736563703235366b315f7369676e617475726500df04217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500e0041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500e1041a7665726966795f7365637032353672315f7369676e617475726500e2041a7665726966795f626c735f7369676e61747572655f736861726500e3041f7665726966795f626c735f616767726567617465645f7369676e617475726500e404086563686f5f75363400e504086563686f5f69363400e604086563686f5f69333200e704086563686f5f75333200e8040a6563686f5f6973697a6500e9040a6563686f5f7573697a6500e804076563686f5f693800ea04076563686f5f753800eb04096563686f5f626f6f6c00ec040d6563686f5f6f70745f626f6f6c00ed040c6563686f5f6e6f7468696e6700ee040d6563686f5f61727261795f753800ef04146563686f5f6d756c74695f76616c75655f75333200f004176563686f5f6d756c74695f76616c75655f7475706c657300f104126563686f5f7365725f6578616d706c655f3200f204106563686f5f73696d706c655f656e756d00f3041c66696e6973685f73696d706c655f656e756d5f76617269616e745f3100f404136563686f5f6e6f6e5f7a65726f5f7573697a6500f5041c6563686f5f736f6d655f617267735f69676e6f72655f6f746865727300f6040d6563686f5f617272617976656300f7040d6563686f5f6269675f75696e7400f8040c6563686f5f6269675f696e7400f904136563686f5f6d616e616765645f62756666657200fa04146563686f5f6d616e616765645f6164647265737300fb04136563686f5f6d616e616765645f6f7074696f6e00fc04186563686f5f6269675f696e745f6d616e616765645f76656300fd04126563686f5f6269675f696e745f7475706c6500fe04136563686f5f6269675f696e745f6f7074696f6e00ff041b6563686f5f7475706c655f696e746f5f6d756c7469726573756c740080051f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f766563008105246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e7469666965720082051f6563686f5f6d616e616765645f6173796e635f726573756c745f656d707479008305176563686f5f7661726167735f6d616e616765645f73756d0084051c6563686f5f7661726167735f7665635f776974685f636f756e74656400850527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f3100860527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f3200870512636f6d707574655f6765745f76616c75657300880511636f6d707574655f6372656174655f656300890515636f6d707574655f6765745f65635f6c656e677468008a0520636f6d707574655f6765745f707269765f6b65795f627974655f6c656e677468008b050e636f6d707574655f65635f616464008c0511636f6d707574655f65635f646f75626c65008d0516636f6d707574655f69735f6f6e5f63757276655f6563008e0513636f6d707574655f7363616c61725f6d756c74008f0518636f6d707574655f7363616c61725f626173655f6d756c7400900512636f6d707574655f6d61727368616c5f65630091051d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300920514636f6d707574655f756e6d61727368616c5f65630093051f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300940517636f6d707574655f67656e65726174655f6b65795f6563009505096c6f674576656e74410096050f6c6f674576656e7441526570656174009705096c6f674576656e7442009805136f6e6c795f6f776e65725f656e64706f696e740099051a6f6e6c795f757365725f6163636f756e745f656e64706f696e74009a050e726571756972655f657175616c73009b050873635f70616e6963009c05136d616464726573735f66726f6d5f6172726179009d051c6d616464726573735f66726f6d5f6d616e616765645f627566666572009e050b6d6275666665725f6e6577009f050e6d6275666665725f636f6e63617400a005126d6275666665725f636f70795f736c69636500a105126d6275666665725f7365745f72616e646f6d00a2050a6d6275666665725f657100a305146d616e616765645f616464726573735f7a65726f00a405126d616e616765645f616464726573735f657100a5050f6d616e616765645f7665635f6e657700a605186d616e616765645f7665635f62696775696e745f7075736800a705166d616e616765645f7665635f62696775696e745f657100a805186d616e616765645f7665635f616464726573735f7075736800a9050f6d616e616765645f7665635f73657400aa05126d616e616765645f7665635f72656d6f766500ab05106d616e616765645f7665635f66696e6400ac05146d616e616765645f7665635f636f6e7461696e7300ad05146d616e616765645f7265665f6578706c6963697400ae051073746f726167655f726561645f72617700af051173746f726167655f77726974655f72617700b0051973746f726167655f726561645f66726f6d5f6164647265737300b1050a6c6f61645f627974657300b2050d6c6f61645f6269675f75696e7400b3050c6c6f61645f6269675f696e7400b405086c6f61645f75363400b5050a6c6f61645f7573697a6500b605086c6f61645f69363400b705096c6f61645f626f6f6c00b805096c6f61645f6164647200b9050d6c6f61645f6f70745f6164647200ba051169735f656d7074795f6f70745f6164647200bb050f6765745f6e725f746f5f636c65617200bc0513636c6561725f73746f726167655f76616c756500bd050a6c6f61645f7365725f3200be05096c6f61645f6d61703100bf05096c6f61645f6d61703200c005096c6f61645f6d61703300c105156c6f61645f66726f6d5f616464726573735f72617700c2050b73746f72655f627974657300c3050e73746f72655f6269675f75696e7400c4050d73746f72655f6269675f696e7400c5050b73746f72655f7573697a6500c6050973746f72655f69333200c7050973746f72655f75363400c8050973746f72655f69363400c9050a73746f72655f626f6f6c00ca050a73746f72655f6164647200cb050e73746f72655f6f70745f6164647200cc050b73746f72655f7365725f3200cd050a73746f72655f6d61703100ce050a73746f72655f6d61703200cf050a73746f72655f6d61703300d0051273746f72655f72657365727665645f69363400d1051773746f72655f72657365727665645f6269675f75696e7400d2051573746f72655f72657365727665645f7665635f753800d30517746f6b656e5f6861735f7472616e736665725f726f6c6500d4050f74696d656c6f636b5f6d617070657200d5051a74696d656c6f636b5f7365745f696e697469616c5f76616c756500d6051d74696d656c6f636b5f7365745f756e6c6f636b5f74696d657374616d7000d7051674696d656c6f636b5f636f6d6d69745f616374696f6e00d8051d74696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d7000d9051974696d656c6f636b5f6765745f6675747572655f76616c756500da052574696d656c6f636b5f6765745f63757272656e745f76616c75655f61745f6164647265737300db052874696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d705f61745f6164647265737300dc052474696d656c6f636b5f6765745f6675747572655f76616c75655f61745f6164647265737300dd051b616464726573735f746f5f69645f6d61707065725f6765745f696400de0524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f00df0520616464726573735f746f5f69645f6d61707065725f6765745f6164647265737300e0051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300e10518616464726573735f746f5f69645f6d61707065725f73657400e20525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400e30521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400e40526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6164647265737300e5050d6765744c6973744d617070657200e605126c6973744d6170706572507573684261636b00e705136c6973744d61707065725075736846726f6e7400e905126c6973744d6170706572506f7046726f6e7400ea05116c6973744d6170706572506f704261636b00eb050f6c6973744d617070657246726f6e7400ec050e6c6973744d61707065724261636b00ed05136c6973744d617070657250757368416674657200ee05146c6973744d6170706572507573684265666f726500ef05146c6973744d617070657252656d6f76654e6f646500f005186c6973744d617070657252656d6f76654e6f64654279496400f105126c6973744d617070657253657456616c756500f205166c6973744d617070657253657456616c75654279496400f305176c6973744d617070657249746572617465427948616e6400f405176c6973744d61707065724974657261746542794974657200f5050c71756575655f6d617070657200f6051671756575655f6d61707065725f707573685f6261636b00f7051671756575655f6d61707065725f706f705f66726f6e7400f8051271756575655f6d61707065725f66726f6e7400f9050a6d61705f6d617070657200fa050f6d61705f6d61707065725f6b65797300fb05116d61705f6d61707065725f76616c75657300fc05116d61705f6d61707065725f696e7365727400fd05176d61705f6d61707065725f636f6e7461696e735f6b657900fe050e6d61705f6d61707065725f67657400ff05116d61705f6d61707065725f72656d6f76650080062c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74008106226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c740082061b6d61705f6d61707065725f656e7472795f616e645f6d6f64696679008306236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b6579008406176d61705f73746f726167655f6d61707065725f76696577008506216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c740086061f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b6579008706166d61705f73746f726167655f6d61707065725f6765740088061f6d61705f73746f726167655f6d61707065725f696e736572745f76616c75650089061c6d61705f73746f726167655f6d61707065725f6765745f76616c7565008a06196d61705f73746f726167655f6d61707065725f72656d6f7665008b06186d61705f73746f726167655f6d61707065725f636c656172008c06346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74008d06386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c74008e062a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f757064617465008f060a7365745f6d6170706572009006117365745f6d61707065725f696e73657274009106137365745f6d61707065725f636f6e7461696e73009206117365745f6d61707065725f72656d6f7665009306107365745f6d61707065725f66726f6e740094060f7365745f6d61707065725f6261636b0095060f7365745f6d61707065725f6e657874009606137365745f6d61707065725f70726576696f75730097061e7365745f6d61707065725f697465725f66726f6d5f616e645f636f756e740098061a6d61705f6d795f73696e676c655f76616c75655f6d6170706572009906226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f31009a06226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f32009b062c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f72657175697265009c06236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d707479009d0619636c6561725f73696e676c655f76616c75655f6d6170706572009e06246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d6170706572009f062769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200a006237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200a106207365745f73696e676c655f76616c75655f6d61707065725f776974685f6b657900a2060a7665635f6d617070657200a3060f7665635f6d61707065725f7075736800a4060e7665635f6d61707065725f67657400a506197665635f6d61707065725f6765745f61745f6164647265737300a6060e7665635f6d61707065725f6c656e00a706197665635f6d61707065725f6c656e5f61745f6164647265737300a80614746f6b656e5f617474726962757465735f73657400a90617746f6b656e5f617474726962757465735f75706461746500aa061f746f6b656e5f617474726962757465735f6765745f6174747269627574657300ab061a746f6b656e5f617474726962757465735f6765745f6e6f6e636500ac0616746f6b656e5f617474726962757465735f636c65617200ad061f746f6b656e5f617474726962757465735f6861735f6174747269627574657300ae06106164645f746f5f77686974656c69737400af061572656d6f76655f66726f6d5f77686974656c69737400b0060e636865636b5f636f6e7461696e7300b10619636865636b5f636f6e7461696e735f61745f6164647265737300b20610726571756972655f636f6e7461696e7300b3061b726571756972655f636f6e7461696e735f61745f6164647265737300b4061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00b5061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00b6062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500b706187365745f6c6f63616c5f726f6c65735f66756e6769626c6500b8060d6d696e745f66756e6769626c6500b906166d696e745f616e645f73656e645f66756e6769626c6500ba060d6275726e5f66756e6769626c6500bb06146765745f62616c616e63655f66756e6769626c6500bc061b726571756972655f73616d655f746f6b656e5f66756e6769626c6500bd061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500be061267657446756e6769626c65546f6b656e496400bf061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100c006176d61707065725f6e66745f7365745f746f6b656e5f696400c106116d61707065725f6e66745f63726561746500c2061a6d61707065725f6e66745f6372656174655f616e645f73656e6400c306176d61707065725f6e66745f6164645f7175616e7469747900c406206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400c5060f6d61707065725f6e66745f6275726e00c606166d61707065725f6e66745f6765745f62616c616e636500c7061b6d61707065725f6765745f746f6b656e5f6174747269627574657300c806156765744e6f6e46756e6769626c65546f6b656e496400c90615696e69745f756e697175655f69645f6d617070657200ca0614756e697175655f69645f6d61707065725f67657400cb061c756e697175655f69645f6d61707065725f737761705f72656d6f766500cc0614756e697175655f69645f6d61707065725f73657400cd0610756e697175655f69645f6d617070657200ce0614756e6f7264657265645f7365745f6d617070657200cf061b756e6f7264657265645f7365745f6d61707065725f696e7365727400d0061d756e6f7264657265645f7365745f6d61707065725f636f6e7461696e7300d1061b756e6f7264657265645f7365745f6d61707065725f72656d6f766500d206116d616e616765645f7374727563745f657100d3060c6f766572666c6f775f75313600d4060f6e6f5f6f766572666c6f775f69313600d5060c6f766572666c6f775f69313600d60615746f6b656e5f6964656e7469666965725f65676c6400d7061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100d8061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200d906136e6f6e5f7a65726f5f7573697a655f6974657200da06146e6f6e5f7a65726f5f7573697a655f6d6163726f00db061472657475726e735f65676c645f646563696d616c00dc06147365745f636f6e74726163745f6164647265737300dd061369735f656d7074795f61745f6164647265737300de0613636f6e7461696e735f61745f6164647265737300df060e6c656e5f61745f6164647265737300e0060f6e6578745f61745f6164647265737300e1061370726576696f75735f61745f6164647265737300e2061066726f6e745f61745f6164647265737300e3060f6261636b5f61745f6164647265737300e4060f6b6579735f61745f6164647265737300e5061176616c7565735f61745f6164647265737300e6061d636f6e7461696e735f756e6f7264657265645f61745f6164647265737300e7060c6765745f62795f696e64657800e8060f66696c6c5f7365745f6d617070657200e9060f66696c6c5f6d61705f6d617070657200ea061966696c6c5f756e6f7264657265645f7365745f6d617070657200eb06206765745f76616c75655f66726f6d5f616464726573735f776974685f6b65797300ec0628616464726573735f746f5f69645f6d61707065725f6765745f69645f66726f6d5f6164647265737300ed06186d616e616765645f646563696d616c5f6164646974696f6e00ee061b6d616e616765645f646563696d616c5f7375627472616374696f6e00ef06126d616e616765645f646563696d616c5f657100f006156d616e616765645f646563696d616c5f7472756e6300f1061e6d616e616765645f646563696d616c5f696e746f5f7261775f756e69747300f206126d616e616765645f646563696d616c5f6c6e00f306146d616e616765645f646563696d616c5f6c6f673200f4061c6d616e616765645f646563696d616c5f6164646974696f6e5f76617200f5061f6d616e616765645f646563696d616c5f7375627472616374696f6e5f76617200f606166d616e616765645f646563696d616c5f65715f76617200f706166d616e616765645f646563696d616c5f6c6e5f76617200f806186d616e616765645f646563696d616c5f6c6f67325f76617200f906066d6d5f67657400fa060b6d6d5f636f6e7461696e7300fb060d6d6d5f72656d6f76655f67657400fc06156d6d5f6d757461626c655f696e7075745f7465737400fd060863616c6c4261636b00fe06226563686f5f7661726167735f7665635f776974685f636f756e7465645f70616972730085050e6f766572666c6f775f7573697a6500d4060b6f766572666c6f775f753800d4060c6f766572666c6f775f75333200d4060c6f766572666c6f775f75363400d4060e6f766572666c6f775f6973697a6500d6060b6f766572666c6f775f693800d6060c6f766572666c6f775f69333200d6060c6f766572666c6f775f69363400d606136269675f75696e745f66726f6d5f7536345f3200ff03126269675f696e745f66726f6d5f6936345f320083041c69735f656d7074795f73696e676c655f76616c75655f6d6170706572009f06196563686f5f7661726167735f6d616e616765645f656167657200f0040f706f775f6269675f696e745f72656600fa0310706f775f6269675f75696e745f72656600fb03116c6f67325f6269675f75696e745f72656600f903166d756c5f61737369676e5f6269675f696e745f72656600a904176d756c5f61737369676e5f6269675f75696e745f72656600aa04166469765f61737369676e5f6269675f696e745f72656600ab04176469765f61737369676e5f6269675f75696e745f72656600ac041672656d5f61737369676e5f6269675f696e745f72656600ad041772656d5f61737369676e5f6269675f75696e745f72656600ae041b6269745f616e645f61737369676e5f6269675f75696e745f72656600b5041a6269745f6f725f61737369676e5f6269675f75696e745f72656600b6041b6269745f786f725f61737369676e5f6269675f75696e745f72656600b704177368725f61737369676e5f6269675f75696e745f72656600bc041773686c5f61737369676e5f6269675f75696e745f72656600bd0411737172745f6269675f75696e745f72656600f803206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f726566008104116e6f5f6f766572666c6f775f7573697a6500d5060e6e6f5f6f766572666c6f775f753800d5060f6e6f5f6f766572666c6f775f75333200d5060f6e6f5f6f766572666c6f775f75363400d5060f6e6f5f6f766572666c6f775f75313600d506116e6f5f6f766572666c6f775f6973697a6500d5060e6e6f5f6f766572666c6f775f693800d5060f6e6f5f6f766572666c6f775f69333200d5060f6e6f5f6f766572666c6f775f69363400d5060a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01050a8d9b0390060a0041808008410f10760b1101017f1078220220002001100e1a20020b1601017f1078220142001001200120012000100220010b2801027f41ec9908280200220141016b2200200148044041ec9908200036020020000f0b109b02000b0d0020004116418f80081084070b7a01027f230041106b22022400027f41002001109801220110a2020d001a02402001100a4107470d002002410036000b2002410036020820014100200241086a2203410710ab011a200341e9910841071080070d0041010c010b200110be021a41020b21032000200136020420002003360200200241106a24000b1c00200120034b044010f503000b20002001360204200020023602000b0e01017f107822012000100120010b0f01017f10042201200010051a20010b0e01017f107822012000107f20010b0b0020002001109e0210010b1100200041024f04402001107d1a0b20000b6c01047f230041106b2203240020012802042202047f200341086a20012802002204280200200441046a220528020020021082012001200328020c360204200428020020052802002002108301210241010541000b21012000200236020420002001360200200341106a24000b6f01027f230041106b22042400200441046a22052001200241f08808410b200310ec02220110f6022005200110f7022102200441046a200110f70221032004280208200428020c10cd01450440200141a58008410e109602000b2000200336020420002002360200200441106a24000b14002000200141fb88084106200210ec0210e3020b5d01037f230041106b2203240020012802042202047f200341086a2001280200220428020020021085012001200328020c36020420042802002002108601210241010541000b21012000200236020420002001360200200341106a24000b6d01027f230041106b22032400200341046a2204200141f08808410b200210ec0222011097012004200110f7022102200341046a200110f70221042003280208200328020c10cd01450440200141a58008410e109602000b2000200436020420002002360200200341106a24000b1200200041fb88084106200110ec0210c3020b10002000200141db8008411b108801000b160020002001107622002002200310131a20001000000b7901027f230041106b22022400200241086a2001108401024020002002280208410171047f200220012802082201280200200141086a280200200228020c2201108a012002280200410171450d0120022802042103200020013602042000200336020841010541000b360200200241106a24000f0b108b01000b2a002001200310d602047f2002200310d502210341010541000b210120002003360204200020013602000b0600109b02000b08004101410010760b0c0020012000108e0110061a0b0f01017f10782201200010321a20010b910102047f017e230041206b2202240020002001280200410146047f200141106a22032802002104200129020421062002410c6a2001280214280200200128020c220510900120032002411c6a280200360200200141086a200241146a2902003702002001200229020c370200200020043602102000200536020c2000200637020441010541000b360200200241206a24000b2401017f20002001200210ff02047f410005200041046a2001200210800341010b3602000b0c00200020011092011093010b0d0020001078220010121a20000b190020002001100a36020820004100360204200020013602000b0c00200010950120011096010b0f01017f10782201200010291a20010b5101027f230041106b2202240020022000100a220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410131a2001200010051a200241106a24000b0c00200020011098011093010b0d0020001078220010351a20000b0c002000108e0120011096010b0900200020011003000b1500200020012002410b41a28408419584081083070b190020012002107621012000108c01360204200020013602000b4301017f108c0121040240200328020010b5014504402003280200107d21040c010b200441a888084104100e1a0b2002200410b90120002002360204200020013602000b2301017f108c0122042003108c022002200410b90120002002360204200020013602000b170020022003108e0220002002360204200020013602000b1701017e101f4162102010fe012000200110a2011a10210b1500200020012002411241ba840841ad84081083070b1500200041622001200220031078220110071a20010b0c01017f10782200100820000b0c01017f10782200100920000b2e01027f107821032001100a2104200010a601200141d09a08100b1a41b09a0841d09a08200420022003100c20030b0b00200041b09a08100b1a0b0c01017f10782200100d20000b7501037f230041306b22012400024010a9012203100a4170714110460440200141206a220210aa01200341002002411010ab010d01200141106a200210ac01200041086a200141186a29030037030020002001290310370300200141306a24000f0b41ea810841221003000b41ba8708411d1003000b950101037f230041206b2200240010ad0121010240410410ae010d00415841e68208410b100e1a20002001100a360208200041003602042000200136020003402000410f6a200010af0120002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe03712002411876727210b001450d000b418c820841181003000b200041206a240020010b3e01027f230041106b21010340200120026a41003a0000200241016a22024110470d000b20002001290000370000200041086a200141086a2900003700000b0f00200020012003200210714100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100410210ae01450440415a10100b415a0b2b01027f200041f49a082d0000220171200041ff017146220245044041f49a0820002001723a00000b20020b7d01037f230041106b2202240002402001280204220320012802084904402003200341106a22044d0440200210aa01200128020020032002411010ab011a20012004360204200041013a000020002002290000370001200041096a200241086a2900003700000c020b109b02000b200041003a00000b200241106a24000b0b0020002001107241004a0b1100410110ae01450440415d100f0b415d0b800101037f230041306b22002400024002400240024010ad01220110b3010e020102000b41c98208411d1003000b10b10121010c010b200041206a220210aa012001200210b4010440200041106a200210ac01200028021c2101200028021810b5010d0141a4820841251003000b41ba8708411d1003000b200041306a240020010b09002000100a4104760b1000200041002001411010ab014101730b1400415841e68208410b100e1a4158200010b0010b0c00200010782200101120000b2e01017f41f182084117107622042000200110131a200441888308410310131a20042002200310131a20041000000b120020002001200210c4012001200210ca010b4a01017f230041106b2202240010d9011a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410131a200241106a24000b0f002000419b9008410b10bb01107d0b3f01017f230041106b22032400200341086a200010f20120032802084101710440200328020c107d200341106a24000f0b20012002418b8308411110b701000b2f01017f108c0121030340200028020041f09a082802004e450440200320002001200210bd0110b9010c010b0b20030b0e0020002001200210c4011092010b120020002001200210c4012001200210e4010b16002000418c8d08411410c401418c8d08411410ca010b4501027f230041106b22032400200341046a2204109c022003410036020c200120042003410c6a2201109d02200220042001109d0220002004410810131a200341106a24000ba80101037f230041106b22032400200341046a220410ac0220032001280208220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001280204220241187420024180fe03714108747220024108764180fe03712002411876727236020820032001280200220141187420014180fe03714108747220014108764180fe03712001411876727236020420002004410c10131a200341106a24000b1600200041ab9208410e10bb0141ab9208410e10c3010b20002000107d2200100a41204704402001200241f09108411010b701000b20000b3001017f2000280200220341f09a082802004e044020012002418b8308411110b701000b2000200341016a36020020030b2c01017e2000101522034280808080087d42ffffffff6f5804402001200241999208411210b701000b2003a70ba80101027f230041106b22022400027f200141a19108410610b801220341ebde0147410020031b45044041002103200141a19108410610c40141a19108410610c70121012002410c6a0c010b027f200128020041f09a082802004e0440108c010c010b200141a19108410610bd010b21012002200336020c41012103200241086a0b2001360200200020033602002000200228020c36020420002002280208360208200241106a24000b4001017f230041106b22032400200341086a200010de0110e20120032802084101710440200328020c200341106a24000f0b20012002419b8808410d10b701000b5d01027f027f410020012002200310b801220445200441ebde0146720d001a200128020041f09a082802004e0440108c01210541010c010b20012002200310bd01210541010b21012000200536020820002004360204200020013602000b0b0020002001200210ca010b2601017e20001014220342ffffffff0f5804402003a70f0b2001200241a58008410e10b701000b1000200041808d08410110cc011097020b1400200020002001200210d2012001200210dc010b0a002000200110d801450b0d00410041a38f08410110c5010b2601017e4100101522024280017d42ff7d5804402000200141999208411210b701000b2002a70b7501037f230041106b22042400200441046a2203200110910120032002410210d101210120032002410210d201210520032002410210cc0121032004280208200428020c10cd014504402002410241a58008410e10b701000b200020033602082000200536020420002001360200200441106a24000b0e0020002001200210cc011098020b5301017f230041106b220324002003410036020c20002003410c6a41042001200210db01200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b800101037f230041106b22012400200141046a22022000109101200241bd9108410a10d401200141046a41bd9108410a10d4012102200141046a41bd9108410a10d40121032001280208200128020c10cd0145044041bd9108410a41a58008410e10b701000b200141106a240041ff01712003411074200241ff017141087472720b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210db0120032d000f200341106a24000bda0102027f017e230041106b220324000240410010160440200341046a220441001091010240024002400240024020042001200210d40141ff017122040e0404010203000b2001200241b38008410d10b701000b200341046a2001200210d201ad2105410121040c020b200341046a2001200210d201ad200341046a2001200210d201ad422086842105410221040c010b200341046a2001200210d201ad2105410321040b2003280208200328020c10cd01450d010b2000200537020420002004360200200341106a24000f0b2001200241a58008410e10b701000b0b0041002000200110c7010b2301017e20001014220342ff015804402003a70f0b2001200241a58008410e10b701000b1400200020014d0440200120006b0f0b109b02000b2c01027f230041106b210103402001410c6a20006a41003a0000200041016a22004104470d000b200128020c0b8c0202037f017e230041206b220224002002410c6a22032001109101200341bd9108410a10d1012104200242003703182003200241186a410841bd9108410a10db0120022903182105200341bd9108410a10d2012101108c01210303402001044020032002410c6a41bd9108410a10d20110b901200141016b21010c010b0b2002280210200228021410cd0145044041bd9108410a41a58008410e10b701000b2000200336020c200020043602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200241206a24000b4301017f02402000280200200028020422052001200210ab01450440200220056a220120054f0d01109b02000b2003200441ee8608410f10b701000b200020013602040b6201027f230041106b22042400200441086a2000280200200028020422052001109a02024020042802084101710440200120056a220120054f0d01109b02000b2002200341ee8608410f10b701000b200428020c20002001360204200441106a24000b3301017e027f0240200010142202420158044041002002a741016b0d021a0c010b2001410141999208411210b701000b41010b0b0a00200010920110e1010b6901047f230041106b2202240020001092012103108c01210420022003100a220036020c200241003602082002200336020403402005200010d80104402004200241046a2001410310cc0110b901200228020c2100200228020821050c010b0b200241106a240020040b6301027f230041106b22042400200441046a2205200110910120052002200310d101210120052002200310d20121052004280208200428020c10cd014504402002200341a58008410e10b701000b2000200536020420002001360200200441106a24000b4b01017f230041106b2201240002402000100a4104470d002001410036020c200041002001410c6a410410ab011a200128020c41c58eb1a204470d0010bc0221000b200141106a240020000b1c01017f200110b501210220002001360204200020024101733602000b0b0020002001200210e4010b210020001092012200100a41204704402001200241f09108411010b701000b20000b0c00200010782200101720000b6901047f230041106b2203240020001092012104108c01210520032004100a220036020c200341003602082003200436020403402006200010d80104402005200341046a2001200210d10110b901200328020c2100200328020821060c010b0b200341106a240020050b1400200020014f04400f0b419c830841121003000b190041f09a0828020020004c04400f0b419c830841121003000b1400101820004604400f0b41ae830841191003000b1900200041f09a082802004c04400f0b418b830841111003000b0b0041f09a0810183602000b270020004101710440108c012200410110ed012000200110051a200010191a0f0b41014100101a0b2701017f230041106b22022400200220013a000f20002002410f6a410110131a200241106a24000b4a01017f108c012101200028020020011099012000280204200110990120002802082001109901200028020c2001109901200028021020011099012000280214200110ef01200110191a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410131a200241106a24000b18002000108c0122001099012001200010ef01200010191a0b5001017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10f20120012802084101710440200128020c10191a0c010b0b200141206a24000b6301027f230041106b220224002002410b6a200110c30320022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b0c00200010191a200110191a0b100020004101714504402001ad101b0b0b2c01017f108c0121012000280208200110f6012000290300200110f701200028020c2001109901200110191a0b1e00200010b501450440200020011096010f0b41a888084104200110c4030b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810131a200241106a24000b270020004101710440108c012200410110ed012001200010ef01200010191a0f0b41014100101a0b7a01017f0240024002400240200028020041016b0e03010203000b4200101b0f0b108c012201410110ed012000280204200110ef01200110191a0f0b108c012201410210ed012000280204200110ef012000280208200110ef01200110191a0f0b108c012201410310ed012000280204200110ef01200110191a0b0a002000101c2001101c0b5c01027f230041206b22012400108c01210220012000100a36021c20014100360218200120003602140340200141086a200141146a10f20120012802084101710440200128020c20021099010c010b0b200210191a200141206a24000b2000200020012002101d200010fd0141ff017104400f0b41e5830841301003000b140020001070220041004a20004100486b41016a0b0a0041764200100141760b0d0020002001200220031074000b2200200020012002108102200041de840841d9840820031b4104410520031b1081020b1701017f108c01220320012002100e1a2000200310b9010b4c01017f230041106b22032400200341086a200128020020012802042002108d0220012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b1601017f108c0122022001ad108c022000200210b9010b1200108c011a20002001280200107d10b9010b7a01037f230041106b22052400200541086a41cd85084116109c0120052802082107200528020c22062002108602200620031086022006200441ff0171410274220241ac99086a280200200241cc99086a28020010810220064100108302200020063602042000200736020020002001360208200541106a24000b0f00108c011a20002001107d10b9010b1a01027f10a401210041e88508410a10762201200010051a20010b1c01017f2002200028022046047f2000200120021080070541010b450b9d0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a2001100a2206200241106a4120107b200141002002280208200228020c10ab011a20002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b0c0041f28508411c108b02000b0e00108c011a20002001108701000b3101017f230041106b22022400200220014100200241086a10d403200020022802002002280204100e1a200241106a24000b2000108c011a20022003280200107d10b90120002002360204200020013602000b1300108c011a20002001280200108e0110b9010bfc0202077f017e230041306b220224002000290300210820002802102104200028020c2000280208108c012105108c012106108c012100280200107d210128020010772103200241086a220710aa012002200842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe0383200842388884848437020c2002200141187420014180fe03714108747220014108764180fe0371200141187672723602082002200341187420034180fe03714108747220034108764180fe03712003411876727236021420002007411010131a02402000100a0440200241206a220110aa010240200010b3014101470d002000200110b4011a200241106a200110ac01200228021c2101200228021810b501450d0020042802002001200520061090020c020b20042802002000420020052006101e1a0c010b109102210020042802002000200520061090020b200241306a24000b0f002000200142002002200310731a0b0e01017f107822004200100120000bae0101047f2000109302200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22022400200241ae860810940236020c230041106b22002400200141106a2201280200210320002002410c6a36020420002001290208370208200041046a220028020028020020032802002000280204200028020810ff01000b7d01037f230041206b22012400108702108c01210220002802002000280204200210c4032000280208220010a902200210ef0120012000100a36021c20014100360218200120003602140340200141086a200141146a10f20120012802084101710440200128020c20021096010c010b0b200210061a200141206a24000b08002000412010760b2f01017f2000100a220341084d044020004100200120036b41086a200310ab011a0f0b200241a58008410e109602000b2c01017f41e58c08411b10762203200010051a200341888308410310131a20032001200210131a20031000000b0d00200010782200102a1a20000b0d0020001078220010331a20000b6001027f230041106b22032400200341086a2000280200200028020422042001109a02024020032802084101710440200120046a220120044f0d01109b02000b200241ee8608410f109602000b200328020c20002001360204200341106a24000b1f0020012002200310042201102821022000200136020420002002453602000b060010f503000b3101027f230041106b21020340200241086a20016a41003a0000200141016a22014108470d000b200020022903083700000b4b01017f2001200228020022036a200041187420004180fe03714108747220004108764180fe0371200041187672723600002003200341046a22004d0440200220003602000f0b109b02000b15002000420053044041fd860841111003000b20000b0f00200020011078220010231a20000b5301057f200142001024220242001024220342001024220442001024220542001024220610251a200020011026360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f418e8708200141e001460d001a2001418904470440200141800347044041002001418002470d031a419287080c020b419687080c010b419a87080b41041027210241010b210120002002360204200020013602000b07002000100a450b0c00200020002001100220000b1001017f1078220220002001100220020b0a0020002000200110020b0a00200020002001101d0b1701017f200110a80221011078220220002001102b20020b0b0041752000ad100141750b09002000100a4102760b910101047f230041206b220324002001100a21042003410036021c200320043602182003410036021420032001360210024002400340200341086a200341106a10f2012003280208410171450d01200328021c220641016a2201450d02200328020c2003200136021c200210ab02450d000b410121050b2000200636020420002005360200200341206a24000f0b109b02000b0900200020011022450b4101027f230041106b21010340200141046a20026a41003a0000200241016a2202410c470d000b20002001290004370000200041086a2001410c6a2800003600000b5401017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b109a02200428020c21012000200428020836020020002001360204200441106a24000f0b109b02000b3a00200020012002411141f7870842acacc2ca0242ecd4c6be064285d2fac90842a8c5a0c10a42c085f7bc05429ed69dd501429d9883651081070b1a00200020011031220136020420002001417f73411f763602000b5b01027f0240419c7f20006b2201419c7f48200041004a460440200041c0004f0d01200041f099086a22022d00004504404175420a100141742000ad1001200141754174102b200241013a00000b20010f0b109b02000b10f503000b0c00200020002001102f20000b1001017f1078220220002001102e20020b0c00200020002001102d20000b3c02017f017e230041106b220224002002200110bd0220002002280200410146047e2000200229030837030842010542000b370300200241106a24000b3a00200020012002411341888808428094ebdc0342efee9dae09429fb382b00c42dba9e5940f42fb9b9df30742a7b9d0b30242ead28a591081070b5a01017f02400240024002400240200120024b200120024922036b41ff01710e020102000b200120024d0d030c020b200010770f0b20030d002000200120026b10b00210b7020f0b109b02000b2000200220016b10b00210b2020b1001017f1078220220002001102d20020b1b0020012002200310b602210120002003360204200020013602000b4b01027f2001280200220241046a220320024f044020012003360200200020026a280000220041187420004180fe03714108747220004108764180fe0371200041187672720f0b109b02000b09002000102c4100470b0b0020002000200110fc010b0a0041e68208410b10760b1f0020002001106e41004c047e42000520002001106f37030842010b3703000b1500200010b5010440419b8808410d1003000b20000b0a0020001098011097020b0a0020001098011098020b3401017e027f02402000200010c2022201420158044041002001a741016b0d021a0c010b2000419992084112109602000b41010b0b860102017e017f230041106b22032400200342003703082000109801200341086a200110950220032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b2601017e2000200010c20222014280808080105a0440200041a58008410e109602000b2001a70b2301017e2000200010c20222014280025a0440200041a58008410e109602000b2001a70b2101017f20001098012201100a4120470440200041f091084110109602000b20010b09002000200010c2020b0d002000416710351a4167100a0b0b0020004101410010c9020b0d00200020012002107610061a0b0a0020002001ad10cb020b0b002000200141001082070b0c002000200110950110061a0b320020014102470440200041e99108410710c9020f0b200210b5014504402000200210061a0f0b200041a88808410410c9020b1200416c41014100100e1a2000416c10061a0b0e002000200110782200103620000b0e0020002001416710364167100a0b0c002000200110d20210ce020b1a002000107d220041dc8808410710131a2001200010ef0120000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002108a01200429030821072006200210d2022003ad10cb0220052001280204200210d4021a20002007370300200441106a24000b2c01017f2000200210d60222034504402001200210de0221012000200210dd022001ad10cb020b20034101730b0c002000200110d20210c3020b0c002000200110e0024100470b3401017f230041106b2202240020022001280200200128020410d8022000200228020436020420002001360200200241106a24000bae0101047f230041106b220324002002107d220241818908410510131a024002402001200210d002450440410021010c010b200341046a22042001200210f6022004200210f7022106200341046a200210f7022101200341046a200210f7022104200341046a200210f70221052003280208200328020c10cd01450d010b2000200536020c200020043602082000200136020420002006360200200341106a24000f0b200241a58008410e109602000b3701017f230041106b22032400200341086a200020012002108a012003280208410171450440108b01000b200328020c200341106a24000b5701037f230041106b22022400200128020821032001280204210420012802004101470440200241086a20042003410010db0220022802082104200228020c21030b2000200436020020002003360204200241106a24000b3001017f230041106b22042400200441086a20012002200310d3022000200136020020002002360204200441106a24000b0c002000200110dd0210c8020b1a002000107d220041e38808410810131a2001200010ef0120000baf0101047f230041206b22022400200241106a200010ee020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204108501200020042002280208200310ef020b200020032004410010ef0220022003360218200041fb88084106200310ec02200110ca02200541016a22010d010b109b02000b200220013602102000200241106a10f002200241206a240020030b3801027f230041106b220324002000200210e00222040440200341086a2001200410e1022000200210dc020b200341106a240020044100470b0c002000200110dd0210c3020be50101037f230041306b2203240002402002047f200341186a20012002108501200328021c210420032802182105200341206a200110ee02024020050440200341106a20012005108501200120052003280210200410ef020c010b200320043602240b024020040440200341086a20012004108501200120042005200328020c10ef020c010b200320053602280b2001200210eb022001200210860121042001200210ed0220032802202202450d012003200241016b3602202001200341206a10f00241010541000b21012000200436020420002001360200200341306a24000f0b109b02000b1f002001107d220141e38808410810131a2002200110ef012000200110e3020b2801017e20002001200110c70322024280808080105a0440200141a58008410e109602000b2002a70b0e0020002001200210e2024100470b2a0002402002450d00200110c3022002490d002000200210e602200310ca020f0b41ea980841121003000b1a002000107d220041eb8808410510131a2001200010ef0120000b2901017f200110c30241016a220304402000200310e602200210ca022001200310ca020f0b109b02000b0c002000200110e60210c3020b250002402002450d00200110c3022002490d002000200210e8020f0b41ea980841121003000b4a01017f02402001450d0020002802002202200028020810e3022001490d002000280204107d220041eb8808410510131a2001200010ef012002200010e3020f0b41ea980841121003000b1200200041f08808410b200110ec0210c8020b18002000107d22002001200210131a2003200010ef0120000b1200200041fb88084106200110ec0210c8020b9c0101057f230041106b2202240002400240200110f102220110c7024504400c010b200241046a220320011097012003200110f7022106200241046a200110f7022103200241046a200110f7022104200241046a200110f70221052002280208200228020c10cd01450d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141a58008410e109602000b2500200041f08808410b200110ec022002108c01220010ef012003200010ef01200010061a0b4e01017f200010f10221022001280200220004402000108c01220010ef012001280204200010ef012001280208200010ef01200128020c200010ef012002200010061a0f0b20024101410010c9020b13002000107d220041818908410510131a20000b25002002047f20012002108601210241010541000b210120002002360204200020013602000b27002003047f200120022003108301210341010541000b210120002003360204200020013602000b2f01017f230041106b220224002002200128020010ee022000200228020436020420002001360200200241106a24000b3701017f230041206b22022400200241106a200110ee02200241086a2001200228021410f20220002002290308370300200241206a24000b0e0020002001200210cf021093010b5101017f230041106b220224002002410036020c20002002410c6a4104200110b003200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b19002000107d220041958908410410131a20002001ad10cb020b15002000200120022003410020022003471b10e5020b2f0002402002450d00200110c3022002490d002000200210e60210c3022200200220001b0f0b41ea980841121003000b190020022001107d22011096012000107d200110d0024100470b0f0020012000107d220010960120000b0f002000200110fc0210c7024100470bc90101047f230041206b22022400024020002001280204220510ff024504402002200010ee020240200128020c22030440200241106a2204200020031080032002200128020822013602182000200320041081030c010b2002200128020822013602040b024020010440200241106a2204200020011080032002200336021c2000200120041081030c010b200220033602080b200020051082034101410010c90220022802002201450d012002200141016b3602002000200210f0020b200241206a24000f0b109b02000b0d002000200110820310c702450b8d0101047f230041106b22032400200341046a22042001200210820322011097012004200110f7022102200341046a200110f7022104200341046a200110f7022105200341046a200110f70221062003280208200328020c10cd01450440200141a58008410e109602000b2000200636020c200020053602082000200436020420002002360200200341106a24000b3b0020002001108203108c0121002002280200200010ef012002280204200010ef012002280208200010ef01200228020c200010ef01200010061a0b1a002000107d220041998908410510131a2001200010ef0120000b2401017f20002001280204220310ff02450440200120023602002000200320011081030b0b810101027f230041306b22032400024020002001200210ff02047f4100052003411c6a20012002109001200328021c450d01200341106a2202200341286a290200370300200320032902203703082001200341086a10fe022000410c6a20022903003702002000200329030837020441010b360200200341306a24000f0b108b01000b2701017f230041106b220224002002200110ee02200020012002280204109001200241106a24000b4601017f230041106b2204240020042001200220031087032004280200450440108b01000b20002004290204370200200041086a2004410c6a280200360200200441106a24000b2401017f20002001200310d602047f200041046a2002200310880341010541000b3602000b1f002001107d2201419e8908410810131a2002200110ef01200020011089030b3501027f230041106b220224002001107d2103200241086a200110c1032000200229030837020020002003360208200241106a24000b3c01027f200128020821032001280204210220012802004504402002280200200241046a280200200310d4021a0b20002003360204200020023602000b090020004201108c030b0b002000200141011082070b0800200010c702450b160020002002108f0310ce022000200110900310ce020b1a002000107d220041d19808410410131a2000200110051a20000b1a002000107d220041cb9808410610131a2001200010f70120000b3f01017e200010920310c60242017c22025045044020002001108f03200210cb0220002002109003200110061a2000109203200210cb0220020f0b109b02000b13002000107d220041d59808410610131a20000b2f01017f20012002109003220310c702047f200310c502210341010541000b210120002003360204200020013602000b0c0020002001108f0310c6020b3801027f2000280208220220011096032203450440200028020020002802042200200110e70220022001200010c3021097030b20034101730b0c00200020011099034100470b0f00200020011098032002ad10cb020b1a002000107d220041c08908410610131a2001200010ef0120000b0c002000200110980310c3020b4f000240200028020020002802041080014102470440200110ba02450d01200028020841022001107d10cd0220002001360204200041023602000f0b41d6890841141003000b41c6890841101003000b0c01017f10782200102020000b4601017f230041106b22012400200141086a2000107a024002400240200128020841016b0e020102000b200141106a24000f0b41ea890841181003000b41d6890841141003000b4401027f10a3012104200210a3032102108c012203200410860220032001108602200020033602082000411c411020021b360204200041c78a0841b78a0820021b3602000b1c0020002802004102460440200041046a0f0b41c6890841101003000b4d01017f230041106b220424002004200336020820042001200210a003220136020c2004410c6a4200200441086a10a1012000200336020c2000420037030020002001360208200441106a24000b1800200041024604402001107d0f0b41c6890841101003000b2d01017f230041106b22012400200141086a2000107a20012802084101460440200010ce020b200141106a24000b840401067f230041d0006b2206240020062003360208200620023602042006200436020c2000109c03024020052802000440200641186a200541086a280200360200200620052902003703100c010b200641106a20002004109d030b2006428182848080a0c080013702202006410036021c20004101200610cd02230041406a220024002006411c6a22022d000b210320022d000a210420022d0009210520022d0008210720022d0007210820022d0006210920022d0005210a20022d0004210b20022802002102200041106a41e385084105109c012000200136023c20002000290310370234200041286a2201200041346a200641046a1082022000411c6a2001200641086a108202200041086a200028021c20002802202006410c6a109f012000200028020c22013602202000200028020836021c20012002108302200141e284084109200b108002200141eb84084107200a108002200141f2840841082009108002200141fa84084107200810800220014181850841072007108002200141888508410e2005108002200141968508410a2004108002200141a0850841122003108002200641c4006a22022001360204200220002802243602082002200028021c360200200041406b2400200641306a200641186a280200360200200620062902443703382006200628024c36023420062006290310370328200641286a109202000b0e00200010fd0141ff017141014b0b330020002001200210a503108c012100200328020820001099012003290300200010f701200328020c200010a603200010061a0b21002000107d220041ff8b08410510131a2001200010ad032002200010f70120000b5c01017f230041206b22022400200010a902200110ef0120022000100a36021c20024100360218200220003602140340200241086a200241146a10f20120022802084101710440200228020c200110ef010c010b0b200241206a24000b100020002001200210a803200310cb020b900101017f230041206b220324002000107d220041948c08410610131a2001200010ad032002280208108e0120001096012002290300200010f701200228020c220110a902200010ef0120032001100a36021c20034100360218200320013602140340200341086a200341146a10f20120032802084101710440200328020c200010ef010c010b0b200341206a240020000b0e0020002001200210a80310ce020b0c002000200110ab0310c4020b38002000107d2200418c8c08410810131a200110b5014504402001200010960120000f0b4104200010ef01200041a88808410410131a20000b0f002000200110ab0310c7024100470b2701017f230041106b22022400200220003a000f20012002410f6a410110131a200241106a24000b13002000107d220041848c08410810131a20000b8c0201037f230041206b220424002004410c6a220520012002200310a503220110970120052005200110f70220011099021098022106200442003703182005200441186a4108200110b003200429031821032004410c6a200110f7022102108c01210503402002044020052004410c6a200110f70210b901200241016b21020c010b0b2004280210200428021410cd01450440200141a58008410e109602000b2000200536020c200020063602082000200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe03832003423888848484370300200441206a24000b4101017f02402000280200200028020422042001200210ab01450440200220046a220120044f0d01109b02000b200341ee8608410f109602000b200020013602040b0e0020002001200210b2034101730b0f0020002001200210a50310c702450b800402047f017e230041e0006b220524002005200336024020052001200210a00322073602442005108c01360248200510910236024c2005108c012206360250200541386a41cc8408410d109c01200541306a2005280238200528023c200541c4006a109d01200541286a20052802302005280234200541406b109f01200541206a2005280228200528022c200541c8006a108d02200541186a20052802202005280224200541cc006a109f01200541106a2005280218200528021c200541d0006a108d022005280210210820052802142101108c01107d210220042d0000200210ad0320042d0001200210ad0320042d0002200210ad032001200210b90102402006100a044020052006100a36025c20054100360258200520063602540340200541086a200541d4006a10f2012005280208410171450d022001200528020c1086020c000b000b108c01220241014100100e1a2001200210b9010b101f4162102010fe012008200110a20121021021108c01210120052002100a36025c200541003602582005200236025403402005200541d4006a10f2012005280200410171044020012005280204107d10b9010c010b0b20052001100a36025c2005410036025820052001360254200541d4006a41ce8608410b10b40341ce8608410b10b50321092000200336020c2000200937030020002007360208200541e0006a24000b6001017f230041106b220324002003410b6a200010c30320032d000b4101460440200328000c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b20012002418b8308411110b701000ba30102017e027f230041106b22042400200442003703082000100a220541094f04402001200241a58008410e10b701000b20004100200420056b41106a200510ab011a20042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b4101017f230041206b220224002002200036021820022001410c6a3602142002200141086a36021020022001290300370308200241086a108f02200241206a24000b4d01017f230041106b220524002005200436020820052001200210a003220136020c2005410c6a2003200541086a10a1012000200436020c2000200337030020002001360208200541106a24000b13002000107d2200419a8c08410c10131a20000b13002000107d220041a68c08411010131a20000b1401017f108c01220220002001107610b90120020bbd0101037f230041406a22012400200141186a200041046a220210f402200120012903183702300340200141106a200141306a108401200128021041017104402000280200200128021410dc020c010b0b200141206a200228020010ee0220012802242100034020000440200141086a20022802002000108501200128020c2002280200200010eb022002280200200010ed0221000c010b0b200141386a4200370300200142003703302002280200200141306a10f002200141406b24000b6c01037f230041106b22012400200010bd032102200141086a2000280200200028020422032002109a02024020012802084101710440200220036a22022003490d01200128020c20002002360204200141106a24000f0b419f8108411941ee8608410f108801000b109b02000b5501017f230041106b220124002001410036020c20002001410c6a4104419f8108411910ce03200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b5d01057f1037210241c89308410e107610c302210303402000200346450440200041ba930841061076220110ef0120011098012101200041c0930841081076220410ef0120022001200410980110381a200041016a21000c010b0b20020b0c00418d9008410e109a01000b5a01017f230041206b22012400200141106a200041046a10f402200120012903103702180340200141086a200141186a108401200128020841017104402000280208200128020c10d1020c010b0b200010bb03200141206a24000b1801017f2001107d210220002001360204200020023602000b2101017f2001107d220241958908410410131a20002002360204200020013602000b7301037f230041106b2202240002402001280204220320012802084904402003200341046a22044d0440200210d90136020c200128020020032002410c6a410410ab011a20012004360204200041013a00002000200228020c3600010c020b109b02000b200041003a00000b200241106a24000b12002001200210ef0120022000200110131a0b7201047f230041106b2202240002402001280204220320012802084904402003200341086a22044d0440200241086a2205109c02200128020020032005410810ab011a20012004360204200041013a0000200020022903083700010c020b109b02000b200041003a00000b200241106a24000b820101047f230041106b22022400024020012802042203200128020849044020032003410c6a22044d0440200241046a220510ac02200128020020032005410c10ab011a20012004360204200041013a000020002002290004370001200041096a2002410c6a2800003600000c020b109b02000b200041003a00000b200241106a24000b880102017e017f230041106b22042400200442003703082000200110cf02200441086a200210950220042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b0c002000200110cf021098020b0b0020002001200110c7030b3501027f230041106b220224002001107d2103200241086a200110c2032000200229030837020020002003360208200241106a24000b1900200010b501450440200010191a0f0b41a888084104101a0b3d01027f230041106b220224002002410036020c20012002410c6a10b9022103200020012002410c6a10b90236020420002003360200200241106a24000b4f01017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10f20120012802084101710440200135020c101b0c010b0b200141206a24000b4301017f02402000280200200028020422052001200210ab01450440200220056a220120054f0d01109b02000b2003200441ee8608410f108801000b200020013602040b3201017f230041106b22012400200141003a000f20002001410f6a410141d78708412010ce0320012d000f200141106a24000b4301017f230041106b220224002002200136020c2002200036020803402002200241086a108401200228020041017104402002350204101b0c010b0b200241106a24000b4901027f20002802082102200028020421012000280200210002400340200120024d04402001417f460d022000280200200110e802ad101b200141016a21010c010b0b0f0b109b02000b0f00200041809208410810b403107d0b3701017e200041809208410810b40341809208410810b50322014280808080105a044041809208410841a58008410e10b701000b2001a70baa0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200220014200532207716b41ff017122042008a746220520042001423088a741ff01714671220620056a2006410020042009a741ff0171461b22056a2005410020042001422088a741ff0171461b22056a2005410020042001a72205411876461b22066a200641002004200541107641ff0171461b22066a200641002004200541087641ff0171461b22046a200441002001501b6a220420022007200320044107716a2c000041004873200441004771716b22026b3602042000200220036a3602000b2e01017f230041106b22022400200241003a000f20002002410f6a4101200110b00320022d000f200241106a24000bf60201047f230041d0006b220224002002200010890202402002280220450440410021000c010b0240200241b78a084110108802450440200241c78a08411c1088020d01410121000c020b10eb0141002100410010ea012002410036023c200241406b2002413c6a10c601200228023c10e80120022802442103200228024020022001100a36022c200241003602282002200136022410eb01200241246a220110c2012105200110ba0121012002280228200228022c10e7014101710440200510d703200110ce020c020b20014102200310cd020c010b10eb0141002100410010ea012002410036023c200241406b2002413c6a41a19108410610c801200228023c10e801200228024020022001100a360238200241003602342002200136023010eb01200241306a220110c2012104200110ba0121012002280234200228023810e7014101710440200410d703200110ce020c010b200241406b10a801200141022002280248107d10cd020b200241d0006a240020000b2b01017f10b101220110fd0141ff017141024f0440416741014100100e1a20002001108c0141671090020b0b2801017f2001107d210320002002107d36020c2000200336020820002002360204200020013602000b2801017f2002107d220341958908410410131a2000200336020820002002360204200020013602000b1000200010a60141b09a08103941004a0b0c002000200110b0014101730b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b1c01027f41b99208410710ba03108c0122022000ad108c022002103a0b0f002000419c9308410a10761089030b3c01027f230041106b22012400200141086a41a69308410a107610c103200128020c21022000200128020836020020002002360204200141106a24000b3c01027f230041106b22012400200141086a41b09308410a107610c203200128020c21022000200128020836020020002002360204200141106a24000b11002000200141b09308410a107610d9030b1601017f108c0122022000ad108c022001200210b9010b0a00419d9408410c10760b0a0041d09408411610760b0a0041829508410b10760b3d01037f230041106b22012400418d9508411210762202107d2103200141086a200210c1032000200129030837020020002003360208200141106a24000b0a00419f9508410b10760b3601037f41aa9508411010762201107d21022001107d220341958908410410131a2000200336020420002001360200200020023602080b0a0041ba9508411010760b3101037f419c9308410a107621022001107d21032002107d210420002001200210d80320002004360214200020033602100b11002000200141a69308410a107610d8030b3401037f41ca95084114107621022001107d21032002107d2104200041086a2001200210d90320002004360204200020033602000b0f00200041ca95084114107610ca030b0a0041de9508410f10760b1600200041de9508410f1076360204200020013602000b0d002000411341ed95081084070b0a0041889608410f10760b1600200041889608410f1076360204200020013602000b0900103b410010e9010b0d00103b410010e90110f503000b0b00419c9908410e1003000b1000103b410110e901410010147b101b0b4402027f017e103b410310e901410010b6012100410110142102410241e58d08410410c901210141752002107f200020004175100220002000200110a80210022000101c0b1e01027f103b410110e901410010b601210010782201200010342001101c0b3a01017f230041106b22002400103b410110e901200041086a410010b60110af02200035020c420020002802084101711b101b200041106a24000b1e00103b410210e901410010e501410141b58d08410110c90110a702103c0b1e00103b410210e901410010b601410141b58d08410110c90110a702101c0b3701017f230041106b22002400103b410110e9012000410010b60110b402200028020041014604402000290308101b0b200041106a24000b1c01017f103b410210e901410010b601220041011014107f2000101c0b0e00103b410010e901109102101c0b1100103b410110e90141001014107e101c0b3f01027f230041106b22002400103b410010e9012000427f3703082000427f370300416720004110100e1a41671078220110331a2001101c200041106a24000b1300103b410110e9014100109201109802101c0b1701017f103b410010e90110782200420010012000103c0b1100103b410110e90141001015107c103c0b5102017f017e103b410210e901027f410010b601210041011014109e022201500440200010fd0141ff017141016b0c010b417520011001200041751022220041004a20004100486b0b41ff017145ad103d0b3701017f230041106b22002400103b410110e9012000410010e50110bd02200028020041014604402000290308103d0b200041106a24000b1c01017f103b410210e901410010e50122004101101510012000103c0b2b01037f103b410110e901410010e501220010fd01107822022000103e41ff0171ad42017d103d2002101c0b3c01027f103b410210e90141d18d08410410cf01c0220041004a20004100486b41016a410110b601210041ff017145044020002000103f0b2000103c0b1800103b410210e901410010e501410110e50110a302103c0b1800103b410210e901410010e501410110b60110a302103c0b1800103b410210e901410010b601410110e50110a302103c0b1800103b410210e901410010e501410110b60110a402103c0b1800103b410210e901410010b601410110e50110a402103c0b1800103b410210e901410010e501410110e50110a402103c0b1f01017f103b410210e901410010b60122002000410110b60110022000101c0b2701037f103b410210e901410010b6012100410110b6012101107822022000200110022002101c0b1f01017f103b410210e901410010e50122002000410110e501101d2000103c0b2701037f103b410210e901410010e5012100410110e50121011078220220002001101d2002103c0b2001017f103b410210e901410010b60122002000410110b60110fc012000101c0b2801037f103b410210e901410010b6012100410110b6012101107822022000200110fc012002101c0b1f01017f103b410210e901410010e50122002000410110e501102e2000103c0b2701037f103b410210e901410010e5012100410110e50121011078220220002001102e2002103c0b1f01017f103b410210e901410010b60122002000410110b601102e2000101c0b1800103b410210e901410010b601410110b60110b202101c0b1f01017f103b410210e901410010e50122002000410110e501102d2000103c0b2701037f103b410210e901410010e5012100410110e50121011078220220002001102d2002103c0b1800103b410210e901410010b601410110b60110b302101c0b1800103b410210e901410010b601410110b60110b702101c0b1f01017f103b410210e901410010e50122002000410110e50110402000103c0b2701037f103b410210e901410010e5012100410110e5012101107822022000200110402002103c0b1f01017f103b410210e901410010b60122002000410110b60110402000101c0b2701037f103b410210e901410010b6012100410110b6012101107822022000200110402002101c0b2501027f103b410210e901410010e501410110e5012101107722002000200110022000103c0b2401027f103b410210e901410010e501410110e501210110772200200110a5022000103c0b2401027f103b410210e901410010b601410110b601210110772200200110a5022000101c0b2501027f103b410210e901410010b601410110b6012101107722002000200110022000101c0b2501027f103b410210e901410010e501410110e50121011077220020002001101d2000103c0b2401027f103b410210e901410010e501410110e501210110772200200110a6022000103c0b2401027f103b410210e901410010b601410110b601210110772200200110bb022000101c0b2601027f103b410210e901410010b601410110b6012101107722002000200110fc012000101c0b2501027f103b410210e901410010e501410110e50121011077220020002001102e2000103c0b2501027f103b410210e901410010b601410110b60121011077220020002001102e2000101c0b2501027f103b410210e901410010e501410110e50121011077220020002001102d2000103c0b2501027f103b410210e901410010b601410110b60121011077220020002001102d2000101c0b2501027f103b410210e901410010e501410110e5012101107722002000200110402000103c0b2501027f103b410210e901410010b601410110b6012101107722002000200110402000101c0b1f01017f103b410210e901410010b60122002000410110b60110412000101c0b2701037f103b410210e901410010b6012100410110b6012101107822022000200110412002101c0b1f01017f103b410210e901410010b60122002000410110b60110422000101c0b2701037f103b410210e901410010b6012100410110b6012101107822022000200110422002101c0b1f01017f103b410210e901410010b60122002000410110b60110432000101c0b2701037f103b410210e901410010b6012100410110b6012101107822022000200110432002101c0b2501027f103b410210e901410010b601410110b6012101107722002000200110412000101c0b2501027f103b410210e901410010b601410110b6012101107722002000200110422000101c0b2501027f103b410210e901410010b601410110b6012101107722002000200110432000101c0b2501017f103b410210e901410010b60122002000410141b58d08410110c90110302000101c0b2d01037f103b410210e901410010b6012100410141b58d08410110c9012101107822022000200110302002101c0b1e00103b410210e901410010b601410141b58d08410110c90110b102101c0b2d01037f103b410210e901410010b6012100410141b58d08410110c90121011078220220002001102f2002101c0b2b01027f103b410210e901410010b601410141b58d08410110c9012101107722002000200110302000101c0b2b01027f103b410210e901410010b601410141b58d08410110c90121011077220020002001102f2000101c0b0d00103b410010e9011044101b0b0d00103b410010e9011045101b0b0d00103b410010e9011046101b0b0d00103b410010e9011047101b0b1601017f103b410010e901107822001048200010191a0b0d00103b410010e9011049101b0b0d00103b410010e901104a101b0b0d00103b410010e901104b101b0b0d00103b410010e901104c101b0b1601017f103b410010e90110782200104d200010191a0b0f00103b410010e90110a30110191a0b0f00103b410010e90110a70110191a0b2000103b410110e901410041ef8e08410710e30110a60141b09a08104ead101b0b1a00103b410110e901410041ef8e08410710e30110da03ad103d0b1601017f103b410010e90110782200104f200010191a0b0f00103b410010e90110a40110191a0b0d00103b410010e901101f101b0b2a01017f103b410010e901416741909908410c100e1a4167416610351a41661078220010331a2000101c0b8d0101037f230041106b22002400103b410110e901410041ef8e08410710e30141671050200041003b010c4167100a220141034f0440419e8708411c1003000b200020012000410c6a4102107b416741002000280200200028020410ab011a20002f010c2102108c0121012000200241850c713b010e20012000410e6a410210131a200110191a200041106a24000b1300103b410110e90141001092011051ad103d0b1900103b410010e90141c78308411e41db8008411b108801000b2200103b410010e90141e49208411110761a41ac8808411a41f68008411e108801000b1b00103b410010e90141f592084113107641c08008411b109602000b2200103b410010e90141889308411410761a41c68808411641db8008411b108801000b1d00103b410010e90141d59208410f10ba031a41cd8c084118108b02000b2100103b410010e90141c79208410e10ba031a108c011a41b68c084117108701000b1100103b410010e901108c011a108a02000b2601017f230041106b22002400103b410010e901200041086a41a08d084105109c01108a02000b1c01017f103b410110e90141001092011078220010521a200010191a0b1c01017f103b410110e90141001092011078220010531a200010191a0b1c01017f103b410110e90141001092011078220010541a200010191a0b1b00103b410310e90141001092014101109201410210920110551a0b1b00103b410310e90141001092014101109201410210920110561a0b1e00103b410310e901410010920141011092014102109201105745ad103d0b5601017f103b410410e901410010920141011092014102109201024041031016450d00410341d98d08410910d701220041ff01714105490d0041d98d08410941b38008410d10b701000b200041ff0171105845ad103d0b2101017f103b410210e901410010920141011092011078220010591a200010191a0b1b00103b410310e901410010920141011092014102109201105a1a0b1b00103b410310e901410010920141011092014102109201105b1a0b1f00103b410310e901410041d58d0810df0141011092014102109201105c1a0b0f00103b410110e90141001014101b0b0f00103b410110e90141001015103d0b0f00103b410110e90110ce01ac103d0b1700103b410110e901410041a38f08410110c901ad101b0b3701017e103b410110e9014100101522004280808080087d42ffffffff6f58044041a38f08410141999208411210b701000b2000c4103d0b1600103b410110e90141a38f08410110cf01adc2103d0b1b00103b410110e901410041a38f08410110d701ad42ff0183101b0b1500103b410110e901410041a38f0810dd01ad103d0bdb0101037f103b410110e901027f230041106b22002400200041046a2202410010910141022101024002402000280208200028020c10cd010d0002400240200241a38f08410110d40141ff01710e020100030b410021010240200041046a41a38f08410110d40141ff01710e020100030b410121010b2000280208200028020c10cd010d0041a38f08410141a58008410e10b701000b200041106a240020010c010b41a38f08410141b38008410d10b701000b41ff017122014102470440108c012200410110ed012000200110ed01200010191a0f0b41014100101a0b1100103b10eb01410010ea01410010e8010bbe0102047f017e230041106b22032400103b410110e9012003410b6a2102230041206b22002400200041086a410010910141042101034020014109470440200041146a20016a200041086a41d88d08410110d4013a0000200141016a21010c010b0b20002902182104200028020c200028021010cd0145044041d88d08410141a58008410e10b701000b20022004a722013b0000200220044218883d0003200241026a20014110763a0000200041206a240020024105101a200341106a24000b6b01037f230041106b22002400103b10eb01410010ea012000410036020c2000410c6a2102108c0121010340200228020041f09a082802004804402001200241858d08410110b80110b9010c010b0b200028020c10e801200110a902ad101b200110cd03200041106a24000bcf0202057f017e230041306b22002400103b10eb01410010ea0120004100360220200041206a41858d08410110bc012102200028022010e801108c01210320002002100a220436021c200041003602182000200236021402400240034020012004490440200041146a220141809208410810b4034175102a1a200041206a2204417510bd022000280220450d02200029032822054280808080087d42ffffffff6f580d03200110d2032102108c012101200020054101200410d403200120002802002000280204100e1a2003200110b90120032002108602200028021c2104200028021821010c010b0b20002003100a36022820004100360224200020033602200340200041086a200041206a10f20120002802084101710440200028020c10191a0c010b0b200041306a24000f0b41809208410841d98608411510b701000b41809208410841999208411210b701000b3001027f230041106b22002400103b410110e901200041046a220141de9108410210d501200110f901200041106a24000b4801017f103b410110e901024041001016450d00410041de9108410210d701220041ff01714103490d0041de9108410241b38008410d10b701000b200041ff0171ad42ff0183101b0b0d00103b410010e9014201101b0b3101017f103b410110e901410041e09108410210ca01220045044041e09108410241b38008410d10b701000b2000ad101b0b9f0101057f230041106b22002400103b10eb01410110ea0110ce012000410136020c02402000410c6a2204220128020041f09a082802004e0440410121020c010b200141e29108410310c40141e29108410310c50121010b20002001360204200020023602002000280204210120002802002102200441f09a08280200360200200028020c10e801ac103d20024101714504402001ac103d0b200041106a24000bb80201077f230041106b22022400103b410110e901230041206b22002400200041106a4100109101200041046a210402400340200028021422032000280218220610cd010d012000410036021c200041106a2000411c6a410441dc9108410210db01200141034704402004200028021c220341187420034180fe03714108747220034108764180fe037120034118767272360200200441046a2104200141016a21010c010b0b41dc9108410241889208411110b701000b200020013602002003200610cd0145044041dc9108410241a58008410e10b701000b20022000290200370200200241086a200041086a290200370200200041206a240020022802004102742101108c012100034020012005470440200220056a41046a280200200010ef01200541046a21050c010b0b200010191a200241106a24000b1000103b410110e901410010b601101c0b1000103b410110e901410010e501103c0b1100103b410110e901410010920110191a0b1700103b410110e901410041838d08410210e30110191a0bdb0101047f103b410110e901027f230041106b22002400200041046a22034100109101024002402000280208200028020c10cd01450440024002400240200341818d08410210d40141ff01710e020201000b41818d08410241b38008410d10b701000b41012102200041046a41818d08410210d10121010b2000280208200028020c10cd01450d0220020d010b41feffffff0721010b200041106a240020010c010b41818d08410241a58008410e10b701000b220141feffffff07470440108c012200410110ed0120012000109901200010191a0f0b41014100101a0b930201067f230041206b22022400103b410110e901230041106b2200240041001092012104108c01210320002004100a2205360208200041003602042000200436020003402001200510d8010440200010cb01210110d9011a2000200141187420014180fe03714108747220014108764180fe03712001411876727236020c20032000410c6a410410131a20002802082105200028020421010c010b0b200041106a2400108c01210120022003100a360214200241003602102002200336020c03402002411b6a2002410c6a10c30320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe03712000411876727220011094010c010b0b200110191a200241206a24000b9d0101057f230041106b22012400103b410110e901200141086a2102230041106b22002400200041046a22034100109101200310cb012104200341808d08410110cc0121032000280208200028020c10cd0145044041808d08410141a58008410e10b701000b2002200336020420022004360200200041106a2400200128020c2001280208108c0122001094012000109601200010191a200141106a24000be90101067f230041106b22022400103b410110e901200241086a2103230041106b22002400200041046a2205410010910102402000280208200028020c10cd010d00024002400240200541808d08410110d40141ff017122010e020201000b41808d08410141b38008410d10b701000b200041046a10cb012104410121010b2000280208200028020c10cd010d0041808d08410141a58008410e10b701000b2003200436020420032001360200200041106a2400024020022802084101710440200228020c108c012200410110ed012000109401200010191a0c010b41014100101a0b200241106a24000b7c01037f230041206b22002400103b410210e901410041d19808410410e301410141868d0810df01210210191a108c01210120002002100a36021c20004100360218200020023602140340200041086a200041146a10f20120002802084101710440200028020c20011096010c010b0b200110191a200041206a24000bd50301067f230041206b22022400103b410110e901230041106b2201240041001092012104108c01210520012004100a2200360208200141003602042001200436020003402003200010d80104402001418a8d08410210d2012100108c0121030340200004402001418a8d08410210d201210410d9011a2001200441187420044180fe03714108747220044108764180fe03712004411876727236020c20032001410c6a410410131a200041016b21000c010b0b10d9011a2001200341187420034180fe03714108747220034108764180fe03712003411876727236020c20052001410c6a410410131a20012802082100200128020421030c010b0b200141106a2400108c01210120022005100a3602082002410036020420022005360200034002402002410c6a200210c30320022d000c4101470d00200228000d220041187420004180fe03714108747220004108764180fe0371200041187672722200100a410276200110ef0120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10c30320022d001b4101470d02200228001c220041187420004180fe03714108747220004108764180fe037120004118767272200110ef010c000b000b0b200110191a200241206a24000bd10201067f230041206b22022400103b410110e901027f230041206b2200240041001092012103108c01210420002003100a22053602182000410036021420002003360210024003402001200510d8010440200041086a200041106a418a8d08410210cc0110e10110e2012000280208410171450d0210d9011a2000200028020c220141187420014180fe03714108747220014108764180fe03712001411876727236021c20042000411c6a410410131a20002802182105200028021421010c010b0b200041206a240020040c010b418a8d084102419b8808410d10b701000b2100108c01210120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10c30320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe037120004118767272200110f6010c010b0b200110191a200241206a24000b5001017f230041106b22002400103b10eb01410010ea0120004100360200200041046a200041898d08410110c801200028020010e80120002802044101710440200028020c1000000b200041106a24000bea0101057f230041206b22002400103b10eb01410010ea0120004100360214200041146a41858d08410110bc012103200028021410e801108c01210220002003100a220436021c200041003602182000200336021402400340200120044f0d01200041146a10d3032201200041146a10d30322036a220420014f04402001200210e2032003200210e2032004200210e203200028021c2104200028021821010c010b0b109b02000b20002002100a36021c20004100360218200020023602140340200041086a200041146a10f20120002802084101710440200028020c10191a0c010b0b200041206a24000b7901027f230041206b22002400103b10eb01410010ea0120004100360214200041146a41858d08410110bc012101200028021410e80120002001100a36021c20004100360218200020013602140340200041086a200041146a10f20120002802084101710440200028020c10191a0c010b0b200041206a24000be10402087f017e230041406a22002400103b10eb01410010ea0120004100360218200041186a418c8d08411410bc012102200028021810e801108c01210320002002100a2201360214200041003602102000200236020c4100210202400340200120024b04402000410c6a220141809208410810b40341809208410810c3012106200110d30321072000410c6a10d30322014100480d0220014101742101108c01210403402001044020042000410c6a10d20310b901200141016b21010c010b0b108c01210520002004100a2201360220410021022000410036021c200020043602180340200120024d4504402005200041186a10d303200041186a10d30310c00120002802202101200028021c21020c010b0b200020053602202000200736021c200020063602182003200041186a10c10120002802142101200028021021020c010b0b20002003100a360214200041003602102000200336020c03400240200041186a2000410c6a10c60320002d00184101470d0020002800212101200028001d21022000280019220341187420034180fe03714108747220034108764180fe03712003411876727210191a200241187420024180fe03714108747220024108764180fe037120024118767272ad101b200141187420014180fe03714108747220014108764180fe0371200141187672722201100a410376ad101b20002001100a3602202000410036021c200020013602180340200041376a200041186a10c50320002d00374101470d02200020002900383703282000200041286a10cc0320003502042000350200101b101b0c000b000b0b200041406b24000f0b109b02000bec0401087f230041d0006b22002400103b10eb01410010ea0120004100360228200041286a2101230041106b22032400108c0121020340200128020041f09a082802004804402001418c8d08411410be012106200110bf012107200110bf012105108c0121040340200504402004200110bf01200110bf0110c001200541016b21050c010b0b2003200436020c20032007360208200320063602042002200341046a10c1010c010b0b200341106a2400200028022810e801108c01210120002002100a360224200041003602202000200236021c03400240200041286a2000411c6a10c60320002d00284101470d0020002800312102200028002d210520002800292104108c0121032000200241187420024180fe03714108747220024108764180fe0371200241187672722202100a3602302000410036022c20002002360228200441187420044180fe03714108747220044108764180fe03712004411876727221020340200041c7006a200041286a10c50320002d00474101460440200020002900483703382000200041386a10cc032000280204210420032000280200108302200320041083020c010b0b200120021086022001200541187420054180fe03714108747220054108764180fe0371200541187672721083022001200310a90241017610830220002003100a3602302000410036022c200020033602280340200041086a200041286a10f2012000280208410171450d022001200028020c1086020c000b000b0b20002001100a3602302000410036022c200020013602280340200041106a200041286a10f20120002802104101710440200028021410191a0c010b0b200041d0006a24000b930101067f230041206b22002400103b410110e9012000410041c88f08410d10c90110a102024020002802004101710440200041086a200028020410a0020c010b109102210110910221021091022103109102210410910221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a10ee01200041206a24000b3101027f230041206b22002400103b410110e901200041086a22014100109201105d10a002200110ee01200041206a24000b4801027f230041106b22002400103b410110e901200041086a410041c88f08410d10c901220110a1022000280208410171047f200028020c10260520010bad101b200041106a24000b4802017f017e230041106b22002400103b410110e901200041086a410041c88f08410d10c90110a1022000280208410171047e200028020c105ead0542000b101b200041106a24000b8e0101087f230041106b22002400103b410510e901410041c88f08410d10c9012101410110b6012103410210b6012104410310b6012105410410b6012106200041086a200110a102024020002802084101710440200028020c210742001024220142001024220220072003200420052006105f0c010b109102210110910221020b2001200210fa01200041106a24000b7c01067f230041106b22002400103b410310e901410041c88f08410d10c9012101410110b6012103410210b6012104200041086a200110a102024020002802084101710440200028020c210542001024220142001024220220052003200410600c010b109102210110910221020b2001200210fa01200041106a24000b5f01047f230041106b22002400103b410310e901410041c88f08410d10c9012101410110b6012102410210b6012103200041086a200110a1022000280208410171047e200028020c20022003106141004aad0542000b103d200041106a24000b860101077f230041106b22002400103b410410e901410041c88f08410d10c9012101410110b6012103410210b601210441031092012105200041086a200110a102024020002802084101710440200028020c2106420010242201420010242202200620032004200510621a0c010b109102210110910221020b2001200210fa01200041106a24000b7401057f230041106b22002400103b410210e901410041c88f08410d10c901210141011092012103200041086a200110a102024020002802084101710440200028020c21044200102422014200102422022004200310631a0c010b109102210110910221020b2001200210fa01200041106a24000b6a01047f230041106b22002400103b410310e901410041c88f08410d10c9012101410110b6012102410210b6012103200041086a200110a10202402000280208410171044020022003200028020c1078220110641a0c010b108c0121010b200110191a200041106a24000b6a01047f230041106b22002400103b410310e901410041c88f08410d10c9012101410110b6012102410210b6012103200041086a200110a10202402000280208410171044020022003200028020c1078220110651a0c010b108c0121010b200110191a200041106a24000b7401057f230041106b22002400103b410210e901410041c88f08410d10c901210141011092012103200041086a200110a102024020002802084101710440200028020c21044200102422014200102422022004200310661a0c010b109102210110910221020b2001200210fa01200041106a24000b7401057f230041106b22002400103b410210e901410041c88f08410d10c901210141011092012103200041086a200110a102024020002802084101710440200028020c21044200102422014200102422022004200310671a0c010b109102210110910221020b2001200210fa01200041106a24000b7601047f230041106b22002400103b410110e901200041086a410041c88f08410d10c90110a102024020002802084101710440200028020c210142001024220242001024220320011078220110681a0c010b10910221021091022103108c0121010b2002101c2003101c200110191a200041106a24000b1700103b410110e901410041a58d08410410c90110dd030b3201027f103b410110e901410041ad8d08410810c901210103402000200146450440200010dd03200041016a21000c010b0b0bc40101047f230041206b22002400103b10eb01410210ea01410010b6012101410141a98d08410410e301210220004102360214200041146a41a58d08410410bc012103200028021410e8012000200136020c2000200236021041c09208410710ba0322012000410c6a108e022001200041106a108402108c01107d210220002003100a36021c200041003602182000200336021403402000200041146a10f20120002802004101710440200028020420021096010c010b0b20012002103a200041206a24000b1f00103b10a70110a30110b00145044041fb970841241003000b410010e9010b1e00103b41671008416710da030440419f9808412c1003000b410010e9010b2d00103b410210e901410041898d08410110c901410141b58d08410110c90147044041b68d08410e109a01000b0b1300103b410010e90141c48d08410d109a01000ba203010b7f230041206b22012400103b410110e901230041406a220024002000410010910141042102200041206a21030340200241244704402000411c6a20026a200041fd8f08410510d4013a0000200241016a21020c010b0b2000411a6a2202200341026a2d00003a0000200041166a2204200041296a2d00003a0000200041126a2205200041306a2d00003a0000200020002f00273b0114200020002f012e3b0110200020032f00003b0118200028023c21032000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c2000280204200028020810cd0145044041fd8f08410541a58008410e10b701000b200120002f01183b000020012007360003200120002f01143b00072001200836000a200120002f01103b000e20012009360011200120002f010c3b0015200141026a20022d00003a0000200141096a20042d00003a0000200141106a20052d00003a0000200141176a200a2d00003a00002001200336001c20012006360018200041406b2400200110940210191a200141206a24000b2801017f103b410110e90141001092012200100a412047044041f0910841101003000b200010191a0b0f00103b410010e901108c0110191a0b1f01017f103b410210e90141001092012200410110920110051a200010191a0b5101017f230041106b22002400103b410310e901200041086a4100109201410141e48f08411110c901410241db8f08410910c901109a0220002802084101710440200028020c10191a0b200041106a24000b2601027f103b410110e901410041f58f08410810c901210010782201200010691a200110191a0b1900103b410210e9014100109201410110920110b001ad103d0b1300103b410010e90141b8810810940210191a0b2500103b410210e901410041d88f08410310e301410141d58f08410310e30110b001ad103d0b0f00103b410010e901108c0110fb010b2501017f103b410210e9014100418a8d08410210e6012200410110b60110b901200010fb010bf90102067f017e230041106b22012400103b410210e901024002404100418d8f08410310e60122034101418a8f08410310e601220410b0010d002003100a22052004100a470d010340200220054f0d01200110d901220036020820032002200141086a410410ab011a2001200036020c200420022001410c6a410410ab011a2001280208220041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe03712000411876727210ab02450d022002200241046a22004d0440200021020c010b0b109b02000b420121060b2006103d200141106a24000bfb0101067f230041206b22012400103b410210e901230041106b2200240041001092012104108c01210320002004100a220536020c200041003602082000200436020403402002200510d80104402003200041046a4120418a8d08410210dc0110b901200028020c2105200028020821020c010b0b200041106a24002003410141bb8e08410410e30110b901108c01210220012003100a360214200141003602102001200336020c03402001411b6a2001410c6a10c30320012d001b41014604402002200128001c220041187420004180fe03714108747220004108764180fe03712000411876727210051a0c010b0b200210191a200141206a24000b9b0101047f230041106b22012400103b410310e9014100418a8d08410210e6012102410141ea8e08410510c9012103410210b60121000240200341808080800449044010d9011a2001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a106a0d01200210fb01200141106a24000f0b109b02000b41908f084113109a01000ba50101057f230041106b22002400103b410210e9014100418a8d08410210e6012101410141ea8e08410510c90122022001100a41027622044904400240027f2002450440108c010c010b200041086a20014100200210ad022000280208410171450d01200028020c0b210320002001200241016a200410ad022000280200410171450d002003200028020410051a200310fb01200041106a24000f0b0b41ba8708411d1003000b6201037f230041106b22002400103b410210e901200041086a4100418a8d08410210e601410110b60110aa02024020002802084101710440200028020c108c012201410110ed01200110ef01200110191a0c010b41014100101a0b200041106a24000b3e01017f230041106b22002400103b410210e901200041086a4100418a8d08410210e601410110b60110aa022000280208410047ad103d200041106a24000b970101037f230041106b22012400103b410210e9014100418a8d08410210e6012102410141ea8e08410510c9012100200110d90136020c02402000418080808004490440200220004102742001410c6a410410ab010d01200128020c220041187420004180fe03714108747220004108764180fe0371200041187672721077101c200141106a24000f0b109b02000b41ba8708411d1003000b1400103b410110e901410010920110980110191a0b1600103b410210e9014100109201410110920110061a0b2400103b410210e901410041ef8e08410710e3014101109201416710364167107d10191a0b1700103b410010e90141d69308410d107610980110191a0b1600103b410010e90141f493084108107610c002101c0b1600103b410010e90141ed93084107107610bf02103c0b1600103b410010e901418a94084103107610c602101b0b1700103b410010e90141e893084105107610c302ad101b0b5001027f230041106b22002400103b410010e901418794084103107622011098014175102a1a2000417510bd022000280200450440200141d986084115109602000b2000290308103d200041106a24000b1700103b410010e901418d94084104107610c102ad103d0b1700103b410010e90141d198084104107610c50210191a0ba50101057f230041106b22002400103b410010e901200041046a220341a48f08410810762201109701024002402000280208200028020c10cd010d00410121020240024002402003200110d50341ff01710e020201000b200141b38008410d109602000b41002102200041046a4120200110990221040b2000280208200028020c10cd01450d0120020d00200410191a0b200041106a24000f0b200141a58008410e109602000b1800103b410010e90141a48f084108107610c70245ad103d0b1700103b410010e90141fc9308410b107610c302ad101b0b1400103b410010e90141fc9308410b107610ce020be40102037f017e230041106b22002400103b410010e901024041e3930841051076220110c7020440200041046a22022001109701024002400240024002402002200110d50341ff017122020e0404010203000b200141b38008410d109602000b200041046a200110f702ad2103410121020c020b200041046a200110f702ad200041046a200110f702ad422086842103410221020c010b200041046a200110f702ad2103410321020b2000280208200028020c10cd01450d010b2000200337020820002002360204200041046a10f901200041106a24000f0b200141a58008410e109602000b2e01027f103b410110e901410041d19808410410e301210041919408410410762201200010051a200110c002101c0b4201037f103b410210e901410041fb8e08410510e3012101410141f68e08410510e301210241959408410410762200200110051a2000200210051a200010c002101c0b2b01017f103b410110e901410041808d08410110c9014199940841041076220010ef01200010c102ad103d0b2601017f103b410210e901410041ef8e08410710e3014101109201107822001036200010191a0b1f01017f103b410110e9014100109201210041d69308410d1076200010061a0b1900103b410110e901410010b60141f4930841081076108d010b1f01017f103b410110e901410010e501210041ed930841071076200010cc020b2601017f103b410110e901410041a38f08410110c901210041e89308410510762000ad10cb020b1e01017f103b410110e90110ce01210041cd9408410310762000ac108c030b1e01017e103b410110e901410010142100418a940841031076200010cb020b1e01017e103b410110e90141001015210041879408410310762000108c030b2401017f103b410110e901410041a38f0810dd012100418d9408410410762000ad108c030b2501017f103b410110e901410041e28d08410310e301210041d1980841041076200010061a0bad0101047f230041106b22002400103b10eb01410010ea012000410036020c02402000410c6a220228020041f09a082802004e0440410121010c010b200241a48f08410810be0121020b20002002360204200020013602002000280204210220002802002101200028020c10e80141a48f0841081076210302402001410171450440108c012201410110ed012001200210051a2003200110061a0c010b20034101410010c9020b200041106a24000bb80101037f230041106b22012400103b410110e901200141046a41e28d08410310d50141e3930841051076210202400240024002400240200128020441016b0e03010203000b2002420010cb020c030b108c012200410110ed012001280208200010ef012002200010061a0c020b108c012200410210ed012001280208200010ef01200128020c200010ef012002200010061a0c010b108c012200410310ed012001280208200010ef012002200010061a0b200141106a24000b3101037f103b410210e901410041d19808410410e3012100410110b60141919408410410762202200010051a2002108d010b4501047f103b410310e901410041fb8e08410510e3012101410141f68e08410510e3012102410210b60141959408410410762200200110051a2000200210051a2000108d010b3601027f103b410210e901410041808d08410110c901410141b58d0810dd0121014199940841041076220010ef0120002001ad108c030b1e01017e103b410110e90141001015210041a99408410910762000108c030b1900103b410110e901410010b60141c09408410d1076108d010b1f01017f103b410110e9014100109201210041b29408410e1076200010061a0b4001017f103b410110e90141cc9108411010d6012100416741d881084112100e1a4167200010051a418e8608109402416741661036416610a202410173ad103d0b1100103b410010e90110f10310c002101c0b1400103b410110e901410010b60110f103108d010b2d02017e027f103b410210e901410010142100410110b60110f103220210b903200010cb02200210b803108d010b4502017f027e103b410010e90110f103210010442201200010b90310c60222025a0440200010b803416710351a2000416710061a200010b80310ce020b200120025aad103d0b1400103b410010e90110f10310b90310c602101b0b1400103b410010e90110f10310b80310c002101c0b3d01017f230041106b22002400103b410110e901200041086a410041ef8e08410710e30110f2032000280208200028020c10c803101c200041106a24000b4c01037f230041106b22002400103b410110e901200041086a410041ef8e08410710e30110f2032000280208200028020c107d220241a68c08411010131a200210c903101b200041106a24000b4c01037f230041106b22002400103b410110e901200041086a410041ef8e08410710e30110f2032000280208200028020c107d2202419a8c08410c10131a200210c803101c200041106a24000b2201017f103b410110e901410041ef8e08410710e301210010e7032000109403101b0b3502017f017e103b410110e901410041ef8e08410710e301210010e7032000109403220150044041db9808410f1003000b2001101b0b3d02017f017e230041106b22002400103b410110e901410010142101200041086a10e70320011093032000280208200028020c10ec01200041106a24000b2201017e103b410110e90141001014210010e703200010900310c702410047ad103d0b3901027f103b410110e901410041ef8e08410710e301210010e703220120001094035045044041a68908411a1003000b20012000109103101b0b3902027f017e103b410110e901410041ef8e08410710e301210010e70322012000108f0310c602220250047e200120001091030520020b101b0b5502037f017e230041106b22002400103b410110e901410010142103200041086a10e703220120031093032000280208410171047f20012003200028020c2202108e0341010541000b200210ec01200041106a24000b3802027f017e103b410110e901410041ef8e08410710e301210010e70322012000109403220250450440200120022000108e030b2002101b0b5b01027f230041306b22002400103b410010e901200010e5032201360200200041046a20011085032000200036021803402000411c6a200041046a108f01200028021c4101474504402000350220101b0c010b0b200041306a24000bbf0101077f230041206b22002400103b410110e901410041bb8e08410410c9012104200010e503220210ee02200010e8052101024020002802002205450440200020013602040c010b200041106a2206200220002802082203108003200020013602182002200320061081030b2000200336021c20004100360218200020013602142000200436021020022001200041106a10810320002001360208200541016a2201450440109b02000b200020013602002002200010f002200041206a24000b1f01017f200028020c41016a220104402000200136020c20010f0b109b02000bbf0101077f230041206b22002400103b410110e901410041bb8e08410410c9012104200010e503220210ee02200010e8052101024020002802002205450440200020013602080c010b200041106a22062002200028020422031080032000200136021c2002200320061081030b2000410036021c20002003360218200020013602142000200436021020022001200041106a10810320002001360204200541016a2201450440109b02000b200020013602002002200010f002200041206a24000b4701027f230041306b22002400103b410010e901200041206a10e503220110ee022000410c6a20012000280224108403200028020c410173200028021010f401200041306a24000b4701027f230041306b22002400103b410010e901200041206a10e503220110ee022000410c6a20012000280228108403200028020c410173200028021010f401200041306a24000b3601017f230041206b22002400103b410010e9012000410c6a10e503108503200028020c410173200028021010f401200041206a24000b4701027f230041306b22002400103b410010e901200041206a10e503220110ee022000410c6a20012000280228109001200028020c410173200028021010f401200041306a24000bd80201077f230041d0006b22002400103b410210e901410041b79008410710c9012101410141be9008410710c90121052000410c6a10e50320011090010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110e50322022000280224220410ff020d001a200041306a2201200210ee02200110e8052101200028022821032000200136022820022004200041206a108103024020030440200041406b2206200220031080032000200136024c2002200320061081030c010b200020013602380b2000200436024c20002003360248200020013602442000200536024020022001200041406b108103200028023041016a2201450d01200020013602302002200041306a10f002200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b200110f401200041d0006a24000f0b109b02000bd80201077f230041d0006b22002400103b410210e901410041b79008410710c9012101410141be9008410710c90121052000410c6a10e50320011090010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110e50322022000280224220410ff020d001a200041306a2201200210ee02200110e8052101200028022c21032000200136022c20022004200041206a108103024020030440200041406b220620022003108003200020013602482002200320061081030c010b200020013602340b2000200336024c20002004360248200020013602442000200536024020022001200041406b108103200028023041016a2201450d01200020013602302002200041306a10f002200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b200110f401200041d0006a24000f0b109b02000b4801027f230041206b22002400103b410110e901410041b79008410710c90121012000410c6a10e5032001109001200028020c044010e503200041106a10fe020b200041206a24000b4501027f230041206b22002400103b410110e901410041b79008410710c90121012000410c6a10e5032001108403200028020c410173200028021010f401200041206a24000b7601037f230041306b22002400103b410210e901410041b79008410710c9012101410141ae9008410910c90121022000411c6a10e5032001109001200028021c450440108b01000b200041106a200041286a2902003703002000200029022037030810e503200041086a2002108303200041306a24000b7501047f230041306b22002400103b410210e901410041b79008410710c9012101410141ae9008410910c90121022000410c6a10e50322032001109001200028020c4101460440200041286a200041186a290200370300200020002902103703202003200041206a20021083030b200041306a24000b6a01037f230041206b22002400103b410110e901410041b79008410710c9012101108c0121022000410c6a10e50320011090010340200028020c0440200028021821012000280210200210e2032000410c6a10e50320011090010c010b0b200210f101200041206a24000b7401047f230041306b22002400103b410110e901410041b79008410710c9012102108c012101200010e50322033602182000200320021090012000200041186a36021403402000411c6a2000108f01200028021c4101474504402000280220200110e2030c010b0b200110f101200041306a24000b3a01017f230041106b22002400103b410010e901200010e30336020c20002000410c6a10f4022000280200200028020410d003200041106a24000b2101017f103b410110e901410041bb8e08410410c901210010e303200010de021a0b4401027f230041206b22002400103b410010e901200041106a10e303220110ee02200041086a2001200028021410e1022000280208200028020c10f801200041206a24000b4301017f230041106b22002400103b410010e901200041086a10e30310f502200028020841017145044041ac8f08410c109a01000b200035020c101b200041106a24000b6e02027f017e230041306b22002400103b410010e9012000410c6a220110de032000200041106a10f40220002000290300370218200020013602200340200041246a200041186a1089012000280224410147450440200035022c2000350228101b101b0c010b0b200041306a24000b6b01027f230041306b22002400103b410010e901108c0121012000411c6a10de03200041106a200041206a10f402200020002903103702280340200041086a200041286a108401200028020841017104402001200028020c10b9010c010b0b200110cd03200041306a24000ba60101037f230041306b22002400103b410010e901108c012102200041186a220110de03200041106a2000411c6a10f402200020002903103702242000200136022c024003400240200041086a200041246a1084012000280208410171450d002000200028022c2201280200200141086a280200200028020c108a012000280200410171450d022002200028020410b9010c010b0b200210cd03200041306a24000f0b108b01000b5a01047f230041206b22002400103b410210e901410041bb8e08410410c9012101410141bf8e08410510c9012102200041146a220310de03200041086a20032001200210d3022000280208200028020c10f801200041206a24000b3d01027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041046a10de032000280204200110d602ad103d200041106a24000b5101027f230041206b22002400103b410110e901410041bb8e08410410c9012101200041146a10de03200041086a2000280214200028021c2001108a012000280208200028020c10f801200041206a24000b6101047f230041106b22002400103b410110e901410041bb8e08410410c9012102200041046a10de0320002802042000280208200210df02047f200028020c2201200210d50221032001200210d10241010541000b200310f801200041106a24000ba90101057f230041306b22002400103b410210e901410041bb8e08410410c9012101410141cd8e08410910c901200041246a220310de032000280224200110d602210420002001360220200020043602182000200336021c200041106a200041186a10da0220002802102201280200200141086a2802002000280214220410d90222036a22022003490440109b02000b200041086a20012004200210d3022002ad101b200041306a24000b810101047f230041206b22002400103b410210e901410041bb8e08410410c9012101410141d68e08410710c9012102200041146a220310de032000280214200110d602047f200305200041086a200041146a2001200210db02200028020c210120002802080b2202280200200241086a280200200110d902ad101b200041206a24000bbf0101067f230041206b22002400103b410310e901410041bb8e08410410c9012101410141cd8e08410910c9012102410241c48e08410910c9012103200041146a220410de030240027f20002802142205200110d602044020022005200028021c200110d90222026a22032002490d02200020042001200310d30220040c010b200041086a200041146a2001200310db02200028020c210120002802080b2202280200200241086a280200200110d902ad101b200041206a24000f0b109b02000b950101047f230041206b22002400103b410210e901410041bb8e08410410c9012101410141dd8e08410d10c9012102200041146a220310de0302402000280214200110d602047f200305200120026a22022001490d01200041086a200041146a2001200210db02200028020c210120002802080b2202280200200241086a280200200110d902ad101b200041206a24000f0b109b02000ba60201077f230041e0006b22002400103b410010e901108c012102200041206a220110e603200041186a200041246a10f4022000200029031837022c200020013602342000413c6a2104200041d4006a2103024003400240200041106a2000412c6a1084012000280210410171450d00200041d0006a20002802342201280200200141086a280200200028021422011087032000280250450d02200041406b200341086a28020036020020002003290200370338200041086a200410f402200020002903083702442000200041386a36024c0340200041d0006a200041c4006a10890120002802504101470d02200028025820002802542001200210e203200210e203200210e2030c000b000b0b200210f101200041e0006a24000f0b41948108410b109a01000b4201027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041046a10e60320002802042000280208200110d402ad103d200041106a24000b3d01027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041046a10e6032000280204200110d602ad103d200041106a24000bd30101037f230041d0006b22002400103b410110e901410041bb8e08410410c90121012000410c6a10e603200041186a200028020c2000280214200110870320002802184101460440200041306a200041246a2802003602002000200029021c370328108c0121012000200041286a220241047210f40220002000290300370238200020023602400340200041c4006a200041386a1089012000280244410147450440200028024c2000280248200110e203200110e2030c010b0b200110f101200041d0006a24000f0b41ca9008410b109a01000b8f0101047f230041306b22002400103b410310e901410041bb8e08410410c9012101410141d58d08410310c9012102410241bf8e08410510c9012103200041146a10e603200041206a2000280214200028021c2001108703200028022045044041ca9008410b109a01000b200041086a200041246a2002200310d3022000280208200028020c10f801200041306a24000b850101037f230041306b22002400103b410210e901410041bb8e08410410c9012101410141d58d08410310c9012102200041146a10e603200041206a2000280214200028021c2001108703200028022045044041ca9008410b109a01000b200041086a2000280224200028022c2002108a012000280208200028020c10f801200041306a24000b5f01047f230041206b22002400103b410110e901410041bb8e08410410c9012101200041086a10e6032000280208200028020c200110df0222020440200041146a220320002802102001108803200310c0030b2002ad103d200041206a24000bc60101037f230041d0006b22002400103b410010e901200041186a220110e603200041106a2000411c6a10f402200020002903103702242000200136022c200041c4006a2101024003400240200041086a200041246a1084012000280208410171450d00200041406b200028022c2202280200200241086a280200200028020c1087032000280240450d02200041386a200141086a28020036020020002001290200370330200041306a10c0030c010b0b200041186a10bb03200041d0006a24000f0b108b01000bfc0101067f230041306b22002400103b410310e901410041bb8e08410410c9012101410141d58d08410310c9012103410241cd8e08410910c901200041246a220510e6032000280224200110d602210220002001360220200020023602182000200536021c200041106a200041186a2201108a03200120002802102202280200200241086a28020020002802141086032000280218200310d60221022000200336022c2000200236022420002001360228200041086a200510da0220002802082201280200200141086a280200200028020c220310d90222026a22042002490440109b02000b200020012003200410d3022004ad101b200041306a24000bf20101077f230041306b22002400103b410410e901410041bb8e08410410c9012102410141d58d08410310c9012103410241bf8e08410510c9012104410341c59008410510c9012105200041186a10e60320002802182206200210d6020440200041246a2201200620002802202002108603200041106a20012003200410d302410121010b2000200236022c200020013602242000200041186a360228200041086a200041246a2201108a03200120002802082202280200200241086a280200200028020c10860320002000280224200028022c2003108a012000280204200520002802004101711bad101b200041306a24000bb30101067f230041306b22002400103b410310e901410041bb8e08410410c9012101410141d58d08410310c9012103410241bf8e08410510c9012104200041186a220210e6032000280218200110d60221052000200136022c2000200536022420002002360228200041106a200041246a2202108a03200220002802102201280200200141086a2802002000280214108603200041086a20022003200410d3022000280208200028020c10f801200041306a24000b4701017f230041206b22002400103b410010e901200041106a10df0320002000290310370218200041086a2000411c6a10f4022000280208200028020c10d003200041206a24000b4201027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041086a10df032000280208200028020c200110d402ad103d200041106a24000b3d01027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041086a10df032000280208200110d602ad103d200041106a24000b4201027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041086a10df032000280208200028020c200110df02ad103d200041106a24000b3f01017f230041106b22002400103b410010e901200041086a10df032000200028020c10f5022000350204420020002802004101711b101b200041106a24000b5001027f230041206b22002400103b410010e901200041086a10df03200041106a200028020c220110ee0220002001200028021810f2022000350204420020002802004101711b101b200041206a24000b7601037f230041206b22002400103b410110e901410041bb8e08410410c9012101200041186a10df03200028021c21022000280218200110e0022201047e200041106a20022001108501200041086a2002200028021410f202200035020c420020002802084101711b0542000b101b200041206a24000b7601037f230041206b22002400103b410110e901410041bb8e08410410c9012101200041186a10df03200028021c21022000280218200110e0022201047e200041106a20022001108501200041086a2002200028021010f202200035020c420020002802084101711b0542000b101b200041206a24000b910101047f230041206b22002400103b410110e901410041bb8e08410410c9012102200041086a10df032000200028020c36021420002000280208220336021020002003200210e00236021c2000200041146a360218024003402000200041186a1084012000280200410171450d012001417f470440200141016a21010c010b0b109b02000b2001ad101b200041206a24000b1100103b410010e90110e40310bf02103c0b2401027f103b410110e901410010e501210010e4032201200110bf02200010a30210cc020b2801037f103b410110e901410010e501210010e403220110bf022202200010a5022001200210cc020b3e01037f103b410110e901410010e501210010e403220210bf02220120001022410048044041b88f084110109a01000b2001200010a6022002200110cc020b2401027f103b410110e901410010e501210010e4032201108d0304402001200010cc020b0b0f00103b410010e90110e40310ce020b1200103b410010e90110e403108d03ad103d0b2300103b410110e901410041ef8e08410710e30141d094084116107610d00245ad103d0b1200103b410010e90110e40310c702ad101b0b3101027f103b410210e901410041d58d08410310c9014101109201210141e69408411c1076220010ef012000200110061a0b5901027f230041206b22002400103b410010e901200010e0032000200028020422013602102000200028020036020c2000200110c30236021c2000410136021820002000410c6a360214200041146a10d103200041206a24000b3f01027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041086a10e0032000280208200028020c200110e702200041106a24000b4201027f230041106b22002400103b410110e901410041ea8e08410510c9012101200041086a10e0032000280208200028020c200110e902ad101b200041106a24000b4b01047f230041106b22002400103b410210e901410041ef8e08410710e3012101410141ea8e08410510c9012102200041046a2203200110e1032003200210ea02ad101b200041106a24000b2e01017f230041106b22002400103b410010e901200041086a10e003200028020c10c302ad101b200041106a24000b3e01017f230041106b22002400103b410110e901200041046a410041ef8e08410710e30110e1032000280204200028020c10e302ad101b200041106a24000bc20102047f027e230041106b22022400103b410310e90141a69008410810d60121004101101421042002410210da010240024010752201200010ac03450440200110ae0310c402220341ff017141ff01460d012001200010ab03200341016a2200ad42ff0183220510cb02200110ae03200510cb020c020b2001200010aa0321000c010b41e38a0841d7001003000b20012000200410b103450440200120002004200210a403200120002002200410a703200241106a24000f0b41ba8b0841171003000b990102047f017e230041206b22022400103b410310e90141a69008410810d60121004101101421042002410210da01024010752201200010ac03044020012001200010aa032200200410b103450d01200241106a220320012000200410af0320012000200310a903200120002004200210a403200120002002200410a703200241206a24000f0b41d18b0841101003000b41e18b08411e1003000b960102037f017e230041106b22012400103b410210e90141a69008410810d6012102410110142103024010752200200210ac03044020002000200210aa032202200310b103450d01200120002002200310af03108c012100200128020820001099012001290300200010f701200128020c200010a603200010191a200141106a24000f0b41d18b0841101003000b41e18b08411e1003000ba00102047f017e230041406a22002400103b410210e90141a69008410810d6012101200041306a410110da01200041106a200041386a29030037030020002000290330220437022020002004370308024010752202200110ac03044020022002200110aa032201200041086a220310a80310c702450d0120022001200310a80310c602101b200041406b24000f0b41d18b0841101003000b41e18b08411e1003000b7002037f017e230041106b22022400103b410210e90141a69008410810d6012100410110142103024010752201200010ac03450d0020012001200010aa032200200310b103450d00200220012000200310af0320012000200310a50310ce0220012000200210a9030b200241106a24000b3e02027f017e103b410210e90141a69008410810d601210041011014210210752201200010ac03047e20012001200010aa03200210b203ad0542010b103d0b1d01017f103b410110e9014100109201210010ee03200010fc02108b030b1d01017f103b410110e9014100109201210010ee03200010fc0210ce020b1d01017f103b410110e9014100109201210010ee03200010fd02ad103d0b4b01037f230041106b22002400103b410210e901410041ef8e08410710e301210141011092012102200041086a200110ef032000280208200028020c200210fb02ad103d200041106a24000b2701017f103b410110e9014100109201210010ee03200010fd0245044041fc980841141003000b0b5501037f230041106b22002400103b410210e901410041ef8e08410710e301210141011092012102200041086a200110ef032000280208200028020c200210fb0245044041fc980841141003000b200041106a24000b5501057f230041206b2200240010b2011a410210e90141001092012102410110b601210310b201200041086a10f00310772101108c0121042000410036021420002802102001200420022003200041146a10a203000b7d01077f230041206b2200240010b2011a410210e90141001092012104410110b601210210b201200210a3032103108c012105200041086a10f00310772101108c0121062000200536021c2000411f411b20031b36021820004182910841e7900820031b36021420002802102001200620042002200041146a10a203000bd60101067f230041206b2201240010b2011a410110e9014100109201210410b201200141086a10f00310772102108c0121052001410036021420012802102103230041406a220024002003109c030240200141146a22012802000440200041106a200141086a280200360200200020012902003703080c010b200041086a2003109102109d030b20034101200010cd02200041346a2002200520044100108502200041206a200041106a280200360200200020002902343703282000200028023c36022420002000290308370318200041186a109202000b9f04010a7f230041206b22002400103b410010e90120004181043b0006108c012102200041086a220110f0032000200236021c20004112360218200041d59008360214200041066a2102200041146a2106230041106b220024002000109b0336020c230041206b220424002001280208108d03044041978a0841201003000b2001109e032101200241026a2108230041106b22052400200541086a41b28508410e109c0120052005280208200528020c2001109d0120052802002109200528020422072000410c6a10840203400240024002400240024002400240024002400240024002400240200820022201470440200141016a21024197960821004111210320012d000041016b0e0c0c0102030405060708090a0b0e0b2004200936020020042007360204200541106a24000c0c0b41a8960821000c0a0b41b9960821000c090b41ca96082100411621030c080b41e096082100410f21030c070b41ef96082100411b21030c060b418a970821000c050b419b97082100411321030c040b41ae97082100411721030c030b41c597082100411521030c020b41da970821000c010b41eb97082100411021030b108c01220120002003100e1a2007200110b9010c010b0b2004411c6a200641086a2802003602002004200429030037020c200420062902003702142004410c6a220241086a2201280200044020011093020b200228020021012002280204210241ae860810940210fe012001200210ff01000b4001027f230041206b22002400103b410110e901410010b6012101200041146a10f0032000200028021420002802182001109f03200010f501200041206a24000ba20101037f230041d0006b22002400103b410210e901410041a79108410210e3012101410110b6012102200020013602182000411c6a10f003200041286a200028021c20002802202002109f032000200041346a360244200042003703382000200041186a3602482000200041306a2201360240200041386a108f02200041106a200129030037030020002000290328370308200041086a10f501200041d0006a24000b3b01027f230041106b22002400103b410110e9012000410010b601360200200041046a220110f0032001109e0342002000109b01200041106a24000b3701027f230041106b22002400103b410010e901200041046a220110f003109b032001109e03280200420010a501101c200041106a24000b4401027f230041206b22002400410010e901200010a801200041146a220110f0032001109e03280200200028020810db03044041828a0841151003000b200041206a24000bb20101047f230041e0006b22002400410010e90110a9012101200041086a220210f0032002109e03210220002001100a36021c2000410036021820002001360214200041286a2103200041d0006a210102400340200041cf006a200041146a10af0120002d004f4101470d01200041406b200141086a290000370300200020012900003703382003200041386a10ac012002280200200028023010db03450d000b41828a0841151003000b200041e0006a24000b4a01017f230041106b22002400103b410010e901200041046a10f0030240200028020c108d034504402000280204200028020810a00310cb030c010b108c0110191a0b200041106a24000b8c0201087f230041206b2200240010b2011a410110e9014100109201210610b201200041086a107910772102108c0121072000410036021420002802102103200041146a2101230041306b2200240020002003107a024002400240200028020041016b0e020001020b41ea890841181003000b41d6890841141003000b027f2001280200220504402001280208210420012802040c010b10a3012101108c01220420011086022004200310860241b78a08210541100b210120034101200010cd02200041246a200220072006410410850220002004360214200020013602102000200536020c200020002802283602202000200028022436021c2000200028022c3602182000410c6a109202000b6c01027f230041106b22002400103b410110e90141a69008410810d6012101200041046a10790240200028020420002802081080014102470440200110ba02450d01200028020c41022001107d10cd02200041106a24000f0b41d6890841141003000b41c6890841101003000b5a01037f230041206b22002400103b410210e901410010b60121012000410110d30122024110763a0012200020023b0110200041146a10792000200028021420002802182001200041106a10b303200010f501200041206a24000b9a0101047f230041406a22002400103b410310e901410041a79108410210e3012101410110b60121022000410210d30122034110763a0022200020033b01202000200136021c200041246a1079200041306a2201200028022420002802282002200041206a10b3032000411c6a200110b603200041106a200041386a29030037030020002000290330370308200041086a10f501200041406b24000b4902027f017e230041206b22002400103b410210e901410010142102410110b6012101200041146a10792000200028021420002802182002200110b703200010f501200041206a24000b860102037f017e230041306b22002400103b410310e901410041a79108410210e3012101410110142103410210b601210220002001360210200041146a1079200041206a2201200028021420002802182003200210b703200041106a200110b603200041086a200041286a29030037030020002000290320370300200010f501200041306a24000b4202027f017e230041106b22002400103b410210e9014100101421022000410110b601360200200041046a220110792001109e0320022000109b01200041106a24000b3e02027f017e230041106b22002400103b410110e901410010142102200041046a22011079109b032001109e03280200200210a501101c200041106a24000b8b02020b7f017e230041206b22012400103b410110e90141001014210b200141086a22001079109b032000109e0342001024210610042102100421071004210810042103100421004200102421091004210a280200200b2006200220072008200320002009200a106b2000100a450440200041b881084120100e1a0b200141003b011420024100200141146a2200410210ab011a20012003107d2202100a36021c2001410036021820012002360214200010cf032102200010cf032103200141146a10cf0321042001280218200128021c10cd0145044041d78708412041a58008410e108801000b108c012200200210ed012000200310ed012000200410ed01200010191a200141206a24000b4801017f230041106b22002400103b410010e901200041046a10790240200028020c10c70204402000280204200028020810a00310cb030c010b108c0110191a0b200041106a24000b4e01027f230041106b22002400103b410110e901410041c99108410310c9012101200041046a10e803200028020810c302044041868908410f1003000b200028020c200110f802200041106a24000b4201027f230041106b22002400103b410110e901410041ea8e08410510c9012101200041046a10e80320002802042000280208200110fa02ad101b200041106a24000b9a0101077f230041106b22002400103b410110e901410041ea8e08410510c9012103200041046a10e8032000280208220210c3022101200028020422042002200110fa022105024020012003460440200521060c010b20042002200310fa022106200420022003200510f9020b200420022001410010e5022001450440109b02000b200028020c200141016b10f8022006ad101b200041106a24000b4e01037f230041106b22002400103b410210e901410041ea8e08410510c9012101410141c79108410210c9012102200041046a10e803200028020420002802082001200210f902200041106a24000b6901057f230041106b22012400103b410010e901200141046a10e8032001280208220210c3022103200128020421044101210002400340200020034d04402000417f460d0220042002200010fa02ad101b200041016a21000c010b0b200141106a24000f0b109b02000b4801027f230041206b22002400103b410010e901200041086a220110ed032000200028020c10c30236021c2000410136021820002001360214200041146a10d103200041206a24000b3c01037f230041106b22002400103b410110e901410041bb8e08410410c9012101200041046a220210ed0320022001109503ad103d200041106a24000b3d01027f230041106b22002400103b410110e901410041bb8e08410410c9012101200041046a10ed03200028020c2001109603ad103d200041106a24000bdc0101087f230041106b22012400103b410110e901410041bb8e08410410c9012104200141046a10ed030240200128020c220520041099032200044002402001280208220310c302220220004f044020002002460d01200128020422072003200210e9022106200310c3022000490d032007200010e6022006ad10cb020c010b0c020b200310c30220024904400c020b2001280204200210e60210ce022003200241016b10ca02200020024704402005200620001097030b2005200410980310ce020b2000410047ad103d200141106a24000f0b41ea980841121003000b7902057f017e230041206b22002400103b410210e901200041086a410041e7910810d001200041146a410141e5910810d001200028021c21012000280218210220002802102103200028020c21042000280208200028021410ab0245200220044772047e4200052003200110b001ad0b103d200041206a24000b0d00103b410010e9014200101b0b0d00103b410010e901109b02000b0d00103b410010e901427e103d0b0f00103b410010e90110bc0210cb030b2301017f103b410110e901410010de01220010b501047e420105200010ba02ad0b103d0b1700103b410110e901410010920110be0210ba02ad103d0b900102037f027e230041206b22002400103b410110e901410041ad8e08410810c901ad2104108c01210103402003200451450440108c012202200342017c2203108c022001200210b9010c010b0b20002001100a36021c20004100360218200020013602140340200041086a200041146a10f20120002802084101710440200028020c10191a0c010b0b200041206a24000b2b01017f103b410110e901410041b58e08410610c9012200450440419f8e08410e109a01000b2000ad101b0b120010b2011a410010e90110b1011077101c0b2001017f103b410110e901410041ef8e08410710e301210010e903200010061a0b4101017f230041206b22002400103b410010e901200010e90310c50210eb03200041106a2000280200200028020410d802200028021045ad103d200041206a24000b4501027f230041106b22002400103b410110e901410041bb8e08410410c9012101200010e90310c50210eb032000280208200028020c200110e402ad103d200041106a24000b3f01017f230041206b22002400103b410010e901200010e90310c50210eb03200041106a2000280200200028020410d8022000350210101b200041206a24000b880101047f230041206b22002400103b410110e901410041bb8e08410410c9012101200041106a10e90310c50210eb0302402000280218200028021c200110e20222010440200041086a20002802102202200028021422032001108201200020022003200028020c10f30220002802004101710d010b108b01000b2000350204101b200041206a24000b880101047f230041206b22002400103b410110e901410041bb8e08410410c9012101200041106a10e90310c50210eb0302402000280218200028021c200110e20222010440200041086a20002802102202200028021422032001108201200020022003200028020810f30220002802004101710d010b108b01000b2000350204101b200041206a24000b6701037f230041306b22002400103b410010e901200041106a10e90310c50210eb03200041206a200028021022012000280214220210d802200041086a20012002200028022410f3022000280208410171450440108b01000b200035020c101b200041306a24000b6701037f230041306b22002400103b410010e901200041106a10e90310c50210eb03200041206a200028021022012000280214220210d802200041086a20012002200028022810f3022000280208410171450440108b01000b200035020c101b200041306a24000b7302027f017e230041306b22002400103b410010e901200041106a220110e90310c50210ea03200041086a200110d70220002903082102108c0121012000200237022803402000200041286a108101200028020041017104402001200028020410b9010c010b0b200110191a200041306a24000bc80102057f017e230041406a22002400103b410010e9012000411c6a220110e90310c50210ea03200041106a200110d70220002903102105108c012102200020053702342000200136023c024003400240200041086a200041346a1081012000280208410171450d00200028023c220141086a2802002001410c6a280200200028020c220410e402450d022001280214107d220341dc8808410710131a2004200310ef0120022001280210200310e30210b9010c010b0b200210191a200041406b24000f0b108b01000b5b01037f230041206b22002400103b410110e901410041bb8e08410410c9012000410c6a10e90310c50210ec032000280210107d220141c08908410610131a200110ef01200028020c200110e302410047ad103d200041206a24000b4301027f230041206b22002400103b410110e901410041ea8e08410510c90121012000410c6a10e90310c50210ec03200041146a200110ea02ad101b200041206a24000b7e01027f230041206b22002400103b410110e901410041bf8e08410510c9012101200041003a001c20002001360218200041013602140340200041086a200041146a10dc0320002802084101710440200028020c2101200041a69308410a107610c10320002802002000280204200110d4021a0c010b0b200041206a24000b950101047f230041306b22002400103b410110e901410041bf8e08410510c9012101200041003a00202000200136021c2000410136021802400340200041106a200041186a10dc032000280210410171450d01200028021422014190ce006a220220014f0440200041246a2203419c9308410a1076108903200041086a20032002200110d3020c010b0b109b02000b200041306a24000b7801037f230041206b22002400103b410110e901410041bf8e08410510c9012101200041003a00102000200136020c2000410136020803402000200041086a10dc032000280200410171044020002802042101200041146a220241ca95084114107610ca03200220011095031a0c010b0b200041206a24000b3601027f103b410210e901410041ef8e08410710e301410141a99108410910c90141e69408411c1076220110ef01200110cf0210191a0b4101037f103b410110e901410041b29108410b10e301210110e90310c502419f9508410b1076107d220041d19808410410131a2000200110051a200010c903101b0b1e01017f103b410210e901410010b6012200410110b60110a5022000101c0b1e01017f103b410210e901410010b6012200410110b60110bb022000101c0b1900103b410210e901410010b601410110b60110ab02ad103d0b1900103b410010e90142e4f401107e410210b00210b702101c0b1300103b410010e90142b9e000107e1077101c0b4101017f230041106b22002400103b410110e901200041086a410010b601410910ae02200028020841017145044010bf03000b200028020c103c200041106a24000b4101017f230041106b22002400103b410110e901200041086a410010b601410910b502200028020841017145044010bf03000b200028020c103c200041106a24000ba90101057f230041206b22002400103b410210e901200041186a410041889008410510e00120002802182102200028021c2101200041106a410141829008410610e001200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410b802200028020c2101200028020821020c010b20032004200110b60221030b2002200310a5022002200110f001200041206a24000ba90101057f230041206b22002400103b410210e901200041186a410041889008410510e00120002802182102200028021c2101200041106a410141829008410610e001200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410b802200028020c2101200028020821020c010b20032004200110b60221030b2002200310bb022002200110f001200041206a24000bbd0101067f230041106b22002400103b410210e901200041086a410041889008410510e00120002802082103200028020c21012000410141829008410610e00120002802002104027f024002400240024002402001200028020422024b200120024922056b41ff01710e020201000b200120024d0d030c020b20050d012004200120026b10b00210b202200310ab020c030b2003200410ab020c020b109b02000b2003200220016b10b00210b202200410ab020bad103d200041106a24000b5101017f230041106b22002400103b410110e901200041086a410041808d08410110e00120002000280208200028020c10ae02200028020041017145044010bf03000b2000280204103c200041106a24000b5101017f230041106b22002400103b410110e901200041086a410041808d08410110e00120002000280208200028020c10b502200028020041017145044010bf03000b2000280204103c200041106a24000b1d01017f103b410110e9014100109201210010be032000109f0210191a0b1f01017f103b410110e9014100109201210010be032000106c41004aad103d0b3301037f103b410210e901410010920121004101109201210110be032202200010782200106d1a200020022001109f0210f3010b5201047f103b410210e901410010920121004101109201210110be0322022000200110381a2000107d2103200041808f08410a10131a200141808f08410a10131a20022003109f0220022000109f0210f3010be80401057f230041f0006b220024000240024002401087022204109801220110a2020d0020002001107d2201100a360254200041003602502000200136024c200041cc006a220110bc032102200110bd032103108c0121010340200304402001200041cc006a10bc0310b901200341016b21030c010b0b2000280250200028025410cd01450d01200410ce022000410c6a2002108902200028022c450d00200041cc006a22032002108902200028026c450d0002400240200341e79008411b108802450440200341829108411f1088020d01200341d590084112108802450d0210eb01410010ea0120004100360240200041306a200041406b41a19108410610c801200028024010e80120002802302001100a210110eb014100200110e7014101710d034180960841081076108b030c030b10eb01410010ea0120004100360240200041306a2204200041406b10c601200028024010e8012000280234210220002802302001100a210110eb014100200110e7014101710440200410f003200028023810a1030c030b200041306a220110f00320012002109a030c020b10eb01410010ea0120004100360240200041306a2203200041406b41a19108410610c801200028024010e80120002802302001100a210110eb014100200110e7014101710440200310f003200028023810a1030c020b200041306a10a801200041406b220110f00320012000280238107d109a030c010b2002200110d603450d00200041cc006a2002108902200028026c450d002002200110d603450d002002200110d6030d020b200041f0006a24000f0b419f8108411941a58008410e108801000b41e98d0841361003000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072006200342208822067e22082005200142208822097e7c22054220867c220a37030020002007200a56ad200620097e2005200854ad4220862005422088847c7c200120047e200220037e7c7c3703080b4301037f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030b960302047f037e230041f0006b220c2400200c41d8006a200110af0202400240200c280258410171047f200c28025c210d410910b002210e4201107e200d10b102210f200c41e0006a2001200e10b202200f10b30210b402200c280260450d01200c41406b200c29036822112011423f872212200b427f10ff06200c290348200c2903402210423f87520d02200c41306a2010428094ebdc037f200a7c22102010423f872011201210ff06200c290338200c2903302210423f87520d02200c41206a2010428094ebdc037f20097d22102010423f872011201210ff06200c290328200c2903202210423f87520d02200c41106a2010428094ebdc037f20087c22102010423f872011201210ff06200c290318200c2903102212423f87520d02200c2002ad42002007420010ff06200c290308200c2903002211423f87520d022012428094ebdc037f20067d200dad20057e7c221220117d22102012532011420055730d022010107c210241010541000b21012000200236020420002001360200200c41f0006a24000f0b20042003109a01000b109b02000b3101017f230041106b22032400200320012002200341086a10d40320002003280200200328020410c902200341106a24000ba50101027f230041306b22062400027f2001500440200641106a2005410d109c01200641086a200628021020062802142000109d0120062802082107200628020c0c010b200641286a20042003109c01200641206a2006280228200628022c2000109d01200641186a200628022020062802242001109e0120062802182107200628021c0b21002006200720002002109f012006280200200628020410a001200641306a24000b3401027f230041106b22032400200341086a2002200110762204107a2000200329030837020020002004360208200341106a24000b0bd8190500418080080bb801546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f726d697373696e67206b657973657269616c697a6572206465636f6465206572726f723a200041d881080bd604454c524f4e447472616e7366657265736474696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e65676174697665455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c65464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c6573697373756543425f434c4f53555245636f6e74726163742063616c6c20656e636f6465206572726f723a20ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0041b786080b01010041cb86080b9e1302ffff73796e6320726573756c74617267756d656e74206f7574206f662072616e6765696e70757420746f6f2073686f72746361737420746f20693634206572726f72703232347032353670333834703532316661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a206c6e20696e7465726e616c206572726f726c6f673220696e7465726e616c206572726f724553445420657870656374656445474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c726561647920726567697374657265642e696e646578496e76616c696420746f6b656e204944546f6b656e20494420616c72656164792073657449737375652077617320616c72656164792063616c6c6564496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c726561647920736574556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e63656675747572655f76616c7565756e6c6f636b5f74696d657374616d706c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a2073746f72616765206465636f6465206572726f7220286b65793a20786d6f6d616d766563616d76616464726573735f6e756d6265725f706169727364756d6d7964617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e64657861646472657373616464723261646472312e2e2e6368616e6765646d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f627974657361727261797365636f6e64666972737463616e6e6f74206265207a65726f73746f726167655f6b6579746f6b656e5f69646e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f65787472615f6b6579616464726573735f6172676174747269627574657369646c656e746f6b656e5f6964656e746966696572617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c65726576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727365745f6d61707065727665635f6d61707065726d6d2d6b65796d6d2d76616c75656d6d2d6e756d2d656e747269657373746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d617070657273696e676c655f76616c75655f6d61707065725f776974685f6b65796c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f61646472657373756e6f7264657265645f7365745f6d617070657277686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657474696d656c6f636b5f6d617070657245534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e46545570646174654174747269627574657345534454526f6c654e465441646455524945534454526f6c654e4654526563726561746545534454526f6c654d6f64696679526f79616c7469657345534454526f6c654d6f6469667943726561746f7245534454526f6c655365744e6577555249455344545472616e73666572526f6c65456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726470616e6963206f636375727265640000c0020200c3020200c3020200c6020200c9020200c3020200c6020200c902020003000000030000000300000003000000040000000300000003000000040041ec99080b0438ffffff", + "code": "0061736d01000000018a022660000060027f7f0060027f7f017f60017f017f60017f0060037f7f7f017f60037f7f7f006000017f60047f7f7f7f006000017e60047f7f7f7f017f60027f7e0060017f017e60057f7f7f7f7f0060027f7f017e60047f7f7f7e0060037f7f7e017f60017e017f60037f7e7f0060057f7f7f7e7f0060047f7f7e7f0060017e0060057f7f7e7f7f017f60067f7f7f7f7f7f017f60037f7f7f017e60067e7f7f7f7f7f017f600b7f7f7e7f7f7f7f7f7f7f7f0060077f7f7f7f7f7f7f0060047e7f7f7f017f60027e7f0060017e017e60027f7e017f60037f7f7e0060067f7f7f7f7f7f0060047f7e7f7f0060057f7e7e7e7e00600c7f7f7f7f7f7e7e7e7e7e7e7e0060067f7e7f7f7f7f0002a719820103656e76126d616e616765645369676e616c4572726f72000403656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000703656e760d6d427566666572417070656e64000203656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001903656e760d6d616e6167656443616c6c6572000403656e76186d616e616765644765744f726967696e616c547848617368000403656e76106d4275666665724765744c656e677468000303656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365001303656e76136d616e616765644f776e657241646472657373000403656e7609626967496e744e6577001103656e76176d616e6167656447657445534454546f6b656e44617461001a03656e76176d616e6167656447657445534454546f6b656e54797065001403656e760f6d4275666665725365744279746573000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e76126d427566666572476574417267756d656e74000203656e76126d427566666572417070656e644279746573000503656e7611676574417267756d656e744c656e677468000303656e7619736d616c6c496e744765745369676e6564417267756d656e74000c03656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000703656e760d6d42756666657246696e697368000303656e7616736d616c6c496e7446696e697368556e7369676e6564001503656e7614626967496e7446696e697368556e7369676e6564000403656e760666696e697368000103656e7609626967496e74537562000603656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001603656e760a6765744761734c656674000903656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000003656e7609626967496e74436d70000203656e760d6d616e616765644d6170476574000503656e7616656c6c6970746963437572766547657456616c756573001703656e761067657443757276654c656e6774684543000303656e76086372656174654543000203656e76146d427566666572436f707942797465536c696365000a03656e76176d427566666572546f536d616c6c496e745369676e6564000c03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e76176d42756666657246726f6d426967496e745369676e6564000203656e76156d427566666572546f426967496e745369676e6564000203656e7609626967496e74506f77000603656e761776616c6964617465546f6b656e4964656e746966696572000303656e760a626967496e7454446976000603656e7609626967496e744d756c000603656e7609626967496e7453686c000603656e7609626967496e74536872000603656e760a626967496e744c6f6732000303656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e7453717274000103656e76126d42756666657253746f726167654c6f6164000203656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000603656e76196d42756666657246726f6d536d616c6c496e745369676e6564000b03656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000b03656e760d6d616e616765644d61704e6577000703656e760d6d616e616765644d6170507574000503656e761b6d616e616765645472616e7366657256616c756545786563757465001603656e760f6973536d617274436f6e7472616374000303656e760f6d616e6167656457726974654c6f67000103656e760e636865636b4e6f5061796d656e74000003656e7614736d616c6c496e7446696e6973685369676e6564001503656e7612626967496e7446696e6973685369676e6564000403656e7609626967496e74416273000103656e7609626967496e744e6567000103656e760a626967496e74544d6f64000603656e7609626967496e74416e64000603656e7608626967496e744f72000603656e7609626967496e74586f72000603656e7611676574426c6f636b54696d657374616d70000903656e760d676574426c6f636b4e6f6e6365000903656e760d676574426c6f636b526f756e64000903656e760d676574426c6f636b45706f6368000903656e76196d616e61676564476574426c6f636b52616e646f6d53656564000403656e761567657450726576426c6f636b54696d657374616d70000903656e761167657450726576426c6f636b4e6f6e6365000903656e761167657450726576426c6f636b526f756e64000903656e761167657450726576426c6f636b45706f6368000903656e761d6d616e6167656447657450726576426c6f636b52616e646f6d53656564000403656e7613676574426c6f636b526f756e6454696d654d73000903656e761a65706f63685374617274426c6f636b54696d657374616d704d73000903656e761465706f63685374617274426c6f636b4e6f6e6365000903656e761465706f63685374617274426c6f636b526f756e64000903656e76126d616e61676564476574436f646548617368000103656e761767657450726576426c6f636b54696d657374616d704d73000903656e7613676574426c6f636b54696d657374616d704d73000903656e761167657453686172644f6641646472657373000303656e76176d616e616765644765745374617465526f6f7448617368000403656e76166d616e61676564476574436f64654d65746164617461000103656e76186d616e6167656449734275696c74696e46756e6374696f6e000303656e760d6d616e61676564536861323536000203656e76106d616e616765644b656363616b323536000203656e76106d616e61676564526970656d64313630000203656e76106d616e61676564566572696679424c53000503656e76146d616e6167656456657269667945643235353139000503656e76166d616e61676564566572696679536563703235366b31000503656e761c6d616e61676564566572696679437573746f6d536563703235366b31000a03656e76226d616e61676564456e636f6465536563703235366b314465725369676e6174757265000503656e76166d616e61676564566572696679536563703235367231000503656e761e6d616e61676564566572696679424c535369676e61747572655368617265000503656e76236d616e61676564566572696679424c53416767726567617465645369676e6174757265000503656e760f6d616e616765644372656174654543000303656e7616676574507269764b6579427974654c656e6774684543000303656e76056164644543001b03656e7608646f75626c654543000d03656e760b69734f6e43757276654543000503656e76136d616e616765645363616c61724d756c744543001703656e76176d616e616765645363616c6172426173654d756c744543000a03656e76106d616e616765644d61727368616c4543000a03656e761a6d616e616765644d61727368616c436f6d707265737365644543000a03656e76126d616e61676564556e6d61727368616c4543000a03656e761c6d616e61676564556e6d61727368616c436f6d707265737365644543000a03656e76146d616e6167656447656e65726174654b65794543000a03656e76106d42756666657253657452616e646f6d000203656e76136d42756666657253657442797465536c696365000a03656e76126d616e616765644d6170436f6e7461696e73000203656e76106d616e616765644d617052656d6f7665000503656e760d626967496e744973496e743634000303656e760e626967496e74476574496e743634000c03656e760a626967496e745369676e000303656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000203656e76106d616e616765644173796e6343616c6c0008039a069806070203070401081103110b020108050106020108010800070103010601030101030101030e010601011206080f0801121c07071004070f010a040704080103010207070e0203030805050103050505080505030601010503050605050502050505050505050d03020707020306020a02030805010303010401040400010104011d0104010104010401040401010603070808060601010d0107050100010b0801040404040318030305080004061e020101010302020101020303060204080601030202020605020803010707010303030c0303030303010b060601040402020102080502020106050108010202050206050205080206020502010a010108010308060101060201080505020201020606020606010808060101040b0312021f0e03200e0202060202010704060308020421031410010f050602020201030f0810100d050113030302040303070004010101060101180e02010401040d03010403032202020406060302010404040401040107070704070407010101040701040701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052324250605030100030616037f01418080080b7f0041819b080b7f0041909b080b07ff51ba03066d656d6f7279020004696e69740083041070616e6963576974684d6573736167650084040a636f756e745f6f6e657300860419656e64706f696e745f776974685f6d757461626c655f617267008704136765745f657364745f746f6b656e5f646174610088040d737172745f6269675f75696e740089040d6c6f67325f6269675f75696e74008a040b706f775f6269675f696e74008b040c706f775f6269675f75696e74008c040f6269675f75696e745f746f5f753634008d041562696775696e745f6f76657277726974655f753634008e040d6269675f75696e745f7a65726f008f04136269675f75696e745f66726f6d5f7536345f310090041162696775696e745f66726f6d5f753132380091041c6269675f75696e745f66726f6d5f6d616e616765645f6275666665720092040c6269675f696e745f7a65726f009304126269675f696e745f66726f6d5f6936345f310094040f6269675f75696e745f65715f7536340095040e6269675f696e745f746f5f69363400960414626967696e745f6f76657277726974655f693634009704106269675f696e745f746f5f7061727473009804146269675f696e745f66726f6d5f62696775696e740099040b6164645f6269675f696e74009a04146164645f6269675f696e745f6269675f75696e74009b04146164645f6269675f75696e745f6269675f696e74009c04186164645f6269675f696e745f6269675f75696e745f726566009d04186164645f6269675f75696e745f6269675f696e745f726566009e040f6164645f6269675f696e745f726566009f040c6164645f6269675f75696e7400a004106164645f6269675f75696e745f72656600a1040b7375625f6269675f696e7400a2040f7375625f6269675f696e745f72656600a3040c7375625f6269675f75696e7400a404107375625f6269675f75696e745f72656600a5040b6d756c5f6269675f696e7400a6040f6d756c5f6269675f696e745f72656600a7040c6d756c5f6269675f75696e7400a804106d756c5f6269675f75696e745f72656600a9040b6469765f6269675f696e7400aa040f6469765f6269675f696e745f72656600ab040c6469765f6269675f75696e7400ac04106469765f6269675f75696e745f72656600ad040b72656d5f6269675f696e7400ae040f72656d5f6269675f696e745f72656600af040c72656d5f6269675f75696e7400b0041072656d5f6269675f75696e745f72656600b104126164645f61737369676e5f6269675f696e7400b204166164645f61737369676e5f6269675f696e745f72656600b304136164645f61737369676e5f6269675f75696e7400b404176164645f61737369676e5f6269675f75696e745f72656600b504127375625f61737369676e5f6269675f696e7400b604167375625f61737369676e5f6269675f696e745f72656600b704137375625f61737369676e5f6269675f75696e7400b804177375625f61737369676e5f6269675f75696e745f72656600b904126d756c5f61737369676e5f6269675f696e7400ba04136d756c5f61737369676e5f6269675f75696e7400bb04126469765f61737369676e5f6269675f696e7400bc04136469765f61737369676e5f6269675f75696e7400bd041272656d5f61737369676e5f6269675f696e7400be041372656d5f61737369676e5f6269675f75696e7400bf04106269745f616e645f6269675f75696e7400c004146269745f616e645f6269675f75696e745f72656600c1040f6269745f6f725f6269675f75696e7400c204136269745f6f725f6269675f75696e745f72656600c304106269745f786f725f6269675f75696e7400c404146269745f786f725f6269675f75696e745f72656600c504176269745f616e645f61737369676e5f6269675f75696e7400c604166269745f6f725f61737369676e5f6269675f75696e7400c704176269745f786f725f61737369676e5f6269675f75696e7400c8040c7368725f6269675f75696e7400c904107368725f6269675f75696e745f72656600ca040c73686c5f6269675f75696e7400cb041073686c5f6269675f75696e745f72656600cc04137368725f61737369676e5f6269675f75696e7400cd041373686c5f61737369676e5f6269675f75696e7400ce04136765745f626c6f636b5f74696d657374616d7000cf040f6765745f626c6f636b5f6e6f6e636500d0040f6765745f626c6f636b5f726f756e6400d1040f6765745f626c6f636b5f65706f636800d204156765745f626c6f636b5f72616e646f6d5f7365656400d304186765745f707265765f626c6f636b5f74696d657374616d7000d404146765745f707265765f626c6f636b5f6e6f6e636500d504146765745f707265765f626c6f636b5f726f756e6400d604146765745f707265765f626c6f636b5f65706f636800d7041a6765745f707265765f626c6f636b5f72616e646f6d5f7365656400d8040a65706f63685f696e666f00d90409636f64655f6861736800da04146765745f626c6f636b5f74696d657374616d707300db04166765745f626c6f636b5f74696d657374616d705f6d7300dc041b6765745f707265765f626c6f636b5f74696d657374616d705f6d7300dd040a6765745f63616c6c657200de04116765745f6f776e65725f6164647265737300df04146765745f73686172645f6f665f6164647265737300e0041169735f736d6172745f636f6e747261637400e104136765745f73746174655f726f6f745f6861736800e2040b6765745f74785f6861736800e3040c6765745f6761735f6c65667400e4041f6765745f63756d756c617465645f76616c696461746f725f7265776172647300e504116765745f636f64655f6d6574616461746100e6041369735f6275696c74696e5f66756e6374696f6e00e70410636f6465635f6572725f66696e69736800e80415636f6465635f6572725f73746f726167655f6b657900e90415636f6465635f6572725f73746f726167655f67657400ea0415636f6465635f6572725f73746f726167655f73657400eb0415636f6465635f6572725f6576656e745f746f70696300ec0414636f6465635f6572725f6576656e745f6461746100ed0417636f6465635f6572725f636f6e74726163745f696e697400ee0417636f6465635f6572725f636f6e74726163745f63616c6c00ef040e636f6d707574655f73686132353600f00411636f6d707574655f6b656363616b32353600f10411636f6d707574655f726970656d6431363000f204147665726966795f626c735f7369676e617475726500f304187665726966795f656432353531395f7369676e617475726500f4041a7665726966795f736563703235366b315f7369676e617475726500f504217665726966795f637573746f6d5f736563703235366b315f7369676e617475726500f6041f636f6d707574655f736563703235366b315f6465725f7369676e617475726500f7041a7665726966795f7365637032353672315f7369676e617475726500f8041a7665726966795f626c735f7369676e61747572655f736861726500f9041f7665726966795f626c735f616767726567617465645f7369676e617475726500fa04086563686f5f75363400fb04086563686f5f69363400fc04086563686f5f69333200fd04086563686f5f75333200fe040a6563686f5f6973697a6500ff040a6563686f5f7573697a6500fe04076563686f5f6938008005076563686f5f7538008105096563686f5f626f6f6c0082050d6563686f5f6f70745f626f6f6c0083050c6563686f5f6e6f7468696e670084050d6563686f5f61727261795f7538008505146563686f5f6d756c74695f76616c75655f753332008605176563686f5f6d756c74695f76616c75655f7475706c6573008705126563686f5f7365725f6578616d706c655f32008805106563686f5f73696d706c655f656e756d0089051c66696e6973685f73696d706c655f656e756d5f76617269616e745f31008a05136563686f5f6e6f6e5f7a65726f5f7573697a65008b051c6563686f5f736f6d655f617267735f69676e6f72655f6f7468657273008c050d6563686f5f6172726179766563008d050d6563686f5f6269675f75696e74008e050c6563686f5f6269675f696e74008f05136563686f5f6d616e616765645f627566666572009005146563686f5f6d616e616765645f61646472657373009105136563686f5f6d616e616765645f6f7074696f6e009205186563686f5f6269675f696e745f6d616e616765645f766563009305126563686f5f6269675f696e745f7475706c65009405136563686f5f6269675f696e745f6f7074696f6e0095051b6563686f5f7475706c655f696e746f5f6d756c7469726573756c740096051f6563686f5f6d616e616765645f7665635f6f665f6d616e616765645f766563009705246563686f5f6d616e616765645f7665635f6f665f746f6b656e5f6964656e7469666965720098051f6563686f5f6d616e616765645f6173796e635f726573756c745f656d707479009905176563686f5f7661726167735f6d616e616765645f73756d009a051c6563686f5f7661726167735f7665635f776974685f636f756e746564009b0527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f31009c0527636f6e766572745f7661726167735f7665635f776974685f636f756e7465645f70616972735f32009d0512636f6d707574655f6765745f76616c756573009e0511636f6d707574655f6372656174655f6563009f0515636f6d707574655f6765745f65635f6c656e67746800a00520636f6d707574655f6765745f707269765f6b65795f627974655f6c656e67746800a1050e636f6d707574655f65635f61646400a20511636f6d707574655f65635f646f75626c6500a30516636f6d707574655f69735f6f6e5f63757276655f656300a40513636f6d707574655f7363616c61725f6d756c7400a50518636f6d707574655f7363616c61725f626173655f6d756c7400a60512636f6d707574655f6d61727368616c5f656300a7051d636f6d707574655f6d61727368616c5f636f6d707265737365645f656300a80514636f6d707574655f756e6d61727368616c5f656300a9051f636f6d707574655f756e6d61727368616c5f636f6d707265737365645f656300aa0517636f6d707574655f67656e65726174655f6b65795f656300ab05096c6f674576656e744100ac050f6c6f674576656e744152657065617400ad05096c6f674576656e744200ae05136f6e6c795f6f776e65725f656e64706f696e7400af051a6f6e6c795f757365725f6163636f756e745f656e64706f696e7400b0050e726571756972655f657175616c7300b1050873635f70616e696300b205136d616464726573735f66726f6d5f617272617900b3051c6d616464726573735f66726f6d5f6d616e616765645f62756666657200b4050b6d6275666665725f6e657700b5050e6d6275666665725f636f6e63617400b605126d6275666665725f636f70795f736c69636500b705126d6275666665725f7365745f72616e646f6d00b8050a6d6275666665725f657100b905146d616e616765645f616464726573735f7a65726f00ba05126d616e616765645f616464726573735f657100bb050f6d616e616765645f7665635f6e657700bc05186d616e616765645f7665635f62696775696e745f7075736800bd05166d616e616765645f7665635f62696775696e745f657100be05186d616e616765645f7665635f616464726573735f7075736800bf050f6d616e616765645f7665635f73657400c005126d616e616765645f7665635f72656d6f766500c105106d616e616765645f7665635f66696e6400c205146d616e616765645f7665635f636f6e7461696e7300c305146d616e616765645f7265665f6578706c6963697400c4051073746f726167655f726561645f72617700c5051173746f726167655f77726974655f72617700c6051973746f726167655f726561645f66726f6d5f6164647265737300c7050a6c6f61645f627974657300c8050d6c6f61645f6269675f75696e7400c9050c6c6f61645f6269675f696e7400ca05086c6f61645f75363400cb050a6c6f61645f7573697a6500cc05086c6f61645f69363400cd05096c6f61645f626f6f6c00ce05096c6f61645f6164647200cf050d6c6f61645f6f70745f6164647200d0051169735f656d7074795f6f70745f6164647200d1050f6765745f6e725f746f5f636c65617200d20513636c6561725f73746f726167655f76616c756500d3050a6c6f61645f7365725f3200d405096c6f61645f6d61703100d505096c6f61645f6d61703200d605096c6f61645f6d61703300d705156c6f61645f66726f6d5f616464726573735f72617700d8050b73746f72655f627974657300d9050e73746f72655f6269675f75696e7400da050d73746f72655f6269675f696e7400db050b73746f72655f7573697a6500dc050973746f72655f69333200dd050973746f72655f75363400de050973746f72655f69363400df050a73746f72655f626f6f6c00e0050a73746f72655f6164647200e1050e73746f72655f6f70745f6164647200e2050b73746f72655f7365725f3200e3050a73746f72655f6d61703100e4050a73746f72655f6d61703200e5050a73746f72655f6d61703300e6051273746f72655f72657365727665645f69363400e7051773746f72655f72657365727665645f6269675f75696e7400e8051573746f72655f72657365727665645f7665635f753800e90517746f6b656e5f6861735f7472616e736665725f726f6c6500ea050f74696d656c6f636b5f6d617070657200eb051a74696d656c6f636b5f7365745f696e697469616c5f76616c756500ec051d74696d656c6f636b5f7365745f756e6c6f636b5f74696d657374616d7000ed051674696d656c6f636b5f636f6d6d69745f616374696f6e00ee051d74696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d7000ef051974696d656c6f636b5f6765745f6675747572655f76616c756500f0052574696d656c6f636b5f6765745f63757272656e745f76616c75655f61745f6164647265737300f1052874696d656c6f636b5f6765745f756e6c6f636b5f74696d657374616d705f61745f6164647265737300f2052474696d656c6f636b5f6765745f6675747572655f76616c75655f61745f6164647265737300f3051b616464726573735f746f5f69645f6d61707065725f6765745f696400f40524616464726573735f746f5f69645f6d61707065725f6765745f69645f6e6f6e5f7a65726f00f50520616464726573735f746f5f69645f6d61707065725f6765745f6164647265737300f6051d616464726573735f746f5f69645f6d61707065725f636f6e7461696e7300f70518616464726573735f746f5f69645f6d61707065725f73657400f80525616464726573735f746f5f69645f6d61707065725f6765745f69645f6f725f696e7365727400f90521616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f696400fa0526616464726573735f746f5f69645f6d61707065725f72656d6f76655f62795f6164647265737300fb050d6765744c6973744d617070657200fc05126c6973744d6170706572507573684261636b00fd05136c6973744d61707065725075736846726f6e7400ff05126c6973744d6170706572506f7046726f6e74008006116c6973744d6170706572506f704261636b0081060f6c6973744d617070657246726f6e740082060e6c6973744d61707065724261636b008306136c6973744d6170706572507573684166746572008406146c6973744d6170706572507573684265666f7265008506146c6973744d617070657252656d6f76654e6f6465008606186c6973744d617070657252656d6f76654e6f646542794964008706126c6973744d617070657253657456616c7565008806166c6973744d617070657253657456616c756542794964008906176c6973744d617070657249746572617465427948616e64008a06176c6973744d617070657249746572617465427949746572008b060c71756575655f6d6170706572008c061671756575655f6d61707065725f707573685f6261636b008d061671756575655f6d61707065725f706f705f66726f6e74008e061271756575655f6d61707065725f66726f6e74008f060a6d61705f6d61707065720090060f6d61705f6d61707065725f6b657973009106116d61705f6d61707065725f76616c756573009206116d61705f6d61707065725f696e73657274009306176d61705f6d61707065725f636f6e7461696e735f6b65790094060e6d61705f6d61707065725f676574009506116d61705f6d61707065725f72656d6f76650096062c6d61705f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e74009706226d61705f6d61707065725f656e7472795f6f725f696e736572745f64656661756c740098061b6d61705f6d61707065725f656e7472795f616e645f6d6f64696679009906236d61705f6d61707065725f656e7472795f6f725f696e736572745f776974685f6b6579009a06176d61705f73746f726167655f6d61707065725f76696577009b06216d61705f73746f726167655f6d61707065725f696e736572745f64656661756c74009c061f6d61705f73746f726167655f6d61707065725f636f6e7461696e735f6b6579009d06166d61705f73746f726167655f6d61707065725f676574009e061f6d61705f73746f726167655f6d61707065725f696e736572745f76616c7565009f061c6d61705f73746f726167655f6d61707065725f6765745f76616c756500a006196d61705f73746f726167655f6d61707065725f72656d6f766500a106186d61705f73746f726167655f6d61707065725f636c65617200a206346d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f7570646174655f696e6372656d656e7400a306386d61705f73746f726167655f6d61707065725f656e7472795f616e645f6d6f646966795f696e6372656d656e745f6f725f64656661756c7400a4062a6d61705f73746f726167655f6d61707065725f656e7472795f6f725f64656661756c745f75706461746500a5060a7365745f6d617070657200a606117365745f6d61707065725f696e7365727400a706137365745f6d61707065725f636f6e7461696e7300a806117365745f6d61707065725f72656d6f766500a906107365745f6d61707065725f66726f6e7400aa060f7365745f6d61707065725f6261636b00ab060f7365745f6d61707065725f6e65787400ac06137365745f6d61707065725f70726576696f757300ad061e7365745f6d61707065725f697465725f66726f6d5f616e645f636f756e7400ae061a6d61705f6d795f73696e676c655f76616c75655f6d617070657200af06226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3100b006226d795f73696e676c655f76616c75655f6d61707065725f696e6372656d656e745f3200b1062c6d795f73696e676c655f76616c75655f6d61707065725f73756274726163745f776974685f7265717569726500b206236d795f73696e676c655f76616c75655f6d61707065725f7365745f69665f656d70747900b30619636c6561725f73696e676c655f76616c75655f6d617070657200b406246765745f66726f6d5f616464726573735f73696e676c655f76616c75655f6d617070657200b5062769735f656d7074795f61745f616464726573735f73696e676c655f76616c75655f6d617070657200b606237261775f627974655f6c656e6774685f73696e676c655f76616c75655f6d617070657200b706207365745f73696e676c655f76616c75655f6d61707065725f776974685f6b657900b8060a7665635f6d617070657200b9060f7665635f6d61707065725f7075736800ba060e7665635f6d61707065725f67657400bb06197665635f6d61707065725f6765745f61745f6164647265737300bc060e7665635f6d61707065725f6c656e00bd06197665635f6d61707065725f6c656e5f61745f6164647265737300be0614746f6b656e5f617474726962757465735f73657400bf0617746f6b656e5f617474726962757465735f75706461746500c0061f746f6b656e5f617474726962757465735f6765745f6174747269627574657300c1061a746f6b656e5f617474726962757465735f6765745f6e6f6e636500c20616746f6b656e5f617474726962757465735f636c65617200c3061f746f6b656e5f617474726962757465735f6861735f6174747269627574657300c406106164645f746f5f77686974656c69737400c5061572656d6f76655f66726f6d5f77686974656c69737400c6060e636865636b5f636f6e7461696e7300c70619636865636b5f636f6e7461696e735f61745f6164647265737300c80610726571756972655f636f6e7461696e7300c9061b726571756972655f636f6e7461696e735f61745f6164647265737300ca061f69737375655f66756e6769626c655f64656661756c745f63616c6c6261636b00cb061e69737375655f66756e6769626c655f637573746f6d5f63616c6c6261636b00cc062069737375655f616e645f7365745f616c6c5f726f6c65735f66756e6769626c6500cd06187365745f6c6f63616c5f726f6c65735f66756e6769626c6500ce060d6d696e745f66756e6769626c6500cf06166d696e745f616e645f73656e645f66756e6769626c6500d0060d6275726e5f66756e6769626c6500d106146765745f62616c616e63655f66756e6769626c6500d2061b726571756972655f73616d655f746f6b656e5f66756e6769626c6500d3061f726571756972655f616c6c5f73616d655f746f6b656e5f66756e6769626c6500d4061267657446756e6769626c65546f6b656e496400d5061c69737375655f616e645f7365745f616c6c5f726f6c65735f6d65746100d606176d61707065725f6e66745f7365745f746f6b656e5f696400d706116d61707065725f6e66745f63726561746500d8061a6d61707065725f6e66745f6372656174655f616e645f73656e6400d906176d61707065725f6e66745f6164645f7175616e7469747900da06206d61707065725f6e66745f6164645f7175616e746974795f616e645f73656e6400db060f6d61707065725f6e66745f6275726e00dc06166d61707065725f6e66745f6765745f62616c616e636500dd061b6d61707065725f6765745f746f6b656e5f6174747269627574657300de06156765744e6f6e46756e6769626c65546f6b656e496400df0615696e69745f756e697175655f69645f6d617070657200e00614756e697175655f69645f6d61707065725f67657400e1061c756e697175655f69645f6d61707065725f737761705f72656d6f766500e20614756e697175655f69645f6d61707065725f73657400e30610756e697175655f69645f6d617070657200e40614756e6f7264657265645f7365745f6d617070657200e5061b756e6f7264657265645f7365745f6d61707065725f696e7365727400e6061d756e6f7264657265645f7365745f6d61707065725f636f6e7461696e7300e7061b756e6f7264657265645f7365745f6d61707065725f72656d6f766500e806116d616e616765645f7374727563745f657100e9060c6f766572666c6f775f75313600ea060f6e6f5f6f766572666c6f775f69313600eb060c6f766572666c6f775f69313600ec0615746f6b656e5f6964656e7469666965725f65676c6400ed061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3100ee061b746f6b656e5f6964656e7469666965725f69735f76616c69645f3200ef06136e6f6e5f7a65726f5f7573697a655f6974657200f006146e6f6e5f7a65726f5f7573697a655f6d6163726f00f1061472657475726e735f65676c645f646563696d616c00f206147365745f636f6e74726163745f6164647265737300f3061369735f656d7074795f61745f6164647265737300f40613636f6e7461696e735f61745f6164647265737300f5060e6c656e5f61745f6164647265737300f6060f6e6578745f61745f6164647265737300f7061370726576696f75735f61745f6164647265737300f8061066726f6e745f61745f6164647265737300f9060f6261636b5f61745f6164647265737300fa060f6b6579735f61745f6164647265737300fb061176616c7565735f61745f6164647265737300fc061d636f6e7461696e735f756e6f7264657265645f61745f6164647265737300fd060c6765745f62795f696e64657800fe060f66696c6c5f7365745f6d617070657200ff060f66696c6c5f6d61705f6d61707065720080071966696c6c5f756e6f7264657265645f7365745f6d6170706572008107206765745f76616c75655f66726f6d5f616464726573735f776974685f6b65797300820728616464726573735f746f5f69645f6d61707065725f6765745f69645f66726f6d5f61646472657373008307186d616e616765645f646563696d616c5f6164646974696f6e0084071b6d616e616765645f646563696d616c5f7375627472616374696f6e008507126d616e616765645f646563696d616c5f6571008607156d616e616765645f646563696d616c5f7472756e630087071e6d616e616765645f646563696d616c5f696e746f5f7261775f756e697473008807126d616e616765645f646563696d616c5f6c6e008907146d616e616765645f646563696d616c5f6c6f6732008a071c6d616e616765645f646563696d616c5f6164646974696f6e5f766172008b071f6d616e616765645f646563696d616c5f7375627472616374696f6e5f766172008c07166d616e616765645f646563696d616c5f65715f766172008d07166d616e616765645f646563696d616c5f6c6e5f766172008e07186d616e616765645f646563696d616c5f6c6f67325f766172008f07066d6d5f6765740090070b6d6d5f636f6e7461696e730091070d6d6d5f72656d6f76655f676574009207156d6d5f6d757461626c655f696e7075745f746573740093070863616c6c4261636b009407226563686f5f7661726167735f7665635f776974685f636f756e7465645f7061697273009b050e6f766572666c6f775f7573697a6500ea060b6f766572666c6f775f753800ea060c6f766572666c6f775f75333200ea060c6f766572666c6f775f75363400ea060e6f766572666c6f775f6973697a6500ec060b6f766572666c6f775f693800ec060c6f766572666c6f775f69333200ec060c6f766572666c6f775f69363400ec06136269675f75696e745f66726f6d5f7536345f32009004126269675f696e745f66726f6d5f6936345f320094041c69735f656d7074795f73696e676c655f76616c75655f6d617070657200b506196563686f5f7661726167735f6d616e616765645f65616765720086050f706f775f6269675f696e745f726566008b0410706f775f6269675f75696e745f726566008c04116c6f67325f6269675f75696e745f726566008a04166d756c5f61737369676e5f6269675f696e745f72656600ba04176d756c5f61737369676e5f6269675f75696e745f72656600bb04166469765f61737369676e5f6269675f696e745f72656600bc04176469765f61737369676e5f6269675f75696e745f72656600bd041672656d5f61737369676e5f6269675f696e745f72656600be041772656d5f61737369676e5f6269675f75696e745f72656600bf041b6269745f616e645f61737369676e5f6269675f75696e745f72656600c6041a6269745f6f725f61737369676e5f6269675f75696e745f72656600c7041b6269745f786f725f61737369676e5f6269675f75696e745f72656600c804177368725f61737369676e5f6269675f75696e745f72656600cd041773686c5f61737369676e5f6269675f75696e745f72656600ce0411737172745f6269675f75696e745f726566008904206269675f75696e745f66726f6d5f6d616e616765645f6275666665725f726566009204116e6f5f6f766572666c6f775f7573697a6500eb060e6e6f5f6f766572666c6f775f753800eb060f6e6f5f6f766572666c6f775f75333200eb060f6e6f5f6f766572666c6f775f75363400eb060f6e6f5f6f766572666c6f775f75313600eb06116e6f5f6f766572666c6f775f6973697a6500eb060e6e6f5f6f766572666c6f775f693800eb060f6e6f5f6f766572666c6f775f69333200eb060f6e6f5f6f766572666c6f775f69363400eb060a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01050a99a10398060b0041808008410f1083010b1201017f10850122022000200110111a20020b1701017f108501220142001001200120012000100220010b2801027f41f89908280200220141016b2200200148044041f89908200036020020000f0b10ac02000b0d0020004116418f80081099070b7a01027f230041106b22022400027f4100200110a501220110b4020d001a02402001100a4107470d002002410036000b2002410036020820014100200241086a2203410710ba011a200341f5910841071095070d0041010c010b200110d1021a41020b21032000200136020420002003360200200241106a24000b1c00200120034b0440108504000b20002001360204200020023602000b0f01017f10850122012000100120010b0f01017f10042201200010051a20010b1001017f10850122012000108c0120010b0b002000200110af0210010b1200200041024f04402001108a011a0b20000b6c01047f230041106b2203240020012802042202047f200341086a20012802002204280200200441046a22052802002002108f012001200328020c360204200428020020052802002002109001210241010541000b21012000200236020420002001360200200341106a24000b6f01027f230041106b22042400200441046a22052001200241fc8808410b200310fc022201108603200520011087032102200441046a200110870321032004280208200428020c10df01450440200141a58008410e10a801000b2000200336020420002002360200200441106a24000b140020002001418789084106200210fc0210f3020b5d01037f230041106b2203240020012802042202047f200341086a2001280200220428020020021092012001200328020c36020420042802002002109301210241010541000b21012000200236020420002001360200200341106a24000b6d01027f230041106b22032400200341046a2204200141fc8808410b200210fc02220110a401200420011087032102200341046a200110870321042003280208200328020c10df01450440200141a58008410e10a801000b2000200436020420002002360200200341106a24000b12002000418789084106200110fc0210d0020b10002000200141db8008411b109501000b17002000200110830122002002200310171a20001000000b7901027f230041106b22022400200241086a2001109101024020002002280208410171047f200220012802082201280200200141086a280200200228020c22011097012002280200410171450d0120022802042103200020013602042000200336020841010541000b360200200241106a24000f0b109801000b2a002001200310e602047f2002200310e502210341010541000b210120002003360204200020013602000b060010ac02000b0900410141001083010b0c0020012000109b0110061a0b1001017f1085012201200010371a20010b910102047f017e230041206b2202240020002001280200410146047f200141106a22032802002104200129020421062002410c6a2001280214280200200128020c2205109d0120032002411c6a280200360200200141086a200241146a2902003702002001200229020c370200200020043602102000200536020c2000200637020441010541000b360200200241206a24000b2401017f200020012002108f03047f410005200041046a2001200210900341010b3602000b0c0020002001109f0110a0010b0e002000108501220010161a20000b190020002001100a36020820004100360204200020013602000b0c00200010a201200110a3010b1001017f10850122012000102e1a20010b5101027f230041106b2202240020022000100a220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410171a2001200010051a200241106a24000b0c002000200110a50110a0010b0e0020001085012200103a1a20000b3a02017f017e230041106b220224002002200010a50110a7012002280200450440200141d98608410e10a801000b2002290308200241106a24000b2101017e20002001100a41084d047e20002001102d37030842010542000b3703000b2d01017f41f18c08411b1083012203200010051a200341888308410310171a20032001200210171a20031000000b0c002000109b01200110a3010b0900200020011003000b1500200020012002410b41a28408419584081098070b1a002001200210830121012000109901360204200020013602000b4401017f10990121040240200328020010c7014504402003280200108a0121040c010b200441b48808410410111a0b2002200410cc0120002002360204200020013602000b2301017f10990122042003109f022002200410cc0120002002360204200020013602000b17002002200310a10220002002360204200020013602000b1701017e1023416210241091022000200110b2011a10250b1500200020012002411241ba840841ad84081098070b160020004162200120022003108501220110071a20010b0d01017f1085012200100820000b0d01017f1085012200100920000b2f01027f10850121032001100a2104200010b601200141dc9a08100b1a41bc9a0841dc9a08200420022003100c20030b0b00200041bc9a08100b1a0b0d01017f1085012200100d20000bf20102097f017e230041106b220424002001200220034200100e22071004220610042208100422091004220a100422054200100e220b1004220c100f200120022003417510102004417510b901200429030821032004290300210d2005100a450440200541b88108412010111a0b41002102200441003b010020002006100a410246047f200641002004410210ba011a20042d00004100470541000b3a001d200020073602002000200c3602182000200b360214200020053602102000200a36020c2000200936020820002008360204200041082003a741ff01712200200041084f1b4108200da71b3a001c200441106a24000b3c02017f017e230041106b220224002002200110ce0220002002280200410146047e2000200229030837030842010542000b370300200241106a24000b0f002000200120032002107f4100470b7c01037f230041306b22012400024010bc012202100a4170714110460440200141206a220310bd012002100a410f4d0d01200241002003411010be01200141106a200310bf01200041086a200141186a29030037030020002001290310370300200141306a24000f0b41ea810841221003000b41c68708411d1003000b9a0101027f230041206b22002400410210c001450440415a10120b0240410410c0010d00415841e68208410b10111a2000415a100a360208200042daffffff0f37020003402000410f6a200010c10120002d000f4101470d0141582000280010220141187420014180fe03714108747220014108764180fe03712001411876727210c201450d000b418c820841181003000b200041206a2400415a0b3e01027f230041106b21010340200120026a41003a0000200241016a22024110470d000b20002001290000370000200041086a200141086a2900003700000b1b00200020012002200310ba014504400f0b4197870841131003000b6b02037f017e230041106b220324002003410436020c2001280000210220012003410c6a220410c501210520002001200410c60136020c200020053703002000200241187420024180fe03714108747220024108764180fe037120024118767272360208200341106a24000b2b01027f200041809b082d0000220171200041ff017146220245044041809b0820002001723a00000b20020b7d01037f230041106b2202240002402001280204220320012802084904402003200341106a22044d0440200210bd01200128020020032002411010ba011a20012004360204200041013a000020002002290000370001200041096a200241086a2900003700000c020b10ac02000b200041003a00000b200241106a24000b0c002000200110800141004a0b1100410110c001450440415d10130b415d0bcb0101047f230041206b22012400410810c001450440415910140b02400240024002404159100a4104760e020102000b41c98208411d1003000b415d2100415d420010010c010b2001410c6a220010bd014159100a410f4b0440415941002000411010be012001410436021c200128020c210220002001411c6a220310c5011a2000200310c6012100200241187420024180fe03714108747220024108764180fe03712002411876727210c7010d0141a4820841251003000b41c68708411d1003000b200141206a240020000b7f02017e027f2001280200220341086a220420034f044020012004360200200020036a290000220242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840f0b10ac02000b4b01027f2001280200220241046a220320024f044020012003360200200020026a280000220041187420004180fe03714108747220004108764180fe0371200041187672720f0b10ac02000b1400415841e68208410b10111a4158200010c2010b0d0020001085012200101520000b2f01017f41f18208411710830122042000200110171a200441888308410310171a20042002200310171a20041000000b2f01017f10990121030340200028020041fc9a082802004e450440200320002001200210cb0110cc010c010b0b20030b0e0020002001200210cf01109f010b4a01017f230041106b2202240010ea011a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410171a200241106a24000b1000200041af9008410b10ce01108a010b4001017f230041106b22032400200341086a200010880220032802084101710440200328020c108a01200341106a24000f0b20012002418b8308411110c901000b3001017f2000280200220341fc9a082802004e044020012002418b8308411110c901000b2000200341016a36020020030b2c01017e2000101922034280808080087d42ffffffff6f5804402001200241a59208411210c901000b2003a70b5d01027f027f410020012002200310d201220445200441ebde0146720d001a200128020041fc9a082802004e0440109901210541010c010b20012002200310cb01210541010b21012000200536020820002004360204200020013602000b120020002001200210cf012001200210e6010b120020002001200210cf012001200210e3010b1600200041988d08411410cf0141988d08411410e6010b4501027f230041106b22032400200341046a220410ad022003410036020c200120042003410c6a220110ae0220022004200110ae0220002004410810171a200341106a24000ba80101037f230041106b22032400200341046a220410be0220032001280208220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001280204220241187420024180fe03714108747220024108764180fe03712002411876727236020820032001280200220141187420014180fe03714108747220014108764180fe03712001411876727236020420002004410c10171a200341106a24000ba80101027f230041106b22022400027f200141ad9108410610d201220341ebde0147410020031b45044041002103200141ad9108410610cf0141ad9108410610d80121012002410c6a0c010b027f200128020041fc9a082802004e04401099010c010b200141ad9108410610cb010b21012002200336020c41012103200241086a0b2001360200200020033602002000200228020c36020420002002280208360208200241106a24000b4001017f230041106b22032400200341086a200010f60110f80120032802084101710440200328020c200341106a24000f0b2001200241a78808410d10c901000b1600200041b79208410e10ce0141b79208410e10da010b21002000108a012200100a41204704402001200241fc9108411010c901000b20000b7501037f230041106b22042400200441046a22032001109e0120032002410210dc01210120032002410210dd01210520032002410210de0121032004280208200428020c10df014504402002410241a58008410e10c901000b200020033602082000200536020420002001360200200441106a24000b0e0020002001200210de0110a9020b5301017f230041106b220324002003410036020c20002003410c6a41042001200210e701200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1400200020002001200210dd012001200210f0010b0a002000200110e901450b2301017e2000101a220342ff015804402003a70f0b2001200241a58008410e10c901000b3001017f230041106b22032400200341003a000f20002003410f6a41012001200210e70120032d000f200341106a24000b0b0020002001200210e3010b21002000109f012200100a41204704402001200241fc9108411010c901000b20000b0b0020002001200210d8010b0b0020002001200210e6010b2601017e2000101a220342ffffffff0f5804402003a70f0b2001200241a58008410e10c901000b4f01017f024020002802042205200028020810e90120024f0440200028020020052001200210be01200220056a220120054f0d0110ac02000b2003200441e78608410f10c901000b200020013602040b10002000418c8d08410110de0110a8020b1400200020014d0440200120006b0f0b10ac02000b2c01027f230041106b210103402001410c6a20006a41003a0000200041016a22004104470d000b200128020c0b0d00410041b78f08410110d0010b2601017e4100101922024280017d42ff7d5804402000200141a59208411210c901000b2002a70b800101037f230041106b22012400200141046a22022000109e01200241c99108410a10e101200141046a41c99108410a10e1012102200141046a41c99108410a10e10121032001280208200128020c10df0145044041c99108410a41a58008410e10c901000b200141106a240041ff01712003411074200241ff017141087472720bda0102027f017e230041106b220324000240410010180440200341046a22044100109e010240024002400240024020042001200210e10141ff017122040e0404010203000b2001200241b38008410d10c901000b200341046a2001200210dd01ad2105410121040c020b200341046a2001200210dd01ad200341046a2001200210dd01ad422086842105410221040c010b200341046a2001200210dd01ad2105410321040b2003280208200328020c10df01450d010b2000200537020420002004360200200341106a24000f0b2001200241a58008410e10c901000b6901047f230041106b220224002000109f012103109901210420022003100a220036020c200241003602082002200336020403402005200010e90104402004200241046a2001410310de0110cc01200228020c2100200228020821050c010b0b200241106a240020040b6201027f230041106b22042400200441086a200028020020002802042205200110ab02024020042802084101710440200120056a220120054f0d0110ac02000b2002200341e78608410f10c901000b200428020c20002001360204200441106a24000b3301017e027f02402000101a2202420158044041002002a741016b0d021a0c010b2001410141a59208411210c901000b41010b0b0d0020001085012200101b20000b6301027f230041106b22042400200441046a22052001109e0120052002200310dc01210120052002200310dd0121052004280208200428020c10df014504402002200341a58008410e10c901000b2000200536020420002001360200200441106a24000b6901047f230041106b220324002000109f012104109901210520032004100a220036020c200341003602082003200436020403402006200010e90104402005200341046a2001200210dc0110cc01200328020c2100200328020821060c010b0b200341106a240020050b8c0202037f017e230041206b220224002002410c6a22032001109e01200341c99108410a10dc012104200242003703182003200241186a410841c99108410a10e70120022903182105200341c99108410a10dd012101109901210303402001044020032002410c6a41c99108410a10dd0110cc01200141016b21010c010b0b2002280210200228021410df0145044041c99108410a41a58008410e10c901000b2000200336020c200020043602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200241206a24000b0a002000109f0110f7010b4b01017f230041106b2201240002402000100a4104470d002001410036020c200041002001410c6a410410ba011a200128020c41c58eb1a204470d0010cc0221000b200141106a240020000b1c01017f200110c701210220002001360204200020024101733602000b190041fc9a0828020020004c04400f0b419c830841121003000b1400200020014f04400f0b419c830841121003000b1400101c20004604400f0b41ae830841191003000b1900200041fc9a082802004c04400f0b418b830841111003000b0b0041fc9a08101c3602000b18002000109901220010a9012001200010ff012000101d1a0b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410171a200241106a24000b2c01017f10990121012000280208200110810220002903002001108202200028020c200110a9012001101d1a0b1e00200010c7014504402000200110a3010f0b41b488084104200110d3030b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810171a200241106a24000b0c002000101d1a2001101d1a0b7a01017f0240024002400240200028020041016b0e03010203000b4200101e0f0b109901220141011085022000280204200110ff012001101d1a0f0b109901220141021085022000280204200110ff012000280208200110ff012001101d1a0f0b109901220141031085022000280204200110ff012001101d1a0b2701017f230041106b22022400200220013a000f20002002410f6a410110171a200241106a24000b0a002000101f2001101f0b5001017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10880220012802084101710440200128020c101d1a0c010b0b200141206a24000b6301027f230041106b220224002002410b6a200110d20320022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4a01017f10990121012000280200200110a9012000280204200110a9012000280208200110a901200028020c200110a9012000280210200110a9012000280214200110ff012001101d1a0b100020004101714504402001ad101e0b0b5c01027f230041206b22012400109901210220012000100a36021c20014100360218200120003602140340200141086a200141146a10880220012802084101710440200128020c200210a9010c010b0b2002101d1a200141206a24000b1e002000290300101e2000290308101e2000290310101e2000290318101e0b270020004101710440109901220041011085022001200010ff012000101d1a0f0b4101410010200b270020004101710440109901220041011085022000200110051a2000101d1a0f0b4101410010200b20002000200120021021200010900241ff017104400f0b41e5830841301003000b14002000107e220041004a20004100486b41016a0b0a0041764200100141760b0e002000200120022003108101000b2200200020012002109402200041de840841d9840820031b4104410520031b1094020b1701017f10990122032001200210111a2000200310cc010b4c01017f230041106b22032400200341086a20012802002001280204200210a00220012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b1601017f10990122022001ad109f022000200210cc010b13001099011a20002001280200108a0110cc010b7a01037f230041106b22052400200541086a41cd8508411610ac0120052802082107200528020c22062002109902200620031099022006200441ff0171410274220241b899086a280200200241d899086a28020010940220064100109602200020063602042000200736020020002001360208200541106a24000b10001099011a20002001108a0110cc010b1b01027f10b401210041e88508410a1083012201200010051a20010b1c01017f2002200028022046047f2000200120021095070541010b450b9d0101057f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241086a2001100a2206200241106a4120108801200141002002280208200228020c10be0120002006360220200041186a2003290300370000200041106a2004290300370000200041086a200529030037000020002002290310370000200241306a24000b0c0041f28508411c109e02000b0e001099011a20002001109401000b3101017f230041106b22022400200220014100200241086a10e30320002002280200200228020410111a200241106a24000b21001099011a20022003280200108a0110cc0120002002360204200020013602000b13001099011a20002001280200109b0110cc010b9c0202077f017e230041206b22012400200029030021082000280210200028020c2000280208200141086a10a302200128020c2105200128020821061099012103280200108a0121002802001084012102200141106a220710bd012001200842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe038320084238888484843702142001200041187420004180fe03714108747220004108764180fe0371200041187672723602102001200241187420024180fe03714108747220024108764180fe03712002411876727236021c20032007411010171a280200200342002006200510221a200141206a24000b1801017f10990121012000109901360204200020013602000bae0101047f200010a502200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22022400200241ae860810a60236020c230041106b22002400200141106a2201280200210320002002410c6a36020420002001290208370208200041046a2200280200280200200328020020002802042000280208109202000b7d01037f230041206b22012400109a02109901210220002802002000280204200210d3032000280208220010bb02200210ff0120012000100a36021c20014100360218200120003602140340200141086a200141146a10880220012802084101710440200128020c200210a3010c010b0b200210061a200141206a24000b0900200041201083010b3c02017f017e230041106b220324002003200010a701200328020041014604402003290308200341106a24000f0b2001200241d98608410e10c901000b0e0020001085012200102f1a20000b0e002000108501220010381a20000b6001027f230041106b22032400200341086a200028020020002802042204200110ab02024020032802084101710440200120046a220120044f0d0110ac02000b200241e78608410f10a801000b200328020c20002001360204200341106a24000b4a01047f024002402001100a22052002490d00200220036a22062002490d0120052006490d0020012002200310042207102b4521040b20002007360204200020043602000f0b10ac02000b0600108504000b3101027f230041106b21020340200241086a20016a41003a0000200141016a22014108470d000b200020022903083700000b4b01017f2001200228020022036a200041187420004180fe03714108747220004108764180fe0371200041187672723600002003200341046a22004d0440200220003602000f0b10ac02000b15002000420053044041f6860841111003000b20000b100020002001108501220010271a20000b5301057f20014200100e22024200100e22034200100e22044200100e22054200100e220610281a200020011029360214200020063602102000200536020c2000200436020820002003360204200020023602000b5c01017f027f027f41878708200141e001460d001a2001418904470440200141800347044041002001418002470d031a418b87080c020b418f87080c010b419387080b4104102a210241010b210120002002360204200020013602000b2101017e20002001100a41084d047e20002001102c37030842010542000b3703000b07002000100a450b0c00200020002001100220000b1101017f108501220220002001100220020b0a0020002000200110020b0a0020002000200110210b1801017f200110ba022101108501220220002001103020020b0b0041752000ad100141750b09002000100a4102760b910101047f230041206b220324002001100a21042003410036021c200320043602182003410036021420032001360210024002400340200341086a200341106a1088022003280208410171450d01200328021c220641016a2201450d02200328020c2003200136021c200210bd02450d000b410121050b2000200636020420002005360200200341206a24000f0b10ac02000b0900200020011026450b4101027f230041106b21010340200141046a20026a41003a0000200241016a2202410c470d000b20002001290004370000200041086a2001410c6a2800003600000b5401017f230041106b2204240020034102742203200241027422024f0440200441086a20012002200320026b10ab02200428020c21012000200428020836020020002001360204200441106a24000f0b10ac02000b3a0020002001200241114183880842acacc2ca0242ecd4c6be064285d2fac90842a8c5a0c10a42c085f7bc05429ed69dd501429d9883651097070b1a00200020011036220136020420002001417f73411f763602000b5b01027f0240419c7f20006b2201419c7f48200041004a460440200041c0004f0d01200041fc99086a22022d00004504404175420a100141742000ad10012001417541741030200241013a00000b20010f0b10ac02000b108504000b0c00200020002001103420000b1101017f108501220220002001103320020b0c00200020002001103220000b3a00200020012002411341948808428094ebdc0342efee9dae09429fb382b00c42dba9e5940f42fb9b9df30742a7b9d0b30242ead28a591097070b5b01017f02400240024002400240200120024b200120024922036b41ff01710e020102000b200120024d0d030c020b20001084010f0b20030d002000200120026b10c20210c8020f0b10ac02000b2000200220016b10c20210c4020b1101017f108501220220002001103220020b1b0020012002200310c702210120002003360204200020013602000b0900200010314100470b0b00200020002001108f020b0b0041e68208410b1083010b0f01017f10850122004200100120000b1f0020002001107c41004c047e42000520002001107d37030842010b3703000b0a00200010a50110a9020b2601017e2000200010a60122014280808080105a0440200041a58008410e10a801000b2001a70b1500200010c701044041a78808410d1003000b20000b09002000200010a6010b3401017e027f02402000200010a6012201420158044041002001a741016b0d021a0c010b200041a59208411210a801000b41010b0b2101017f200010a5012201100a4120470440200041fc9108411010a801000b20010b2301017e2000200010a60122014280025a0440200041a58008410e10a801000b2001a70b0a00200010a50110a8020b0d0020004167103a1a4167100a0b0a0020002001ad10d9020b0f0041672001103d2000416710061a0b320020014102470440200041f59108410710db020f0b200210c7014504402000200210061a0f0b200041b48808410410db020b0e0020002001200210830110061a0b0c002000200110a20110061a0b0b0020004101410010db020b1200416c4101410010111a2000416c10061a0b0f00200020011085012200103b20000b0e00200020014167103b4167100a0b0c002000200110e20210de020b1b002000108a01220041e88808410710171a2001200010ff0120000b5602037f017e230041106b22042400200441086a20012802002205200128020822062002109701200429030821072006200210e2022003ad10d90220052001280204200210e4021a20002007370300200441106a24000b2c01017f2000200210e60222034504402001200210ee0221012000200210ed022001ad10d9020b20034101730b0c002000200110e20210d0020b0c002000200110f0024100470b3401017f230041106b2202240020022001280200200128020410e8022000200228020436020420002001360200200241106a24000baf0101047f230041106b220324002002108a012202418d8908410510171a024002402001200210e002450440410021010c010b200341046a220420012002108603200420021087032106200341046a20021087032101200341046a20021087032104200341046a200210870321052003280208200328020c10df01450d010b2000200536020c200020043602082000200136020420002006360200200341106a24000f0b200241a58008410e10a801000b3701017f230041106b22032400200341086a2000200120021097012003280208410171450440109801000b200328020c200341106a24000b5701037f230041106b22022400200128020821032001280204210420012802004101470440200241086a20042003410010eb0220022802082104200228020c21030b2000200436020020002003360204200241106a24000b3001017f230041106b22042400200441086a20012002200310e3022000200136020020002002360204200441106a24000b0c002000200110ed0210dd020b1b002000108a01220041ef8808410810171a2001200010ff0120000baf0101047f230041206b22022400200241106a200010fe020240200228021c41016a220304402002200336021c024020022802102205450440200220033602140c010b200241086a200020022802182204109201200020042002280208200310ff020b200020032004410010ff02200220033602182000418789084106200310fc02200110d802200541016a22010d010b10ac02000b200220013602102000200241106a108003200241206a240020030b3801027f230041106b220324002000200210f00222040440200341086a2001200410f1022000200210ec020b200341106a240020044100470b0c002000200110ed0210d0020be50101037f230041306b2203240002402002047f200341186a20012002109201200328021c210420032802182105200341206a200110fe02024020050440200341106a20012005109201200120052003280210200410ff020c010b200320043602240b024020040440200341086a20012004109201200120042005200328020c10ff020c010b200320053602280b2001200210fb022001200210930121042001200210fd0220032802202202450d012003200241016b3602202001200341206a10800341010541000b21012000200436020420002001360200200341306a24000f0b10ac02000b20002001108a01220141ef8808410810171a2002200110ff012000200110f3020b2801017e20002001200110d60322024280808080105a0440200141a58008410e10a801000b2002a70b0e0020002001200210f2024100470b2b0002402002450d00200110d0022002490d002000200210f6022003ad10d9020f0b41f6980841121003000b1b002000108a01220041f78808410510171a2001200010ff0120000b2901017f200110d00241016a220304402000200310f602200210d8022001200310d8020f0b10ac02000b0c002000200110f60210d0020b250002402002450d00200110d0022002490d002000200210f8020f0b41f6980841121003000b4b01017f02402001450d0020002802002202200028020810f3022001490d002000280204108a01220041f78808410510171a2001200010ff012002200010f3020f0b41f6980841121003000b1200200041fc8808410b200110fc0210dd020b19002000108a0122002001200210171a2003200010ff0120000b12002000418789084106200110fc0210dd020b9c0101057f230041106b22022400024002402001108103220110d7024504400c010b200241046a2203200110a401200320011087032106200241046a20011087032103200241046a20011087032104200241046a200110870321052002280208200228020c10df01450d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141a58008410e10a801000b2500200041fc8808410b200110fc022002109901220010ff012003200010ff01200010061a0b4e01017f200010810321022001280200220004402000109901220010ff012001280204200010ff012001280208200010ff01200128020c200010ff012002200010061a0f0b20024101410010db020b14002000108a012200418d8908410510171a20000b27002003047f200120022003109001210341010541000b210120002003360204200020013602000b25002002047f20012002109301210241010541000b210120002002360204200020013602000b2f01017f230041106b220224002002200128020010fe022000200228020436020420002001360200200241106a24000b3701017f230041206b22022400200241106a200110fe02200241086a2001200228021410830320002002290308370300200241206a24000b0e0020002001200210df0210a0010b5101017f230041106b220224002002410036020c20002002410c6a4104200110c003200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a002000108a01220041a18908410410171a20002001ad10d9020b15002000200120022003410020022003471b10f5020b2f0002402002450d00200110d0022002490d002000200210f60210d0022200200220001b0f0b41f6980841121003000b1b0020022001108a01220110a3012000108a01200110e0024100470b100020012000108a01220010a30120000b0f0020002001108c0310d7024100470bc90101047f230041206b220224000240200020012802042205108f034504402002200010fe020240200128020c22030440200241106a2204200020031090032002200128020822013602182000200320041091030c010b2002200128020822013602040b024020010440200241106a2204200020011090032002200336021c2000200120041091030c010b200220033602080b200020051092034101410010db0220022802002201450d012002200141016b360200200020021080030b200241206a24000f0b10ac02000b0d002000200110920310d702450b8d0101047f230041106b22032400200341046a220420012002109203220110a401200420011087032102200341046a20011087032104200341046a20011087032105200341046a200110870321062003280208200328020c10df01450440200141a58008410e10a801000b2000200636020c200020053602082000200436020420002002360200200341106a24000b3b002000200110920310990121002002280200200010ff012002280204200010ff012002280208200010ff01200228020c200010ff01200010061a0b1b002000108a01220041a58908410510171a2001200010ff0120000b2401017f200020012802042203108f03450440200120023602002000200320011091030b0b810101027f230041306b220324000240200020012002108f03047f4100052003411c6a20012002109d01200328021c450d01200341106a2202200341286a290200370300200320032902203703082001200341086a108e032000410c6a20022903003702002000200329030837020441010b360200200341306a24000f0b109801000b2701017f230041106b220224002002200110fe02200020012002280204109d01200241106a24000b4601017f230041106b2204240020042001200220031097032004280200450440109801000b20002004290204370200200041086a2004410c6a280200360200200441106a24000b2401017f20002001200310e602047f200041046a2002200310980341010541000b3602000b20002001108a01220141aa8908410810171a2002200110ff01200020011099030b3601027f230041106b220224002001108a012103200241086a200110d0032000200229030837020020002003360208200241106a24000b3c01027f200128020821032001280204210220012802004504402002280200200241046a280200200310e4021a0b20002003360204200020023602000b090020004201109c030b0f0041672001103c2000416710061a0b0800200010d702450b160020002002109f0310de022000200110a00310de020b1b002000108a01220041dd9808410410171a2000200110051a20000b1b002000108a01220041d79808410610171a2001200010820220000b3f01017e200010a20310d20242017c22025045044020002001109f03200210d9022000200210a003200110061a200010a203200210d90220020f0b10ac02000b14002000108a01220041e19808410610171a20000b2f01017f2001200210a003220310d702047f200310d402210341010541000b210120002003360204200020013602000b0c0020002001109f0310d2020b3801027f20002802082202200110a6032203450440200028020020002802042200200110f70220022001200010d00210a7030b20034101730b0c002000200110a9034100470b0f002000200110a8032002ad10d9020b1b002000108a01220041cc8908410610171a2001200010ff0120000b0c002000200110a80310d0020b5000024020002802002000280204108d014102470440200110ca02450d01200028020841022001108a0110da0220002001360204200041023602000f0b41e2890841141003000b41d2890841101003000b0d01017f1085012200102420000b4701017f230041106b22012400200141086a2000108701024002400240200128020841016b0e020102000b200141106a24000f0b41f6890841181003000b41e2890841141003000b4401027f10b3012104200210b30321021099012203200410990220032001109902200020033602082000411c411020021b360204200041d38a0841c38a0820021b3602000b1c0020002802004102460440200041046a0f0b41d2890841101003000b4d01017f230041106b220424002004200336020820042001200210b003220136020c2004410c6a4200200441086a10b1012000200336020c2000420037030020002001360208200441106a24000b1900200041024604402001108a010f0b41d2890841101003000b2e01017f230041106b22012400200141086a200010870120012802084101460440200010de020b200141106a24000b840401067f230041d0006b2206240020062003360208200620023602042006200436020c200010ac03024020052802000440200641186a200541086a280200360200200620052902003703100c010b200641106a2000200410ad030b2006428182848080a0c080013702202006410036021c20004101200610da02230041406a220024002006411c6a22022d000b210320022d000a210420022d0009210520022d0008210720022d0007210820022d0006210920022d0005210a20022d0004210b20022802002102200041106a41e38508410510ac012000200136023c20002000290310370234200041286a2201200041346a200641046a1095022000411c6a2001200641086a109502200041086a200028021c20002802202006410c6a10af012000200028020c22013602202000200028020836021c20012002109602200141e284084109200b109302200141eb84084107200a109302200141f2840841082009109302200141fa84084107200810930220014181850841072007109302200141888508410e2005109302200141968508410a2004109302200141a0850841122003109302200641c4006a22022001360204200220002802243602082002200028021c360200200041406b2400200641306a200641186a280200360200200620062902443703382006200628024c36023420062006290310370328200641286a10a402000b0e00200010900241ff017141014b0b330020002001200210b50310990121002003280208200010a90120032903002000108202200328020c200010b603200010061a0b22002000108a012200418b8c08410510171a2001200010bd032002200010820220000b5c01017f230041206b22022400200010bb02200110ff0120022000100a36021c20024100360218200220003602140340200241086a200241146a10880220022802084101710440200228020c200110ff010c010b0b200241206a24000b100020002001200210b803200310d9020b910101017f230041206b220324002000108a01220041a08c08410610171a2001200010bd032002280208109b01200010a30120022903002000108202200228020c220110bb02200010ff0120032001100a36021c20034100360218200320013602140340200341086a200341146a10880220032802084101710440200328020c200010ff010c010b0b200341206a240020000b0e0020002001200210b80310de020b0c002000200110bb0310d5020b39002000108a01220041988c08410810171a200110c7014504402001200010a30120000f0b4104200010ff01200041b48808410410171a20000b0f002000200110bb0310d7024100470b2701017f230041106b22022400200220003a000f20012002410f6a410110171a200241106a24000b14002000108a01220041908c08410810171a20000b8c0201037f230041206b220424002004410c6a220520012002200310b503220110a401200520052001108703200110aa0210a9022106200442003703182005200441186a4108200110c003200429031821032004410c6a20011087032102109901210503402002044020052004410c6a200110870310cc01200241016b21020c010b0b2004280210200428021410df01450440200141a58008410e10a801000b2000200536020c200020063602082000200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe03832003423888848484370300200441206a24000b4d01017f024020002802042204200028020810e90120024f0440200028020020042001200210be01200220046a220120044f0d0110ac02000b200341e78608410f10a801000b200020013602040b0e0020002001200210c2034101730b0f0020002001200210b50310d702450b820402047f017e230041e0006b220524002005200336024020052001200210b00322073602442005109901360248200510cd0236024c20051099012206360250200541386a41cc8408410d10ac01200541306a2005280238200528023c200541c4006a10ad01200541286a20052802302005280234200541406b10af01200541206a2005280228200528022c200541c8006a10a002200541186a20052802202005280224200541cc006a10af01200541106a2005280218200528021c200541d0006a10a0022005280210210820052802142101109901108a01210220042d0000200210bd0320042d0001200210bd0320042d0002200210bd032001200210cc0102402006100a044020052006100a36025c20054100360258200520063602540340200541086a200541d4006a1088022005280208410171450d022001200528020c1099020c000b000b10990122024101410010111a2001200210cc010b1023416210241091022008200110b20121021025109901210120052002100a36025c200541003602582005200236025403402005200541d4006a1088022005280200410171044020012005280204108a0110cc010c010b0b20052001100a36025c2005410036025820052001360254200541d4006a41ce8608410b10c40341ce8608410b10a70221092000200336020c2000200937030020002007360208200541e0006a24000b6001017f230041106b220324002003410b6a200010d20320032d000b4101460440200328000c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b20012002418b8308411110c901000b4101017f230041206b220224002002200036021820022001410c6a3602142002200141086a36021020022001290300370308200241086a10a202200241206a24000b4d01017f230041106b220524002005200436020820052001200210b003220136020c2005410c6a2003200541086a10b1012000200436020c2000200337030020002001360208200541106a24000b14002000108a01220041a68c08410c10171a20000b14002000108a01220041b28c08411010171a20000b1501017f10990122022000200110830110cc0120020bbd0101037f230041406a22012400200141186a200041046a2202108403200120012903183702300340200141106a200141306a109101200128021041017104402000280200200128021410ec020c010b0b200141206a200228020010fe0220012802242100034020000440200141086a20022802002000109201200128020c2002280200200010fb022002280200200010fd0221000c010b0b200141386a4200370300200142003703302002280200200141306a108003200141406b24000b6c01037f230041106b22012400200010cc032102200141086a200028020020002802042203200210ab02024020012802084101710440200220036a22022003490d01200128020c20002002360204200141106a24000f0b419f8108411941e78608410f109501000b10ac02000b5501017f230041106b220124002001410036020c20002001410c6a4104419f8108411910dd03200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b6001057f103e210241d49308410e10830110d002210303402000200346450440200041c693084106108301220110ff01200110a5012101200041cc93084108108301220410ff0120022001200410a501103f1a200041016a21000c010b0b20020b0c0041a19008410e10aa01000b5a01017f230041206b22012400200141106a200041046a108403200120012903103702180340200141086a200141186a109101200128020841017104402000280208200128020c10e1020c010b0b200010ca03200141206a24000b1901017f2001108a01210220002001360204200020023602000b2201017f2001108a01220241a18908410410171a20002002360204200020013602000b7301037f230041106b2202240002402001280204220320012802084904402003200341046a22044d0440200210ea0136020c200128020020032002410c6a410410ba011a20012004360204200041013a00002000200228020c3600010c020b10ac02000b200041003a00000b200241106a24000b12002001200210ff0120022000200110171a0b7201047f230041106b2202240002402001280204220320012802084904402003200341086a22044d0440200241086a220510ad02200128020020032005410810ba011a20012004360204200041013a0000200020022903083700010c020b10ac02000b200041003a00000b200241106a24000b820101047f230041106b22022400024020012802042203200128020849044020032003410c6a22044d0440200241046a220510be02200128020020032005410c10ba011a20012004360204200041013a000020002002290004370001200041096a2002410c6a2800003600000c020b10ac02000b200041003a00000b200241106a24000ba70102017e017f230041106b22042400200442003703082000200110df022201100a220041094f0440200241a58008410e10a801000b20014100200420006b41106a200010be0120042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b0b0020002001200110d6030b0c002000200110df0210a9020b3601027f230041106b220224002001108a012103200241086a200110d1032000200229030837020020002003360208200241106a24000b1900200010c7014504402000101d1a0f0b41b48808410410200b3d01027f230041106b220224002002410036020c20012002410c6a10c6012103200020012002410c6a10c60136020420002003360200200241106a24000b4f01017f230041206b2201240020012000100a36021c20014100360218200120003602140340200141086a200141146a10880220012802084101710440200135020c101e0c010b0b200141206a24000b4f01017f024020002802042205200028020810e90120024f0440200028020020052001200210be01200220056a220120054f0d0110ac02000b2003200441e78608410f109501000b200020013602040b3201017f230041106b22012400200141003a000f20002001410f6a410141e38708412010dd0320012d000f200141106a24000b4301017f230041106b220224002002200136020c2002200036020803402002200241086a109101200228020041017104402002350204101e0c010b0b200241106a24000b4901027f20002802082102200028020421012000280200210002400340200120024d04402001417f460d022000280200200110f802ad101e200141016a21010c010b0b0f0b10ac02000b3701017e2000418c9208410810c403418c9208410810a70222014280808080105a0440418c9208410841a58008410e10c901000b2001a70b10002000418c9208410810c403108a010baa0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200220014200532207716b41ff017122042008a746220520042001423088a741ff01714671220620056a2006410020042009a741ff0171461b22056a2005410020042001422088a741ff0171461b22056a2005410020042001a72205411876461b22066a200641002004200541107641ff0171461b22066a200641002004200541087641ff0171461b22046a200441002001501b6a220420022007200320044107716a2c000041004873200441004771716b22026b3602042000200220036a3602000b2e01017f230041106b22022400200241003a000f20002002410f6a4101200110c00320022d000f200241106a24000bf70201047f230041d0006b2202240020022000109c0202402002280220450440410021000c010b0240200241c38a084110109b02450440200241d38a08411c109b020d01410121000c020b10fd0141002100410010fc012002410036023c200241406b2002413c6a10d701200228023c10f90120022802442103200228024020022001100a36022c200241003602282002200136022410fd01200241246a220110d9012105200110cd0121012002280228200228022c10fa014101710440200510e603200110de020c020b20014102200310da020c010b10fd0141002100410010fc012002410036023c200241406b2002413c6a41ad9108410610d101200228023c10f901200228024020022001100a360238200241003602342002200136023010fd01200241306a220110d9012104200110cd0121012002280234200228023810fa014101710440200410e603200110de020c010b200241406b10bb01200141022002280248108a0110da020b200241d0006a240020000b4101027f230041106b2201240010c301220210900241ff017141024f0440200141086a10a3022000200242002001280208200128020c10401a0b200141106a24000b2a01017f2001108a01210320002002108a0136020c2000200336020820002002360204200020013602000b2901017f2002108a01220341a18908410410171a2000200336020820002002360204200020013602000b1000200010b60141bc9a08104141004a0b0c002000200110c2014101730b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b1c01027f41c59208410710c90310990122022000ad109f02200210420b1000200041a89308410a1083011099030b3d01027f230041106b22012400200141086a41b29308410a10830110d003200128020c21022000200128020836020020002002360204200141106a24000b3d01027f230041106b22012400200141086a41bc9308410a10830110d103200128020c21022000200128020836020020002002360204200141106a24000b12002000200141bc9308410a10830110e8030b5c01027f230041206b22012400109901210220012000100a36021c20014100360218200120003602140340200141086a200141146a10880220012802084101710440200128020c200210a3010c010b0b2002101d1a200141206a24000b1601017f10990122022000ad109f022001200210cc010b0b0041a99408410c1083010b0b0041dc940841161083010b0b00418e9508410b1083010b3f01037f230041106b220124004199950841121083012202108a012103200141086a200210d0032000200129030837020020002003360208200141106a24000b0b0041ab9508410b1083010b3901037f41b6950841101083012201108a0121022001108a01220341a18908410410171a2000200336020420002001360200200020023602080b0b0041c6950841101083010b3401037f41a89308410a10830121022001108a0121032002108a01210420002001200210e70320002004360214200020033602100b12002000200141b29308410a10830110e7030b3701037f41d69508411410830121022001108a0121032002108a012104200041086a2001200210e80320002004360204200020033602000b1000200041d69508411410830110d9030b0b0041ea9508410f1083010b1700200041ea9508410f108301360204200020013602000b0d002000411341f995081099070b0b0041949608410f1083010b1700200041949608410f108301360204200020013602000b09001043410010fb010b0d001043410010fb01108504000b0b0041a89908410e1003000b10001043410110fb014100101a7b101e0b4502027f017e1043410310fb01410010c80121004101101a2102410241808e08410410e501210141752002108c01200020004175100220002000200110ba0210022000101f0b800102087f017e230041206b220024001043410310fb012000410041f98d08410710e201410141f18d08410810e4014102101a10b801200028021820002802142000280210200028020c20002802082000280204200031001d2000280200200031001c101e101f1044101d1a101d1a101d1a101d1a101f10f103200041206a24000b1f01027f1043410110fb01410010c80121001085012201200010392001101f0b3a01017f230041106b220024001043410110fb01200041086a410010c80110c102200035020c420020002802084101711b101e200041106a24000b1e001043410210fb01410010f201410141c18d08410110e50110b90210450b1e001043410210fb01410010c801410141c18d08410110e50110b902101f0b3701017f230041106b220024001043410110fb012000410010c80110b901200028020041014604402000290308101e0b200041106a24000b1d01017f1043410210fb01410010c80122004101101a108c012000101f0b0e001043410010fb0110cd02101f0b12001043410110fb014100101a108b01101f0b4001027f230041106b220024001043410010fb012000427f3703082000427f37030041672000411010111a4167108501220110381a2001101f200041106a24000b13001043410110fb014100109f0110a902101f0b1801017f1043410010fb01108501220042001001200010450b12001043410110fb014100101910890110450b5102017f017e1043410210fb01027f410010c80121004101101a10af022201500440200010900241ff017141016b0c010b417520011001200041751026220041004a20004100486b0b41ff017145ad10440b3701017f230041106b220024001043410110fb012000410010f20110ce0220002802004101460440200029030810440b200041106a24000b1c01017f1043410210fb01410010f2012200410110191001200010450b2c01037f1043410110fb01410010f201220010900210850122022000104641ff0171ad42017d10442002101f0b3c01027f1043410210fb0141dd8d08410410ec01c0220041004a20004100486b41016a410110c801210041ff01714504402000200010470b200010450b18001043410210fb01410010f201410110f20110b50210450b18001043410210fb01410010f201410110c80110b50210450b18001043410210fb01410010c801410110f20110b50210450b18001043410210fb01410010f201410110c80110b60210450b18001043410210fb01410010c801410110f20110b60210450b18001043410210fb01410010f201410110f20110b60210450b1f01017f1043410210fb01410010c80122002000410110c80110022000101f0b2801037f1043410210fb01410010c8012100410110c801210110850122022000200110022002101f0b1f01017f1043410210fb01410010f20122002000410110f2011021200010450b2801037f1043410210fb01410010f2012100410110f20121011085012202200020011021200210450b2001017f1043410210fb01410010c80122002000410110c801108f022000101f0b2901037f1043410210fb01410010c8012100410110c8012101108501220220002001108f022002101f0b1f01017f1043410210fb01410010f20122002000410110f2011033200010450b2801037f1043410210fb01410010f2012100410110f20121011085012202200020011033200210450b1f01017f1043410210fb01410010c80122002000410110c80110332000101f0b18001043410210fb01410010c801410110c80110c402101f0b1f01017f1043410210fb01410010f20122002000410110f2011032200010450b2801037f1043410210fb01410010f2012100410110f20121011085012202200020011032200210450b18001043410210fb01410010c801410110c80110c502101f0b18001043410210fb01410010c801410110c80110c802101f0b1f01017f1043410210fb01410010f20122002000410110f2011048200010450b2801037f1043410210fb01410010f2012100410110f20121011085012202200020011048200210450b1f01017f1043410210fb01410010c80122002000410110c80110482000101f0b2801037f1043410210fb01410010c8012100410110c801210110850122022000200110482002101f0b2601027f1043410210fb01410010f201410110f20121011084012200200020011002200010450b2501027f1043410210fb01410010f201410110f20121011084012200200110b702200010450b2501027f1043410210fb01410010c801410110c80121011084012200200110b7022000101f0b2601027f1043410210fb01410010c801410110c801210110840122002000200110022000101f0b2601027f1043410210fb01410010f201410110f20121011084012200200020011021200010450b2501027f1043410210fb01410010f201410110f20121011084012200200110b802200010450b2501027f1043410210fb01410010c801410110c80121011084012200200110cb022000101f0b2701027f1043410210fb01410010c801410110c8012101108401220020002001108f022000101f0b2601027f1043410210fb01410010f201410110f20121011084012200200020011033200010450b2601027f1043410210fb01410010c801410110c801210110840122002000200110332000101f0b2601027f1043410210fb01410010f201410110f20121011084012200200020011032200010450b2601027f1043410210fb01410010c801410110c801210110840122002000200110322000101f0b2601027f1043410210fb01410010f201410110f20121011084012200200020011048200010450b2601027f1043410210fb01410010c801410110c801210110840122002000200110482000101f0b1f01017f1043410210fb01410010c80122002000410110c80110492000101f0b2801037f1043410210fb01410010c8012100410110c801210110850122022000200110492002101f0b1f01017f1043410210fb01410010c80122002000410110c801104a2000101f0b2801037f1043410210fb01410010c8012100410110c8012101108501220220002001104a2002101f0b1f01017f1043410210fb01410010c80122002000410110c801104b2000101f0b2801037f1043410210fb01410010c8012100410110c8012101108501220220002001104b2002101f0b2601027f1043410210fb01410010c801410110c801210110840122002000200110492000101f0b2601027f1043410210fb01410010c801410110c8012101108401220020002001104a2000101f0b2601027f1043410210fb01410010c801410110c8012101108401220020002001104b2000101f0b2501017f1043410210fb01410010c80122002000410141c18d08410110e50110352000101f0b2e01037f1043410210fb01410010c8012100410141c18d08410110e501210110850122022000200110352002101f0b1e001043410210fb01410010c801410141c18d08410110e50110c302101f0b2e01037f1043410210fb01410010c8012100410141c18d08410110e501210110850122022000200110342002101f0b2c01027f1043410210fb01410010c801410141c18d08410110e501210110840122002000200110352000101f0b2c01027f1043410210fb01410010c801410141c18d08410110e501210110840122002000200110342000101f0b0d001043410010fb01104c101e0b0d001043410010fb01104d101e0b0d001043410010fb01104e101e0b0d001043410010fb01104f101e0b1701017f1043410010fb01108501220010502000101d1a0b0d001043410010fb011051101e0b0d001043410010fb011052101e0b0d001043410010fb011053101e0b0d001043410010fb011054101e0b1701017f1043410010fb01108501220010552000101d1a0b4a02017f037e230041206b220024001043410010fb01105621011057210210582103200010593703182000200337031020002002370308200020013703002000108c02200041206a24000b2201017f1043410110fb01410041f98d08410710e2011085012200105a2000101d1a0b4a02017f037e230041206b220024001043410010fb01105b210110512102105c21032000104c3703182000200337031020002002370308200020013703002000108c02200041206a24000b0d001043410010fb01105c101e0b0d001043410010fb01105b101e0b0f001043410010fb0110b301101d1a0b0f001043410010fb0110b701101d1a0b20001043410110fb01410041f98d08410710e20110b60141bc9a08105dad101e0b1a001043410110fb01410041f98d08410710e20110e903ad10440b1701017f1043410010fb011085012200105e2000101d1a0b0f001043410010fb0110b401101d1a0b0d001043410010fb011023101e0b2b01017f1043410010fb014167419c9908410c10111a41674166103a1a4166108501220010381a2000101f0b8d0101037f230041106b220024001043410110fb01410041f98d08410710e2014167105f200041003b010c4167100a220141034f044041aa8708411c1003000b200020012000410c6a4102108801416741002000280200200028020410be0120002f010c210210990121012000200241850c713b010e20012000410e6a410210171a2001101d1a200041106a24000b13001043410110fb014100109f011060ad10440b19001043410010fb0141c78308411e41db8008411b109501000b23001043410010fb0141f0920841111083011a41b88808411a41f68008411e109501000b1c001043410010fb0141819308411310830141c08008411b10a801000b23001043410010fb014194930841141083011a41d28808411641db8008411b109501000b1d001043410010fb0141e19208410f10c9031a41d98c084118109e02000b21001043410010fb0141d39208410e10c9031a1099011a41c28c084117109401000b11001043410010fb011099011a109d02000b2601017f230041106b220024001043410010fb01200041086a41ac8d08410510ac01109d02000b1d01017f1043410110fb014100109f01108501220010611a2000101d1a0b1d01017f1043410110fb014100109f01108501220010621a2000101d1a0b1d01017f1043410110fb014100109f01108501220010631a2000101d1a0b1b001043410310fb014100109f014101109f014102109f0110641a0b1b001043410310fb014100109f014101109f014102109f0110651a0b1e001043410310fb014100109f014101109f014102109f01106645ad10440b5601017f1043410410fb014100109f014101109f014102109f01024041031018450d00410341e58d08410910e001220041ff01714105490d0041e58d08410941b38008410d10c901000b200041ff0171106745ad10440b2201017f1043410210fb014100109f014101109f01108501220010681a2000101d1a0b1b001043410310fb014100109f014101109f014102109f0110691a0b1b001043410310fb014100109f014101109f014102109f01106a1a0b1f001043410310fb01410041e18d0810ef014101109f014102109f01106b1a0b0f001043410110fb014100101a101e0b0f001043410110fb014100101910440b0f001043410110fb0110eb01ac10440b17001043410110fb01410041b78f08410110e501ad101e0b3701017e1043410110fb014100101922004280808080087d42ffffffff6f58044041b78f08410141a59208411210c901000b2000c410440b16001043410110fb0141b78f08410110ec01adc210440b1b001043410110fb01410041b78f08410110e001ad42ff0183101e0b15001043410110fb01410041b78f0810f101ad10440bdb0101037f1043410110fb01027f230041106b22002400200041046a22024100109e0141022101024002402000280208200028020c10df010d0002400240200241b78f08410110e10141ff01710e020100030b410021010240200041046a41b78f08410110e10141ff01710e020100030b410121010b2000280208200028020c10df010d0041b78f08410141a58008410e10c901000b200041106a240020010c010b41b78f08410141b38008410d10c901000b41ff01712201410247044010990122004101108502200020011085022000101d1a0f0b4101410010200b1100104310fd01410010fc01410010f9010bbe0102047f017e230041106b220324001043410110fb012003410b6a2102230041206b22002400200041086a4100109e0141042101034020014109470440200041146a20016a200041086a41e48d08410110e1013a0000200141016a21010c010b0b20002902182104200028020c200028021010df0145044041e48d08410141a58008410e10c901000b20022004a722013b0000200220044218883d0003200241026a20014110763a0000200041206a2400200241051020200341106a24000b6b01037f230041106b22002400104310fd01410010fc012000410036020c2000410c6a210210990121010340200228020041fc9a082802004804402001200241918d08410110d20110cc010c010b0b200028020c10f901200110bb02ad101e200110dc03200041106a24000bc80202057f017e230041306b22002400104310fd01410010fc0120004100360220200041206a41918d08410110ca012102200028022010f901109901210320002002100a220436021c200041003602182000200236021402400240034020012004490440200041206a2204200041146a2201418c9208410810c40310b3022000280220450d02200029032822054280808080087d42ffffffff6f580d03200110e20321021099012101200020054101200410e30320012000280200200028020410111a2003200110cc0120032002109902200028021c2104200028021821010c010b0b20002003100a36022820004100360224200020033602200340200041086a200041206a10880220002802084101710440200028020c101d1a0c010b0b200041306a24000f0b418c9208410841d98608410e10c901000b418c9208410841a59208411210c901000b3001027f230041106b220024001043410110fb01200041046a220141ea9108410210ee012001108402200041106a24000b4801017f1043410110fb01024041001018450d00410041ea9108410210e001220041ff01714103490d0041ea9108410241b38008410d10c901000b200041ff0171ad42ff0183101e0b0d001043410010fb014201101e0b3101017f1043410110fb01410041ec9108410210e601220045044041ec9108410241b38008410d10c901000b2000ad101e0b9f0101057f230041106b22002400104310fd01410110fc0110eb012000410136020c02402000410c6a2204220128020041fc9a082802004e0440410121020c010b200141ee9108410310cf0141ee9108410310d00121010b20002001360204200020023602002000280204210120002802002102200441fc9a08280200360200200028020c10f901ac104420024101714504402001ac10440b200041106a24000bb80201077f230041106b220224001043410110fb01230041206b22002400200041106a4100109e01200041046a210402400340200028021422032000280218220610df010d012000410036021c200041106a2000411c6a410441e89108410210e701200141034704402004200028021c220341187420034180fe03714108747220034108764180fe037120034118767272360200200441046a2104200141016a21010c010b0b41e89108410241949208411110c901000b200020013602002003200610df0145044041e89108410241a58008410e10c901000b20022000290200370200200241086a200041086a290200370200200041206a2400200228020041027421011099012100034020012005470440200220056a41046a280200200010ff01200541046a21050c010b0b2000101d1a200241106a24000b10001043410110fb01410010c801101f0b10001043410110fb01410010f20110450b11001043410110fb014100109f01101d1a0b17001043410110fb014100418f8d08410210e201101d1a0bdb0101047f1043410110fb01027f230041106b22002400200041046a22034100109e01024002402000280208200028020c10df014504400240024002402003418d8d08410210e10141ff01710e020201000b418d8d08410241b38008410d10c901000b41012102200041046a418d8d08410210dc0121010b2000280208200028020c10df01450d0220020d010b41feffffff0721010b200041106a240020010c010b418d8d08410241a58008410e10c901000b220141feffffff07470440109901220041011085022001200010a9012000101d1a0f0b4101410010200b930201067f230041206b220224001043410110fb01230041106b220024004100109f012104109901210320002004100a2205360208200041003602042000200436020003402001200510e9010440200010e801210110ea011a2000200141187420014180fe03714108747220014108764180fe03712001411876727236020c20032000410c6a410410171a20002802082105200028020421010c010b0b200041106a2400109901210120022003100a360214200241003602102002200336020c03402002411b6a2002410c6a10d20320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe037120004118767272200110a1010c010b0b2001101d1a200241206a24000b9d0101057f230041106b220124001043410110fb01200141086a2102230041106b22002400200041046a22034100109e01200310e80121042003418c8d08410110de0121032000280208200028020c10df01450440418c8d08410141a58008410e10c901000b2002200336020420022004360200200041106a2400200128020c2001280208109901220010a101200010a3012000101d1a200141106a24000be90101067f230041106b220224001043410110fb01200241086a2103230041106b22002400200041046a22054100109e0102402000280208200028020c10df010d000240024002402005418c8d08410110e10141ff017122010e020201000b418c8d08410141b38008410d10c901000b200041046a10e8012104410121010b2000280208200028020c10df010d00418c8d08410141a58008410e10c901000b2003200436020420032001360200200041106a2400024020022802084101710440200228020c10990122004101108502200010a1012000101d1a0c010b4101410010200b200241106a24000b2901027f1043410210fb01410041dd9808410410e201410141928d0810ef012101101d1a200110f1030bd50301067f230041206b220224001043410110fb01230041106b220124004100109f012104109901210520012004100a2200360208200141003602042001200436020003402003200010e9010440200141968d08410210dd0121001099012103034020000440200141968d08410210dd01210410ea011a2001200441187420044180fe03714108747220044108764180fe03712004411876727236020c20032001410c6a410410171a200041016b21000c010b0b10ea011a2001200341187420034180fe03714108747220034108764180fe03712003411876727236020c20052001410c6a410410171a20012802082100200128020421030c010b0b200141106a2400109901210120022005100a3602082002410036020420022005360200034002402002410c6a200210d20320022d000c4101470d00200228000d220041187420004180fe03714108747220004108764180fe0371200041187672722200100a410276200110ff0120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10d20320022d001b4101470d02200228001c220041187420004180fe03714108747220004108764180fe037120004118767272200110ff010c000b000b0b2001101d1a200241206a24000bd10201067f230041206b220224001043410110fb01027f230041206b220024004100109f012103109901210420002003100a22053602182000410036021420002003360210024003402001200510e9010440200041086a200041106a41968d08410210de0110f70110f8012000280208410171450d0210ea011a2000200028020c220141187420014180fe03714108747220014108764180fe03712001411876727236021c20042000411c6a410410171a20002802182105200028021421010c010b0b200041206a240020040c010b41968d08410241a78808410d10c901000b2100109901210120022000100a360214200241003602102002200036020c03402002411b6a2002410c6a10d20320022d001b4101460440200228001c220041187420004180fe03714108747220004108764180fe03712000411876727220011081020c010b0b2001101d1a200241206a24000b5001017f230041106b22002400104310fd01410010fc0120004100360200200041046a200041958d08410110d101200028020010f90120002802044101710440200028020c1000000b200041106a24000bea0101057f230041206b22002400104310fd01410010fc0120004100360214200041146a41918d08410110ca012103200028021410f901109901210220002003100a220436021c200041003602182000200336021402400340200120044f0d01200041146a10e1032201200041146a10e10322036a220420014f04402001200210f2032003200210f2032004200210f203200028021c2104200028021821010c010b0b10ac02000b20002002100a36021c20004100360218200020023602140340200041086a200041146a10880220002802084101710440200028020c101d1a0c010b0b200041206a24000b7901027f230041206b22002400104310fd01410010fc0120004100360214200041146a41918d08410110ca012101200028021410f90120002001100a36021c20004100360218200020013602140340200041086a200041146a10880220002802084101710440200028020c101d1a0c010b0b200041206a24000be10402087f017e230041406a22002400104310fd01410010fc0120004100360218200041186a41988d08411410ca012102200028021810f901109901210320002002100a2201360214200041003602102000200236020c4100210202400340200120024b04402000410c6a2201418c9208410810c403418c9208410810da012106200110e10321072000410c6a10e10322014100480d0220014101742101109901210403402001044020042000410c6a10e20310cc01200141016b21010c010b0b109901210520002004100a2201360220410021022000410036021c200020043602180340200120024d4504402005200041186a10e103200041186a10e10310d50120002802202101200028021c21020c010b0b200020053602202000200736021c200020063602182003200041186a10d60120002802142101200028021021020c010b0b20002003100a360214200041003602102000200336020c03400240200041186a2000410c6a10d50320002d00184101470d0020002800212101200028001d21022000280019220341187420034180fe03714108747220034108764180fe037120034118767272101d1a200241187420024180fe03714108747220024108764180fe037120024118767272ad101e200141187420014180fe03714108747220014108764180fe0371200141187672722201100a410376ad101e20002001100a3602202000410036021c200020013602180340200041376a200041186a10d40320002d00374101470d02200020002900383703282000200041286a10db0320003502042000350200101e101e0c000b000b0b200041406b24000f0b10ac02000bec0401087f230041d0006b22002400104310fd01410010fc0120004100360228200041286a2101230041106b2203240010990121020340200128020041fc9a08280200480440200141988d08411410d3012106200110d4012107200110d401210510990121040340200504402004200110d401200110d40110d501200541016b21050c010b0b2003200436020c20032007360208200320063602042002200341046a10d6010c010b0b200341106a2400200028022810f901109901210120002002100a360224200041003602202000200236021c03400240200041286a2000411c6a10d50320002d00284101470d0020002800312102200028002d21052000280029210410990121032000200241187420024180fe03714108747220024108764180fe0371200241187672722202100a3602302000410036022c20002002360228200441187420044180fe03714108747220044108764180fe03712004411876727221020340200041c7006a200041286a10d40320002d00474101460440200020002900483703382000200041386a10db032000280204210420032000280200109602200320041096020c010b0b200120021099022001200541187420054180fe03714108747220054108764180fe0371200541187672721096022001200310bb0241017610960220002003100a3602302000410036022c200020033602280340200041086a200041286a1088022000280208410171450d022001200028020c1099020c000b000b0b20002001100a3602302000410036022c200020013602280340200041106a200041286a108802200028021041017104402000280214101d1a0c010b0b200041d0006a24000b930101067f230041206b220024001043410110fb012000410041dc8f08410d10e50110b202024020002802004101710440200041086a200028020410b1020c010b10cd02210110cd02210210cd02210310cd02210410cd0221052000410036021c2000200536021820002004360214200020033602102000200236020c200020013602080b200041086a108902200041206a24000b3101027f230041206b220024001043410110fb01200041086a22014100109f01106c10b1022001108902200041206a24000b4801027f230041106b220024001043410110fb01200041086a410041dc8f08410d10e501220110b2022000280208410171047f200028020c10290520010bad101e200041106a24000b4802017f017e230041106b220024001043410110fb01200041086a410041dc8f08410d10e50110b2022000280208410171047e200028020c106dad0542000b101e200041106a24000b8e0101087f230041106b220024001043410510fb01410041dc8f08410d10e5012101410110c8012103410210c8012104410310c8012105410410c8012106200041086a200110b202024020002802084101710440200028020c21074200100e22014200100e220220072003200420052006106e0c010b10cd02210110cd0221020b20012002108602200041106a24000b7c01067f230041106b220024001043410310fb01410041dc8f08410d10e5012101410110c8012103410210c8012104200041086a200110b202024020002802084101710440200028020c21054200100e22014200100e2202200520032004106f0c010b10cd02210110cd0221020b20012002108602200041106a24000b5f01047f230041106b220024001043410310fb01410041dc8f08410d10e5012101410110c8012102410210c8012103200041086a200110b2022000280208410171047e200028020c20022003107041004aad0542000b1044200041106a24000b860101077f230041106b220024001043410410fb01410041dc8f08410d10e5012101410110c8012103410210c80121044103109f012105200041086a200110b202024020002802084101710440200028020c21064200100e22014200100e2202200620032004200510711a0c010b10cd02210110cd0221020b20012002108602200041106a24000b7401057f230041106b220024001043410210fb01410041dc8f08410d10e50121014101109f012103200041086a200110b202024020002802084101710440200028020c21044200100e22014200100e22022004200310721a0c010b10cd02210110cd0221020b20012002108602200041106a24000b6b01047f230041106b220024001043410310fb01410041dc8f08410d10e5012101410110c8012102410210c8012103200041086a200110b20202402000280208410171044020022003200028020c108501220110731a0c010b10990121010b2001101d1a200041106a24000b6b01047f230041106b220024001043410310fb01410041dc8f08410d10e5012101410110c8012102410210c8012103200041086a200110b20202402000280208410171044020022003200028020c108501220110741a0c010b10990121010b2001101d1a200041106a24000b7401057f230041106b220024001043410210fb01410041dc8f08410d10e50121014101109f012103200041086a200110b202024020002802084101710440200028020c21044200100e22014200100e22022004200310751a0c010b10cd02210110cd0221020b20012002108602200041106a24000b7401057f230041106b220024001043410210fb01410041dc8f08410d10e50121014101109f012103200041086a200110b202024020002802084101710440200028020c21044200100e22014200100e22022004200310761a0c010b10cd02210110cd0221020b20012002108602200041106a24000b7701047f230041106b220024001043410110fb01200041086a410041dc8f08410d10e50110b202024020002802084101710440200028020c21014200100e22024200100e22032001108501220110771a0c010b10cd02210210cd02210310990121010b2002101f2003101f2001101d1a200041106a24000b17001043410110fb01410041b18d08410410e50110ec030b3201027f1043410110fb01410041b98d08410810e501210103402000200146450440200010ec03200041016a21000c010b0b0bc50101047f230041206b22002400104310fd01410210fc01410010c8012101410141b58d08410410e201210220004102360214200041146a41b18d08410410ca012103200028021410f9012000200136020c2000200236021041cc9208410710c90322012000410c6a10a1022001200041106a109702109901108a01210220002003100a36021c200041003602182000200336021403402000200041146a108802200028020041017104402000280204200210a3010c010b0b200120021042200041206a24000b1f00104310b70110b30110c2014504404187980841241003000b410010fb010b1e00104341671008416710e903044041ab9808412c1003000b410010fb010b2d001043410210fb01410041958d08410110e501410141c18d08410110e50147044041c28d08410e10aa01000b0b13001043410010fb0141d08d08410d10aa01000ba203010b7f230041206b220124001043410110fb01230041406a2200240020004100109e0141042102200041206a21030340200241244704402000411c6a20026a200041919008410510e1013a0000200241016a21020c010b0b2000411a6a2202200341026a2d00003a0000200041166a2204200041296a2d00003a0000200041126a2205200041306a2d00003a0000200020002f00273b0114200020002f012e3b0110200020032f00003b0118200028023c21032000280238210620002800232107200028012a2108200028003121092000410e6a220a200041376a2d00003a0000200020002f00353b010c2000280204200028020810df0145044041919008410541a58008410e10c901000b200120002f01183b000020012007360003200120002f01143b00072001200836000a200120002f01103b000e20012009360011200120002f010c3b0015200141026a20022d00003a0000200141096a20042d00003a0000200141106a20052d00003a0000200141176a200a2d00003a00002001200336001c20012006360018200041406b2400200110a602101d1a200141206a24000b2801017f1043410110fb014100109f012200100a412047044041fc910841101003000b2000101d1a0b0f001043410010fb01109901101d1a0b1f01017f1043410210fb014100109f0122004101109f0110051a2000101d1a0b5101017f230041106b220024001043410310fb01200041086a4100109f01410141f88f08411110e501410241ef8f08410910e50110ab0220002802084101710440200028020c101d1a0b200041106a24000b2701027f1043410110fb01410041899008410810e50121001085012201200010781a2001101d1a0b19001043410210fb014100109f014101109f0110c201ad10440b13001043410010fb0141b8810810a602101d1a0b25001043410210fb01410041ec8f08410310e201410141e98f08410310e20110c201ad10440b0f001043410010fb01109901108b020b2501017f1043410210fb01410041968d08410210f4012200410110c80110cc012000108b020bf70102067f017e230041106b220124001043410210fb0102400240410041a18f08410310f40122034101419e8f08410310f401220410c2010d002003100a22052004100a470d010340200220054f0d01200110ea01220036020820032002200141086a410410be012001200036020c200420022001410c6a410410be012001280208220041187420004180fe03714108747220004108764180fe037120004118767272200128020c220041187420004180fe03714108747220004108764180fe03712000411876727210bd02450d022002200241046a22004d0440200021020c010b0b10ac02000b420121060b20061044200141106a24000bfb0101067f230041206b220124001043410210fb01230041106b220024004100109f012104109901210320002004100a220536020c200041003602082000200436020403402002200510e90104402003200041046a412041968d08410210f00110cc01200028020c2105200028020821020c010b0b200041106a24002003410141d68e08410410e20110cc01109901210220012003100a360214200141003602102001200336020c03402001411b6a2001410c6a10d20320012d001b41014604402002200128001c220041187420004180fe03714108747220004108764180fe03712000411876727210051a0c010b0b2002101d1a200141206a24000b9b0101047f230041106b220124001043410310fb01410041968d08410210f4012102410141858f08410510e5012103410210c80121000240200341808080800449044010ea011a2001200041187420004180fe03714108747220004108764180fe03712000411876727236020c2002200341027441042001410c6a10790d012002108b02200141106a24000f0b10ac02000b41a48f08411310aa01000ba50101057f230041106b220024001043410210fb01410041968d08410210f4012101410141858f08410510e50122022001100a41027622044904400240027f20024504401099010c010b200041086a20014100200210bf022000280208410171450d01200028020c0b210320002001200241016a200410bf022000280200410171450d002003200028020410051a2003108b02200041106a24000f0b0b41c68708411d1003000b6201037f230041106b220024001043410210fb01200041086a410041968d08410210f401410110c80110bc02024020002802084101710440200028020c10990122014101108502200110ff012001101d1a0c010b4101410010200b200041106a24000b3e01017f230041106b220024001043410210fb01200041086a410041968d08410210f401410110c80110bc022000280208410047ad1044200041106a24000baf0101047f230041106b220224001043410210fb01410041968d08410210f4012100410141858f08410510e5012101200210ea0136020c02400240200141ffffffff034b0d002001410274220141046a22032001490d002000100a2003490d01200020012002410c6a410410be01200228020c220041187420004180fe03714108747220004108764180fe037120004118767272108401101f200241106a24000f0b10ac02000b41c68708411d1003000b14001043410110fb014100109f0110a501101d1a0b16001043410210fb014100109f014101109f0110061a0b25001043410210fb01410041f98d08410710e2014101109f014167103b4167108a01101d1a0b18001043410010fb0141e29308410d10830110a501101d1a0b17001043410010fb0141809408410810830110cf02101f0b17001043410010fb0141f99308410710830110d60210450b17001043410010fb0141969408410310830110d202101e0b18001043410010fb0141f49308410510830110d002ad101e0b4a01027f230041106b220024001043410010fb012000419394084103108301220110a50110b3022000280200450440200141d98608410e10a801000b20002903081044200041106a24000b18001043410010fb0141999408410410830110d302ad10440b18001043410010fb0141dd9808410410830110d402101d1a0ba60101057f230041106b220024001043410010fb01200041046a220341b88f084108108301220110a401024002402000280208200028020c10df010d00410121020240024002402003200110e40341ff01710e020201000b200141b38008410d10a801000b41002102200041046a4120200110aa0221040b2000280208200028020c10df01450d0120020d002004101d1a0b200041106a24000f0b200141a58008410e10a801000b19001043410010fb0141b88f08410810830110d70245ad10440b18001043410010fb0141889408410b10830110d002ad101e0b15001043410010fb0141889408410b10830110de020be50102037f017e230041106b220024001043410010fb01024041ef93084105108301220110d7020440200041046a2202200110a401024002400240024002402002200110e40341ff017122020e0404010203000b200141b38008410d10a801000b200041046a2001108703ad2103410121020c020b200041046a2001108703ad200041046a2001108703ad422086842103410221020c010b200041046a2001108703ad2103410321020b2000280208200028020c10df01450d010b2000200337020820002002360204200041046a108402200041106a24000f0b200141a58008410e10a801000b2f01027f1043410110fb01410041dd9808410410e2012100419d940841041083012201200010051a200110cf02101f0b4301037f1043410210fb014100418f8f08410510e20121014101418a8f08410510e201210241a1940841041083012200200110051a2000200210051a200010cf02101f0b2c01017f1043410110fb014100418c8d08410110e50141a594084104108301220010ff01200010d302ad10440b2701017f1043410210fb01410041f98d08410710e2014101109f011085012200103b2000101d1a0b2001017f1043410110fb014100109f01210041e29308410d108301200010061a0b1a001043410110fb01410010c801418094084108108301109a010b2001017f1043410110fb01410010f201210041f993084107108301200010dc020b2701017f1043410110fb01410041b78f08410110e501210041f4930841051083012000ad10d9020b1f01017f1043410110fb0110eb01210041d9940841031083012000ac109c030b1f01017e1043410110fb014100101a2100419694084103108301200010d9020b1f01017e1043410110fb014100101921004193940841031083012000109c030b2501017f1043410110fb01410041b78f0810f10121004199940841041083012000ad109c030b2601017f1043410110fb01410041ee8d08410310e201210041dd98084104108301200010061a0bae0101047f230041106b22002400104310fd01410010fc012000410036020c02402000410c6a220228020041fc9a082802004e0440410121010c010b200241b88f08410810d30121020b20002002360204200020013602002000280204210220002802002101200028020c10f90141b88f084108108301210302402001410171450440109901220141011085022001200210051a2003200110061a0c010b20034101410010db020b200041106a24000bb90101037f230041106b220124001043410110fb01200141046a41ee8d08410310ee0141ef93084105108301210202400240024002400240200128020441016b0e03010203000b2002420010d9020c030b109901220041011085022001280208200010ff012002200010061a0c020b109901220041021085022001280208200010ff01200128020c200010ff012002200010061a0c010b109901220041031085022001280208200010ff012002200010061a0b200141106a24000b3201037f1043410210fb01410041dd9808410410e2012100410110c801419d940841041083012202200010051a2002109a010b4601047f1043410310fb014100418f8f08410510e20121014101418a8f08410510e2012102410210c80141a1940841041083012200200110051a2000200210051a2000109a010b3701027f1043410210fb014100418c8d08410110e501410141c18d0810f101210141a594084104108301220010ff0120002001ad109c030b1f01017e1043410110fb0141001019210041b5940841091083012000109c030b1a001043410110fb01410010c80141cc9408410d108301109a010b2001017f1043410110fb014100109f01210041be9408410e108301200010061a0b4201017f1043410110fb01410041d89108411010e4012100416741d88108411210111a4167200010051a418e860810a60241674166103b416610b402410173ad10440b11001043410010fb0110810410cf02101f0b14001043410110fb01410010c801108104109a010b2d02017e027f1043410210fb014100101a2100410110c801108104220210c803200010d902200210c703109a010b4502017f027e1043410010fb011081042100104c2201200010c80310d20222025a0440200010c7034167103a1a2000416710061a200010c70310de020b200120025aad10440b14001043410010fb0110810410c80310d202101e0b14001043410010fb0110810410c70310cf02101f0b3d01017f230041106b220024001043410110fb01200041086a410041f98d08410710e2011082042000280208200028020c10d803101f200041106a24000b4d01037f230041106b220024001043410110fb01200041086a410041f98d08410710e2011082042000280208200028020c108a01220241b28c08411010171a200210d703101e200041106a24000b4d01037f230041106b220024001043410110fb01200041086a410041f98d08410710e2011082042000280208200028020c108a01220241a68c08410c10171a200210d803101f200041106a24000b2201017f1043410110fb01410041f98d08410710e201210010f703200010a403101e0b3502017f017e1043410110fb01410041f98d08410710e201210010f703200010a403220150044041e79808410f1003000b2001101e0b3d02017f017e230041106b220024001043410110fb014100101a2101200041086a10f703200110a3032000280208200028020c108e02200041106a24000b2201017e1043410110fb014100101a210010f703200010a00310d702410047ad10440b3901027f1043410110fb01410041f98d08410710e201210010f7032201200010a4035045044041b28908411a1003000b2001200010a103101e0b3902027f017e1043410110fb01410041f98d08410710e201210010f70322012000109f0310d202220250047e2001200010a1030520020b101e0b5502037f017e230041106b220024001043410110fb014100101a2103200041086a10f7032201200310a3032000280208410171047f20012003200028020c2202109e0341010541000b2002108e02200041106a24000b3802027f017e1043410110fb01410041f98d08410710e201210010f7032201200010a403220250450440200120022000109e030b2002101e0b5b01027f230041306b220024001043410010fb01200010f5032201360200200041046a20011095032000200036021803402000411c6a200041046a109c01200028021c4101474504402000350220101e0c010b0b200041306a24000bbf0101077f230041206b220024001043410110fb01410041d68e08410410e5012104200010f503220210fe02200010fe052101024020002802002205450440200020013602040c010b200041106a2206200220002802082203109003200020013602182002200320061091030b2000200336021c20004100360218200020013602142000200436021020022001200041106a10910320002001360208200541016a220145044010ac02000b2000200136020020022000108003200041206a24000b1f01017f200028020c41016a220104402000200136020c20010f0b10ac02000bbf0101077f230041206b220024001043410110fb01410041d68e08410410e5012104200010f503220210fe02200010fe052101024020002802002205450440200020013602080c010b200041106a22062002200028020422031090032000200136021c2002200320061091030b2000410036021c20002003360218200020013602142000200436021020022001200041106a10910320002001360204200541016a220145044010ac02000b2000200136020020022000108003200041206a24000b4701027f230041306b220024001043410010fb01200041206a10f503220110fe022000410c6a20012000280224109403200028020c4101732000280210108a02200041306a24000b4701027f230041306b220024001043410010fb01200041206a10f503220110fe022000410c6a20012000280228109403200028020c4101732000280210108a02200041306a24000b3601017f230041206b220024001043410010fb012000410c6a10f503109503200028020c4101732000280210108a02200041206a24000b4701027f230041306b220024001043410010fb01200041206a10f503220110fe022000410c6a20012000280228109d01200028020c4101732000280210108a02200041306a24000bd80201077f230041d0006b220024001043410210fb01410041c39008410710e5012101410141ca9008410710e50121052000410c6a10f5032001109d010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110f503220220002802242204108f030d001a200041306a2201200210fe02200110fe052101200028022821032000200136022820022004200041206a109103024020030440200041406b2206200220031090032000200136024c2002200320061091030c010b200020013602380b2000200436024c20002003360248200020013602442000200536024020022001200041406b109103200028023041016a2201450d01200020013602302002200041306a108003200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b2001108a02200041d0006a24000f0b10ac02000bd80201077f230041d0006b220024001043410210fb01410041c39008410710e5012101410141ca9008410710e50121052000410c6a10f5032001109d010240027f4101200028020c450d001a200041286a200041186a29020037030020002000290210370320410110f503220220002802242204108f030d001a200041306a2201200210fe02200110fe052101200028022c21032000200136022c20022004200041206a109103024020030440200041406b220620022003109003200020013602482002200320061091030c010b200020013602340b2000200336024c20002004360248200020013602442000200536024020022001200041406b109103200028023041016a2201450d01200020013602302002200041306a108003200041106a220241086a200041c8006a290200370200200220002902403702002000280210210141000b2001108a02200041d0006a24000f0b10ac02000b4801027f230041206b220024001043410110fb01410041c39008410710e50121012000410c6a10f5032001109d01200028020c044010f503200041106a108e030b200041206a24000b4501027f230041206b220024001043410110fb01410041c39008410710e50121012000410c6a10f5032001109403200028020c4101732000280210108a02200041206a24000b7601037f230041306b220024001043410210fb01410041c39008410710e5012101410141ba9008410910e50121022000411c6a10f5032001109d01200028021c450440109801000b200041106a200041286a2902003703002000200029022037030810f503200041086a2002109303200041306a24000b7501047f230041306b220024001043410210fb01410041c39008410710e5012101410141ba9008410910e50121022000410c6a10f50322032001109d01200028020c4101460440200041286a200041186a290200370300200020002902103703202003200041206a20021093030b200041306a24000b6a01037f230041206b220024001043410110fb01410041c39008410710e501210110990121022000410c6a10f5032001109d010340200028020c0440200028021821012000280210200210f2032000410c6a10f5032001109d010c010b0b2002108702200041206a24000b7401047f230041306b220024001043410110fb01410041c39008410710e50121021099012101200010f5032203360218200020032002109d012000200041186a36021403402000411c6a2000109c01200028021c4101474504402000280220200110f2030c010b0b2001108702200041306a24000b3a01017f230041106b220024001043410010fb01200010f30336020c20002000410c6a1084032000280200200028020410df03200041106a24000b2101017f1043410110fb01410041d68e08410410e501210010f303200010ee021a0b4401027f230041206b220024001043410010fb01200041106a10f303220110fe02200041086a2001200028021410f1022000280208200028020c108d02200041206a24000b4301017f230041106b220024001043410010fb01200041086a10f303108503200028020841017145044041c08f08410c10aa01000b200035020c101e200041106a24000b6e02027f017e230041306b220024001043410010fb012000410c6a220110ed032000200041106a10840320002000290300370218200020013602200340200041246a200041186a1096012000280224410147450440200035022c2000350228101e101e0c010b0b200041306a24000b6b01027f230041306b220024001043410010fb0110990121012000411c6a10ed03200041106a200041206a108403200020002903103702280340200041086a200041286a109101200028020841017104402001200028020c10cc010c010b0b200110dc03200041306a24000ba60101037f230041306b220024001043410010fb011099012102200041186a220110ed03200041106a2000411c6a108403200020002903103702242000200136022c024003400240200041086a200041246a1091012000280208410171450d002000200028022c2201280200200141086a280200200028020c1097012000280200410171450d022002200028020410cc010c010b0b200210dc03200041306a24000f0b109801000b5a01047f230041206b220024001043410210fb01410041d68e08410410e5012101410141da8e08410510e5012102200041146a220310ed03200041086a20032001200210e3022000280208200028020c108d02200041206a24000b3d01027f230041106b220024001043410110fb01410041d68e08410410e5012101200041046a10ed032000280204200110e602ad1044200041106a24000b5101027f230041206b220024001043410110fb01410041d68e08410410e5012101200041146a10ed03200041086a2000280214200028021c20011097012000280208200028020c108d02200041206a24000b6101047f230041106b220024001043410110fb01410041d68e08410410e5012102200041046a10ed0320002802042000280208200210ef02047f200028020c2201200210e50221032001200210e10241010541000b2003108d02200041106a24000ba90101057f230041306b220024001043410210fb01410041d68e08410410e5012101410141e88e08410910e501200041246a220310ed032000280224200110e602210420002001360220200020043602182000200336021c200041106a200041186a10ea0220002802102201280200200141086a2802002000280214220410e90222036a2202200349044010ac02000b200041086a20012004200210e3022002ad101e200041306a24000b810101047f230041206b220024001043410210fb01410041d68e08410410e5012101410141f18e08410710e5012102200041146a220310ed032000280214200110e602047f200305200041086a200041146a2001200210eb02200028020c210120002802080b2202280200200241086a280200200110e902ad101e200041206a24000bbf0101067f230041206b220024001043410310fb01410041d68e08410410e5012101410141e88e08410910e5012102410241df8e08410910e5012103200041146a220410ed030240027f20002802142205200110e602044020022005200028021c200110e90222026a22032002490d02200020042001200310e30220040c010b200041086a200041146a2001200310eb02200028020c210120002802080b2202280200200241086a280200200110e902ad101e200041206a24000f0b10ac02000b950101047f230041206b220024001043410210fb01410041d68e08410410e5012101410141f88e08410d10e5012102200041146a220310ed0302402000280214200110e602047f200305200120026a22022001490d01200041086a200041146a2001200210eb02200028020c210120002802080b2202280200200241086a280200200110e902ad101e200041206a24000f0b10ac02000ba60201077f230041e0006b220024001043410010fb011099012102200041206a220110f603200041186a200041246a1084032000200029031837022c200020013602342000413c6a2104200041d4006a2103024003400240200041106a2000412c6a1091012000280210410171450d00200041d0006a20002802342201280200200141086a280200200028021422011097032000280250450d02200041406b200341086a28020036020020002003290200370338200041086a2004108403200020002903083702442000200041386a36024c0340200041d0006a200041c4006a10960120002802504101470d02200028025820002802542001200210f203200210f203200210f2030c000b000b0b2002108702200041e0006a24000f0b41948108410b10aa01000b4201027f230041106b220024001043410110fb01410041d68e08410410e5012101200041046a10f60320002802042000280208200110e402ad1044200041106a24000b3d01027f230041106b220024001043410110fb01410041d68e08410410e5012101200041046a10f6032000280204200110e602ad1044200041106a24000bd30101037f230041d0006b220024001043410110fb01410041d68e08410410e50121012000410c6a10f603200041186a200028020c2000280214200110970320002802184101460440200041306a200041246a2802003602002000200029021c37032810990121012000200041286a220241047210840320002000290300370238200020023602400340200041c4006a200041386a1096012000280244410147450440200028024c2000280248200110f203200110f2030c010b0b2001108702200041d0006a24000f0b41d69008410b10aa01000b8f0101047f230041306b220024001043410310fb01410041d68e08410410e5012101410141e18d08410310e5012102410241da8e08410510e5012103200041146a10f603200041206a2000280214200028021c2001109703200028022045044041d69008410b10aa01000b200041086a200041246a2002200310e3022000280208200028020c108d02200041306a24000b850101037f230041306b220024001043410210fb01410041d68e08410410e5012101410141e18d08410310e5012102200041146a10f603200041206a2000280214200028021c2001109703200028022045044041d69008410b10aa01000b200041086a2000280224200028022c20021097012000280208200028020c108d02200041306a24000b5f01047f230041206b220024001043410110fb01410041d68e08410410e5012101200041086a10f6032000280208200028020c200110ef0222020440200041146a220320002802102001109803200310cf030b2002ad1044200041206a24000bc60101037f230041d0006b220024001043410010fb01200041186a220110f603200041106a2000411c6a108403200020002903103702242000200136022c200041c4006a2101024003400240200041086a200041246a1091012000280208410171450d00200041406b200028022c2202280200200241086a280200200028020c1097032000280240450d02200041386a200141086a28020036020020002001290200370330200041306a10cf030c010b0b200041186a10ca03200041d0006a24000f0b109801000bfc0101067f230041306b220024001043410310fb01410041d68e08410410e5012101410141e18d08410310e5012103410241e88e08410910e501200041246a220510f6032000280224200110e602210220002001360220200020023602182000200536021c200041106a200041186a2201109a03200120002802102202280200200241086a28020020002802141096032000280218200310e60221022000200336022c2000200236022420002001360228200041086a200510ea0220002802082201280200200141086a280200200028020c220310e90222026a2204200249044010ac02000b200020012003200410e3022004ad101e200041306a24000bf20101077f230041306b220024001043410410fb01410041d68e08410410e5012102410141e18d08410310e5012103410241da8e08410510e5012104410341d19008410510e5012105200041186a10f60320002802182206200210e6020440200041246a2201200620002802202002109603200041106a20012003200410e302410121010b2000200236022c200020013602242000200041186a360228200041086a200041246a2201109a03200120002802082202280200200241086a280200200028020c10960320002000280224200028022c20031097012000280204200520002802004101711bad101e200041306a24000bb30101067f230041306b220024001043410310fb01410041d68e08410410e5012101410141e18d08410310e5012103410241da8e08410510e5012104200041186a220210f6032000280218200110e60221052000200136022c2000200536022420002002360228200041106a200041246a2202109a03200220002802102201280200200141086a2802002000280214109603200041086a20022003200410e3022000280208200028020c108d02200041306a24000b4701017f230041206b220024001043410010fb01200041106a10ee0320002000290310370218200041086a2000411c6a1084032000280208200028020c10df03200041206a24000b4201027f230041106b220024001043410110fb01410041d68e08410410e5012101200041086a10ee032000280208200028020c200110e402ad1044200041106a24000b3d01027f230041106b220024001043410110fb01410041d68e08410410e5012101200041086a10ee032000280208200110e602ad1044200041106a24000b4201027f230041106b220024001043410110fb01410041d68e08410410e5012101200041086a10ee032000280208200028020c200110ef02ad1044200041106a24000b3f01017f230041106b220024001043410010fb01200041086a10ee032000200028020c1085032000350204420020002802004101711b101e200041106a24000b5001027f230041206b220024001043410010fb01200041086a10ee03200041106a200028020c220110fe022000200120002802181083032000350204420020002802004101711b101e200041206a24000b7601037f230041206b220024001043410110fb01410041d68e08410410e5012101200041186a10ee03200028021c21022000280218200110f0022201047e200041106a20022001109201200041086a20022000280214108303200035020c420020002802084101711b0542000b101e200041206a24000b7601037f230041206b220024001043410110fb01410041d68e08410410e5012101200041186a10ee03200028021c21022000280218200110f0022201047e200041106a20022001109201200041086a20022000280210108303200035020c420020002802084101711b0542000b101e200041206a24000b910101047f230041206b220024001043410110fb01410041d68e08410410e5012102200041086a10ee032000200028020c36021420002000280208220336021020002003200210f00236021c2000200041146a360218024003402000200041186a1091012000280200410171450d012001417f470440200141016a21010c010b0b10ac02000b2001ad101e200041206a24000b11001043410010fb0110f40310d60210450b2401027f1043410110fb01410010f201210010f4032201200110d602200010b50210dc020b2801037f1043410110fb01410010f201210010f403220110d6022202200010b7022001200210dc020b3e01037f1043410110fb01410010f201210010f403220210d602220120001026410048044041cc8f08411010aa01000b2001200010b8022002200110dc020b2401027f1043410110fb01410010f201210010f4032201109d0304402001200010dc020b0b0f001043410010fb0110f40310de020b12001043410010fb0110f403109d03ad10440b24001043410110fb01410041f98d08410710e20141dc9408411610830110e00245ad10440b12001043410010fb0110f40310d702ad101e0b3201027f1043410210fb01410041e18d08410310e5014101109f01210141f29408411c108301220010ff012000200110061a0b5901027f230041206b220024001043410010fb01200010ef032000200028020422013602102000200028020036020c2000200110d00236021c2000410136021820002000410c6a360214200041146a10e003200041206a24000b3f01027f230041106b220024001043410110fb01410041d68e08410410e5012101200041086a10ef032000280208200028020c200110f702200041106a24000b4201027f230041106b220024001043410110fb01410041858f08410510e5012101200041086a10ef032000280208200028020c200110f902ad101e200041106a24000b4b01047f230041106b220024001043410210fb01410041f98d08410710e2012101410141858f08410510e5012102200041046a2203200110f0032003200210fa02ad101e200041106a24000b2e01017f230041106b220024001043410010fb01200041086a10ef03200028020c10d002ad101e200041106a24000b3e01017f230041106b220024001043410110fb01200041046a410041f98d08410710e20110f0032000280204200028020c10f302ad101e200041106a24000bc50102047f027e230041106b220224001043410310fb01410041f18d08410810e40121004101101a21042002410210f501024002401082012201200010bc03450440200110be0310d502220341ff017141ff01460d012001200010bb03200341016a2200ad42ff0183220510d902200110be03200510d9020c020b2001200010ba0321000c010b41ef8a0841d7001003000b20012000200410c103450440200120002004200210b403200120002002200410b703200241106a24000f0b41c68b0841171003000b9c0102047f017e230041206b220224001043410310fb01410041f18d08410810e40121004101101a21042002410210f50102401082012201200010bc03044020012001200010ba032200200410c103450d01200241106a220320012000200410bf0320012000200310b903200120002004200210b403200120002002200410b703200241206a24000f0b41dd8b0841101003000b41ed8b08411e1003000b990102037f017e230041106b220124001043410210fb01410041f18d08410810e40121024101101a210302401082012200200210bc03044020002000200210ba032202200310c103450d01200120002002200310bf0310990121002001280208200010a90120012903002000108202200128020c200010b6032000101d1a200141106a24000f0b41dd8b0841101003000b41ed8b08411e1003000ba30102047f017e230041406a220024001043410210fb01410041f18d08410810e4012101200041306a410110f501200041106a200041386a2903003703002000200029033022043702202000200437030802401082012202200110bc03044020022002200110ba032201200041086a220310b80310d702450d0120022001200310b80310d202101e200041406b24000f0b41dd8b0841101003000b41ed8b08411e1003000b7302037f017e230041106b220224001043410210fb01410041f18d08410810e40121004101101a210302401082012201200010bc03450d0020012001200010ba032200200310c103450d00200220012000200310bf0320012000200310b50310de0220012000200210b9030b200241106a24000b4102027f017e1043410210fb01410041f18d08410810e40121004101101a21021082012201200010bc03047e20012001200010ba03200210c203ad0542010b10440b1d01017f1043410110fb014100109f01210010fe032000108c03109b030b1d01017f1043410110fb014100109f01210010fe032000108c0310de020b1d01017f1043410110fb014100109f01210010fe032000108d03ad10440b4b01037f230041106b220024001043410210fb01410041f98d08410710e20121014101109f012102200041086a200110ff032000280208200028020c2002108b03ad1044200041106a24000b2701017f1043410110fb014100109f01210010fe032000108d034504404188990841141003000b0b5501037f230041106b220024001043410210fb01410041f98d08410710e20121014101109f012102200041086a200110ff032000280208200028020c2002108b034504404188990841141003000b200041106a24000b5601057f230041206b2200240010c4011a410210fb014100109f012102410110c801210310c401200041086a108004108401210110990121042000410036021420002802102001200420022003200041146a10b203000b7e01077f230041206b2200240010c4011a410210fb014100109f012104410110c801210210c401200210b30321031099012105200041086a108004108401210110990121062000200536021c2000411f411b20031b3602182000418e910841f3900820031b36021420002802102001200620042002200041146a10b203000bd70101067f230041206b2201240010c4011a410110fb014100109f01210410c401200141086a108004108401210210990121052001410036021420012802102103230041406a22002400200310ac030240200141146a22012802000440200041106a200141086a280200360200200020012902003703080c010b200041086a200310cd0210ad030b20034101200010da02200041346a2002200520044100109802200041206a200041106a280200360200200020002902343703282000200028023c36022420002000290308370318200041186a10a402000b9f04010a7f230041206b220024001043410010fb0120004181043b00061099012102200041086a22011080042000200236021c20004112360218200041e19008360214200041066a2102200041146a2106230041106b22002400200010ab0336020c230041206b220424002001280208109d03044041a38a0841201003000b200110ae032101200241026a2108230041106b22052400200541086a41b28508410e10ac0120052005280208200528020c200110ad0120052802002109200528020422072000410c6a10970203400240024002400240024002400240024002400240024002400240200820022201470440200141016a210241a3960821004111210320012d000041016b0e0c0c0102030405060708090a0b0e0b2004200936020020042007360204200541106a24000c0c0b41b4960821000c0a0b41c5960821000c090b41d696082100411621030c080b41ec96082100410f21030c070b41fb96082100411b21030c060b4196970821000c050b41a797082100411321030c040b41ba97082100411721030c030b41d197082100411521030c020b41e6970821000c010b41f797082100411021030b10990122012000200310111a2007200110cc010c010b0b2004411c6a200641086a2802003602002004200429030037020c200420062902003702142004410c6a220241086a22012802000440200110a5020b200228020021012002280204210241ae860810a60210910220012002109202000b4001027f230041206b220024001043410110fb01410010c8012101200041146a108004200020002802142000280218200110af032000108002200041206a24000ba20101037f230041d0006b220024001043410210fb01410041b39108410210e2012101410110c8012102200020013602182000411c6a108004200041286a200028021c2000280220200210af032000200041346a360244200042003703382000200041186a3602482000200041306a2201360240200041386a10a202200041106a200129030037030020002000290328370308200041086a108002200041d0006a24000b3b01027f230041106b220024001043410110fb012000410010c801360200200041046a2201108004200110ae034200200010ab01200041106a24000b3701027f230041106b220024001043410010fb01200041046a220110800410ab03200110ae03280200420010b501101f200041106a24000b4401027f230041206b22002400410010fb01200010bb01200041146a2201108004200110ae03280200200028020810ea030440418e8a0841151003000b200041206a24000bb20101047f230041e0006b22002400410010fb0110bc012101200041086a2202108004200210ae03210220002001100a36021c2000410036021820002001360214200041286a2103200041d0006a210102400340200041cf006a200041146a10c10120002d004f4101470d01200041406b200141086a290000370300200020012900003703382003200041386a10bf012002280200200028023010ea03450d000b418e8a0841151003000b200041e0006a24000b4a01017f230041106b220024001043410010fb01200041046a1080040240200028020c109d034504402000280204200028020810b00310da030c010b109901101d1a0b200041106a24000b8f0201087f230041206b2200240010c4011a410110fb014100109f01210610c401200041086a108601108401210210990121072000410036021420002802102103200041146a2101230041306b2200240020002003108701024002400240200028020041016b0e020001020b41f6890841181003000b41e2890841141003000b027f2001280200220504402001280208210420012802040c010b10b3012101109901220420011099022004200310990241c38a08210541100b210120034101200010da02200041246a200220072006410410980220002004360214200020013602102000200536020c200020002802283602202000200028022436021c2000200028022c3602182000410c6a10a402000b7001027f230041106b220024001043410110fb01410041f18d08410810e4012101200041046a108601024020002802042000280208108d014102470440200110ca02450d01200028020c41022001108a0110da02200041106a24000f0b41e2890841141003000b41d2890841101003000b5b01037f230041206b220024001043410210fb01410010c80121012000410110ed0122024110763a0012200020023b0110200041146a1086012000200028021420002802182001200041106a10c3032000108002200041206a24000b9b0101047f230041406a220024001043410310fb01410041b39108410210e2012101410110c80121022000410210ed0122034110763a0022200020033b01202000200136021c200041246a108601200041306a2201200028022420002802282002200041206a10c3032000411c6a200110c503200041106a200041386a29030037030020002000290330370308200041086a108002200041406b24000b4a02027f017e230041206b220024001043410210fb014100101a2102410110c8012101200041146a1086012000200028021420002802182002200110c6032000108002200041206a24000b870102037f017e230041306b220024001043410310fb01410041b39108410210e20121014101101a2103410210c801210220002001360210200041146a108601200041206a2201200028021420002802182003200210c603200041106a200110c503200041086a200041286a290300370300200020002903203703002000108002200041306a24000b4302027f017e230041106b220024001043410210fb014100101a21022000410110c801360200200041046a2201108601200110ae032002200010ab01200041106a24000b3f02027f017e230041106b220024001043410110fb014100101a2102200041046a220110860110ab03200110ae03280200200210b501101f200041106a24000bbd0102057f017e230041406a220024001043410110fb014100101a2105200041086a2201108601200041146a10ab03200110ae03280200200510b80120002000280220108a012201100a36023c2000410036023820002001360234200041346a10de032102200041346a10de032103200041346a10de0321042000280238200028023c10df0145044041e38708412041a58008410e109501000b1099012201200210850220012003108502200120041085022001101d1a200041406b24000b4901017f230041106b220024001043410010fb01200041046a1086010240200028020c10d70204402000280204200028020810b00310da030c010b109901101d1a0b200041106a24000b4e01027f230041106b220024001043410110fb01410041d59108410310e5012101200041046a10f803200028020810d002044041928908410f1003000b200028020c2001108803200041106a24000b4201027f230041106b220024001043410110fb01410041858f08410510e5012101200041046a10f803200028020420002802082001108a03ad101e200041106a24000b9a0101077f230041106b220024001043410110fb01410041858f08410510e5012103200041046a10f8032000280208220210d00221012000280204220420022001108a032105024020012003460440200521060c010b200420022003108a03210620042002200320051089030b200420022001410010f502200145044010ac02000b200028020c200141016b1088032006ad101e200041106a24000b4e01037f230041106b220024001043410210fb01410041858f08410510e5012101410141d39108410210e5012102200041046a10f8032000280204200028020820012002108903200041106a24000b6901057f230041106b220124001043410010fb01200141046a10f8032001280208220210d0022103200128020421044101210002400340200020034d04402000417f460d02200420022000108a03ad101e200041016a21000c010b0b200141106a24000f0b10ac02000b4801027f230041206b220024001043410010fb01200041086a220110fd032000200028020c10d00236021c2000410136021820002001360214200041146a10e003200041206a24000b3c01037f230041106b220024001043410110fb01410041d68e08410410e5012101200041046a220210fd032002200110a503ad1044200041106a24000b3d01027f230041106b220024001043410110fb01410041d68e08410410e5012101200041046a10fd03200028020c200110a603ad1044200041106a24000bdc0101087f230041106b220124001043410110fb01410041d68e08410410e5012104200141046a10fd030240200128020c2205200410a9032200044002402001280208220310d002220220004f044020002002460d01200128020422072003200210f9022106200310d0022000490d032007200010f6022006ad10d9020c010b0c020b200310d00220024904400c020b2001280204200210f60210de022003200241016b10d8022000200247044020052006200010a7030b2005200410a80310de020b2000410047ad1044200141106a24000f0b41f6980841121003000b7102037f017e230041206b220024001043410210fb01200041086a410041f3910810db01200041146a410141f1910810db010240200028020c2000280218470d00200028021c210120002802102000280208200028021410bd02450d00200110c201ad21030b20031044200041206a24000b0d001043410010fb014200101e0b0d001043410010fb0110ac02000b0d001043410010fb01427e10440b0f001043410010fb0110cc0210da030b2301017f1043410110fb01410010f601220010c701047e420105200010ca02ad0b10440b17001043410110fb014100109f0110d10210ca02ad10440b900102037f027e230041206b220024001043410110fb01410041c88e08410810e501ad21041099012101034020032004514504401099012202200342017c2203109f022001200210cc010c010b0b20002001100a36021c20004100360218200020013602140340200041086a200041146a10880220002802084101710440200028020c101d1a0c010b0b200041206a24000b2b01017f1043410110fb01410041d08e08410610e501220045044041ba8e08410e10aa01000b2000ad101e0b130010c4011a410010fb0110c301108401101f0b2001017f1043410110fb01410041f98d08410710e201210010f903200010061a0b4101017f230041206b220024001043410010fb01200010f90310d40210fb03200041106a2000280200200028020410e802200028021045ad1044200041206a24000b4501027f230041106b220024001043410110fb01410041d68e08410410e5012101200010f90310d40210fb032000280208200028020c200110f402ad1044200041106a24000b3f01017f230041206b220024001043410010fb01200010f90310d40210fb03200041106a2000280200200028020410e8022000350210101e200041206a24000b880101047f230041206b220024001043410110fb01410041d68e08410410e5012101200041106a10f90310d40210fb0302402000280218200028021c200110f20222010440200041086a20002802102202200028021422032001108f01200020022003200028020c10820320002802004101710d010b109801000b2000350204101e200041206a24000b880101047f230041206b220024001043410110fb01410041d68e08410410e5012101200041106a10f90310d40210fb0302402000280218200028021c200110f20222010440200041086a20002802102202200028021422032001108f01200020022003200028020810820320002802004101710d010b109801000b2000350204101e200041206a24000b6701037f230041306b220024001043410010fb01200041106a10f90310d40210fb03200041206a200028021022012000280214220210e802200041086a2001200220002802241082032000280208410171450440109801000b200035020c101e200041306a24000b6701037f230041306b220024001043410010fb01200041106a10f90310d40210fb03200041206a200028021022012000280214220210e802200041086a2001200220002802281082032000280208410171450440109801000b200035020c101e200041306a24000b7302027f017e230041306b220024001043410010fb01200041106a220110f90310d40210fa03200041086a200110e7022000290308210210990121012000200237022803402000200041286a108e01200028020041017104402001200028020410cc010c010b0b2001101d1a200041306a24000bc90102057f017e230041406a220024001043410010fb012000411c6a220110f90310d40210fa03200041106a200110e702200029031021051099012102200020053702342000200136023c024003400240200041086a200041346a108e012000280208410171450d00200028023c220141086a2802002001410c6a280200200028020c220410f402450d022001280214108a01220341e88808410710171a2004200310ff0120022001280210200310f30210cc010c010b0b2002101d1a200041406b24000f0b109801000b5c01037f230041206b220024001043410110fb01410041d68e08410410e5012000410c6a10f90310d40210fc032000280210108a01220141cc8908410610171a200110ff01200028020c200110f302410047ad1044200041206a24000b4301027f230041206b220024001043410110fb01410041858f08410510e50121012000410c6a10f90310d40210fc03200041146a200110fa02ad101e200041206a24000b7f01027f230041206b220024001043410110fb01410041da8e08410510e5012101200041003a001c20002001360218200041013602140340200041086a200041146a10eb0320002802084101710440200028020c2101200041b29308410a10830110d00320002802002000280204200110e4021a0c010b0b200041206a24000b960101047f230041306b220024001043410110fb01410041da8e08410510e5012101200041003a00202000200136021c2000410136021802400340200041106a200041186a10eb032000280210410171450d01200028021422014190ce006a220220014f0440200041246a220341a89308410a108301109903200041086a20032002200110e3020c010b0b10ac02000b200041306a24000b7901037f230041206b220024001043410110fb01410041da8e08410510e5012101200041003a00102000200136020c2000410136020803402000200041086a10eb032000280200410171044020002802042101200041146a220241d69508411410830110d9032002200110a5031a0c010b0b200041206a24000b3701027f1043410210fb01410041f98d08410710e201410141b59108410910e50141f29408411c108301220110ff01200110df02101d1a0b4301037f1043410110fb01410041be9108410b10e201210110f90310d40241ab9508410b108301108a01220041dd9808410410171a2000200110051a200010d703101e0b1e01017f1043410210fb01410010c8012200410110c80110b7022000101f0b1e01017f1043410210fb01410010c8012200410110c80110cb022000101f0b19001043410210fb01410010c801410110c80110bd02ad10440b1a001043410010fb0142e4f401108b01410210c20210c802101f0b15001043410010fb0142b9e000108b01108401101f0b4101017f230041106b220024001043410110fb01200041086a410010c801410910c002200028020841017145044010ce03000b200028020c1045200041106a24000b4101017f230041106b220024001043410110fb01200041086a410010c801410910c602200028020841017145044010ce03000b200028020c1045200041106a24000ba90101057f230041206b220024001043410210fb01200041186a4100419c9008410510f30120002802182102200028021c2101200041106a410141969008410610f301200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410c902200028020c2101200028020821020c010b20032004200110c70221030b2002200310b7022002200110fe01200041206a24000ba90101057f230041206b220024001043410210fb01200041186a4100419c9008410510f30120002802182102200028021c2101200041106a410141969008410610f301200028021021030240024002402001200028021422044b20012004496b41ff01710e020201000b200041086a20022001200410c902200028020c2101200028020821020c010b20032004200110c70221030b2002200310cb022002200110fe01200041206a24000bbd0101067f230041106b220024001043410210fb01200041086a4100419c9008410510f30120002802082103200028020c21012000410141969008410610f30120002802002104027f024002400240024002402001200028020422024b200120024922056b41ff01710e020201000b200120024d0d030c020b20050d012004200120026b10c20210c402200310bd020c030b2003200410bd020c020b10ac02000b2003200220016b10c20210c402200410bd020bad1044200041106a24000b5101017f230041106b220024001043410110fb01200041086a4100418c8d08410110f30120002000280208200028020c10c002200028020041017145044010ce03000b20002802041045200041106a24000b5101017f230041106b220024001043410110fb01200041086a4100418c8d08410110f30120002000280208200028020c10c602200028020041017145044010ce03000b20002802041045200041106a24000b1d01017f1043410110fb014100109f01210010cd03200010b002101d1a0b1f01017f1043410110fb014100109f01210010cd032000107a41004aad10440b3401037f1043410210fb014100109f0121004101109f01210110cd03220220001085012200107b1a20002002200110b0021083020b5301047f1043410210fb014100109f0121004101109f01210110cd03220220002001103f1a2000108a012103200041948f08410a10171a200141948f08410a10171a2002200310b0022002200010b0021083020beb0401057f230041f0006b22002400024002400240109a02220410a501220110b4020d0020002001108a012201100a360254200041003602502000200136024c200041cc006a220110cb032102200110cc03210310990121010340200304402001200041cc006a10cb0310cc01200341016b21030c010b0b2000280250200028025410df01450d01200410de022000410c6a2002109c02200028022c450d00200041cc006a22032002109c02200028026c450d0002400240200341f39008411b109b024504402003418e9108411f109b020d01200341e190084112109b02450d0210fd01410010fc0120004100360240200041306a200041406b41ad9108410610d101200028024010f90120002802302001100a210110fd014100200110fa014101710d03418c96084108108301109b030c030b10fd01410010fc0120004100360240200041306a2204200041406b10d701200028024010f9012000280234210220002802302001100a210110fd014100200110fa0141017104402004108004200028023810b1030c030b200041306a22011080042001200210aa030c020b10fd01410010fc0120004100360240200041306a2203200041406b41ad9108410610d101200028024010f90120002802302001100a210110fd014100200110fa0141017104402003108004200028023810b1030c020b200041306a10bb01200041406b220110800420012000280238108a0110aa030c010b2002200110e503450d00200041cc006a2002109c02200028026c450d002002200110e503450d002002200110e5030d020b200041f0006a24000f0b419f8108411941a58008410e109501000b41848e0841361003000b4301037f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072006200342208822067e22082005200142208822097e7c22054220867c220a37030020002007200a56ad200620097e2005200854ad4220862005422088847c7c200120047e200220037e7c7c3703080b980302047f037e230041f0006b220c2400200c41d8006a200110c10202400240200c280258410171047f200c28025c210d410910c202210e4201108b01200d10c302210f200c41e0006a2001200e10c402200f10c50210b901200c280260450d01200c41406b200c29036822112011423f872212200b427f109607200c290348200c2903402210423f87520d02200c41306a2010428094ebdc037f200a7c22102010423f8720112012109607200c290338200c2903302210423f87520d02200c41206a2010428094ebdc037f20097d22102010423f8720112012109607200c290328200c2903202210423f87520d02200c41106a2010428094ebdc037f20087c22102010423f8720112012109607200c290318200c2903102212423f87520d02200c2002ad420020074200109607200c290308200c2903002211423f87520d022012428094ebdc037f20067d200dad20057e7c221220117d22102012532011420055730d022010108901210241010541000b21012000200236020420002001360200200c41f0006a24000f0b2004200310aa01000b10ac02000ba50101027f230041306b22062400027f2001500440200641106a2005410d10ac01200641086a20062802102006280214200010ad0120062802082107200628020c0c010b200641286a2004200310ac01200641206a2006280228200628022c200010ad01200641186a20062802202006280224200110ae0120062802182107200628021c0b2100200620072000200210af012006280200200628020410b001200641306a24000b3601027f230041106b22032400200341086a2002200110830122041087012000200329030837020020002004360208200341106a24000b0be4190500418080080bb801546f6b656e417474726962757465736e6f6e46756e6769626c65546f6b656e4d6170706572696e70757420746f6f206c6f6e67696e76616c69642076616c756564656c6962657261746520746f70206465636f6465206572726f7264656c6962657261746520746f7020656e636f6465206572726f7264656c69626572617465206e657374656420656e636f6465206572726f726d697373696e67206b657973657269616c697a6572206465636f6465206572726f723a200041d881080bd604454c524f4e447472616e7366657265736474696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473656e64706f696e7420726573756c7420656e636f6465206572726f723a2063616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e65676174697665455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e465443726561746566616c73657472756563616e467265657a6563616e5769706563616e506175736563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c65737365745370656369616c526f6c65464e474e46545346544d4554417265676973746572416e64536574416c6c526f6c6573697373756543425f434c4f53555245636f6e74726163742063616c6c20656e636f6465206572726f723a20ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0041b786080b01010041cb86080baa1302ffff73796e6320726573756c7476616c756520746f6f206c6f6e67696e70757420746f6f2073686f72746361737420746f20693634206572726f7270323234703235367033383470353231736c696365206f7574206f6620626f756e64736661696c656420746f206c6f616420746f20627974652061727261794d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a206c6e20696e7465726e616c206572726f726c6f673220696e7465726e616c206572726f724553445420657870656374656445474c4473746f72616765206b657920656e636f6465206572726f723a2073746f7261676520656e636f6465206572726f723a202e6d61707065642e6e6f64655f69642e6974656d2e6e6f64655f6c696e6b732e76616c75652e696e666f6c656e20616c7265616479207365742e6c656e2e6e6f64652e73746f726167654164647265737320616c726561647920726567697374657265642e696e646578496e76616c696420746f6b656e204944546f6b656e20494420616c72656164792073657449737375652077617320616c72656164792063616c6c6564496e76616c6964207061796d656e7420746f6b656e4d757374206973737565206f722073657420746f6b656e20494420666972737464656661756c745f69737375655f636264656661756c745f69737375655f696e69745f737570706c795f6362436f756e746572206f766572666c6f772e2054686973206d6f64756c652063616e20686f6c642065766964656e636520666f72206d6178696d756d2075383a3a4d415820646966666572656e7420746f6b656e20494473412076616c75652077617320616c726561647920736574556e6b6e6f776e20746f6b656e206964412076616c756520776173206e6f742070726576696f75736c79207365742e617474722e636f756e7465722e6d617070696e672e6e6f6e63656675747572655f76616c7565756e6c6f636b5f74696d657374616d706c6f67206461746120656e636f6465206572726f723a206c6f6720746f70696320656e636f6465206572726f723a2073746f72616765206465636f6465206572726f7220286b65793a20786d6f6d616d766563616d76616464726573735f6e756d6265725f706169727364756d6d7964617461617267326e756d5f6c6f67736261206d75737420657175616c206273635f70616e696320746573747369676e6b657973686173685f74797065617267746f6b656e5f696461646472657373617267336e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e747261637477616e7473206e6f6e2d7a65726f686f775f6d616e796e756d6265726974656d76616c75656f7468657277697365696e6372656d656e7464656661756c746b65795f696e6372656d656e74696e646578616464723261646472312e2e2e6368616e6765646d76326d7631696e646578206f7574206f6620626f756e6473696f70745f61646472517565756520656d707479216e6f7420656e6f7567682066756e647363757276655f62697473697a656d62326d6231736c6963655f6c656e7374617274696e675f706f736974696f6e6e725f627974657361727261797365636f6e64666972737463616e6e6f74206265207a65726f73746f726167655f6b65796e65775f76616c75656e6f64655f6964656c656d656e746f746865724e6f2073746f72616765217365745f726f6c65735f63616c6c6261636b637573746f6d5f69737375655f7a65726f5f737570706c795f6362637573746f6d5f69737375655f6e6f6e5f7a65726f5f737570706c795f6362726573756c74746f65787472615f6b6579616464726573735f6172676174747269627574657369646c656e746f6b656e5f6964656e746966696572617673656e7a6f70747332733170656e64696e67626164206172726179206c656e67746876617220617267736361706163697479206578636565646564696e707574206f7574206f662072616e6765696e697469616c5f63616c6c65726576656e745f616576656e745f626576656e745f6572725f646174616576656e745f6572725f746f7069636c6f61645f776974685f6b65795f6572726c6f61645f776974685f76616c75655f65727273746f72655f776974685f76616c75655f6572726d61705f6d61707065727365745f6d61707065727665635f6d61707065726d6d2d6b65796d6d2d76616c75656d6d2d6e756d2d656e747269657373746f726167655f62797465737365725f327573697a656269675f696e746269675f75696e746e725f746f5f636c656172693634753634626f6f6c6d6170316d6170326d61703371756575655f6d6170706572454c524f4e44693634454c524f4e447265736572766564454c524f4e4442696755696e746933326d795f73696e676c655f76616c75655f6d617070657273696e676c655f76616c75655f6d61707065725f776974685f6b65796c6973745f6d61707065726d61705f73746f726167655f6d6170706572616464726573735f696473756e697175655f69645f6d6170706572636f6e74726163745f61646472657373756e6f7264657265645f7365745f6d617070657277686974656c6973744d617070657266756e6769626c65546f6b656e4d6170706572726f6c657353657474696d656c6f636b5f6d617070657245534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e46545570646174654174747269627574657345534454526f6c654e465441646455524945534454526f6c654e4654526563726561746545534454526f6c654d6f64696679526f79616c7469657345534454526f6c654d6f6469667943726561746f7245534454526f6c655365744e6577555249455344545472616e73666572526f6c65456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572456e64706f696e742063616e206f6e6c792062652063616c6c65642062792075736572206163636f756e7473616464724964616464726c6173744964556e6b6e6f776e2061646472657373696e646578206f7574206f662072616e67654974656d206e6f742077686974656c6973746564454c524f4e4472657761726470616e6963206f636375727265640000c0020200c3020200c3020200c6020200c9020200c3020200c6020200c902020003000000030000000300000003000000040000000300000003000000040041f899080b0438ffffff", "report": { "imports": [ "addEC", @@ -6755,12 +6906,17 @@ "createEC", "doubleEC", "ellipticCurveGetValues", + "epochStartBlockNonce", + "epochStartBlockRound", + "epochStartBlockTimestampMs", "finish", "getArgumentLength", "getBlockEpoch", "getBlockNonce", "getBlockRound", + "getBlockRoundTimeMs", "getBlockTimestamp", + "getBlockTimestampMs", "getCurveLengthEC", "getGasLeft", "getNumArguments", @@ -6768,6 +6924,7 @@ "getPrevBlockNonce", "getPrevBlockRound", "getPrevBlockTimestamp", + "getPrevBlockTimestampMs", "getPrivKeyByteLengthEC", "getShardOfAddress", "isOnCurveEC", @@ -6779,6 +6936,8 @@ "mBufferFinish", "mBufferFromBigIntSigned", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntSigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", @@ -6792,15 +6951,20 @@ "mBufferStorageStore", "mBufferToBigIntSigned", "mBufferToBigIntUnsigned", + "mBufferToSmallIntSigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCaller", "managedCreateEC", "managedEncodeSecp256k1DerSignature", "managedExecuteOnDestContext", "managedGenerateKeyEC", + "managedGetAllTransfersCallValue", "managedGetBlockRandomSeed", + "managedGetCodeHash", "managedGetCodeMetadata", "managedGetESDTTokenData", + "managedGetESDTTokenType", "managedGetMultiESDTCallValue", "managedGetOriginalTxHash", "managedGetPrevBlockRandomSeed", @@ -6842,12 +7006,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/basic-features.wasm", - "size": 70232, + "size": 71554, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/barnard-features/scenarios/block_info_ms.scen.json b/test/features/basic-features/scenarios/block_info_ms.scen.json similarity index 91% rename from test/features/barnard-features/scenarios/block_info_ms.scen.json rename to test/features/basic-features/scenarios/block_info_ms.scen.json index b06a24ce6..f3e4539d4 100644 --- a/test/features/barnard-features/scenarios/block_info_ms.scen.json +++ b/test/features/basic-features/scenarios/block_info_ms.scen.json @@ -4,10 +4,10 @@ { "step": "setState", "accounts": { - "sc:barnard-features": { + "sc:basic-features": { "nonce": "0", "balance": "0", - "code": "mxsc:../output/barnard-features.mxsc.json" + "code": "mxsc:../output/basic-features.mxsc.json" }, "address:an_account": { "nonce": "0", @@ -34,7 +34,7 @@ "id": "get_prev_block_timestamp_ms", "tx": { "from": "address:an_account", - "to": "sc:barnard-features", + "to": "sc:basic-features", "function": "get_prev_block_timestamp_ms", "arguments": [], "gasLimit": "50,000,000", @@ -55,7 +55,7 @@ "id": "get_block_timestamp_ms", "tx": { "from": "address:an_account", - "to": "sc:barnard-features", + "to": "sc:basic-features", "function": "get_block_timestamp_ms", "arguments": [], "gasLimit": "50,000,000", diff --git a/test/features/barnard-features/scenarios/code_hash.scen.json b/test/features/basic-features/scenarios/code_hash.scen.json similarity index 84% rename from test/features/barnard-features/scenarios/code_hash.scen.json rename to test/features/basic-features/scenarios/code_hash.scen.json index d6627c763..0cd054d68 100644 --- a/test/features/barnard-features/scenarios/code_hash.scen.json +++ b/test/features/basic-features/scenarios/code_hash.scen.json @@ -17,7 +17,7 @@ { "creatorAddress": "address:owner", "creatorNonce": "1", - "newAddress": "sc:barnard" + "newAddress": "sc:basic-features" } ] }, @@ -26,9 +26,9 @@ "id": "1", "tx": { "from": "address:owner", - "contractCode": "mxsc:../output/barnard-features.mxsc.json", + "contractCode": "mxsc:../output/basic-features.mxsc.json", "arguments": [], - "gasLimit": "5,000,000", + "gasLimit": "50,000,000", "gasPrice": "0" }, "expect": { @@ -43,8 +43,8 @@ "step": "scQuery", "id": "2", "tx": { - "to": "sc:barnard", - "function": "codeHash", + "to": "sc:basic-features", + "function": "code_hash", "arguments": [ "sc:code-hash-sc" ] diff --git a/test/features/basic-features/scenarios/crypto_elliptic_curves.scen.json b/test/features/basic-features/scenarios/crypto_elliptic_curves.scen.json index cf3dee28b..33960bd4d 100644 --- a/test/features/basic-features/scenarios/crypto_elliptic_curves.scen.json +++ b/test/features/basic-features/scenarios/crypto_elliptic_curves.scen.json @@ -933,13 +933,8 @@ "gasPrice": "0" }, "expect": { - "out": [ - "*", - "*", - "*" - ], - "status": "0", - "message": "*" + "status": "10", + "message": "str:VM hook is deactivated" } }, { @@ -956,13 +951,8 @@ "gasPrice": "0" }, "expect": { - "out": [ - "*", - "*", - "*" - ], - "status": "0", - "message": "*" + "status": "10", + "message": "str:VM hook is deactivated" } }, { @@ -979,13 +969,8 @@ "gasPrice": "0" }, "expect": { - "out": [ - "*", - "*", - "*" - ], - "status": "0", - "message": "*" + "status": "10", + "message": "str:VM hook is deactivated" } }, { @@ -1002,13 +987,8 @@ "gasPrice": "0" }, "expect": { - "out": [ - "*", - "*", - "*" - ], - "status": "0", - "message": "*" + "status": "10", + "message": "str:VM hook is deactivated" } }, { diff --git a/test/features/basic-features/scenarios/crypto_verify_bls.scen.json b/test/features/basic-features/scenarios/crypto_verify_bls.scen.json index 561a427fb..2f02dae44 100644 --- a/test/features/basic-features/scenarios/crypto_verify_bls.scen.json +++ b/test/features/basic-features/scenarios/crypto_verify_bls.scen.json @@ -1,6 +1,6 @@ { "name": "crypto", - "comment": "does not currently work with scenarios-rs, because verify_bls function is not yet mocked", + "comment": "verify BLS signature with one public key", "gasSchedule": "v3", "steps": [ { @@ -65,4 +65,4 @@ } } ] -} +} \ No newline at end of file diff --git a/test/features/basic-features/scenarios/crypto_verify_bls_aggregated_signature.scen.json b/test/features/basic-features/scenarios/crypto_verify_bls_aggregated_signature.scen.json index ed67d265e..7c117e8c5 100644 --- a/test/features/basic-features/scenarios/crypto_verify_bls_aggregated_signature.scen.json +++ b/test/features/basic-features/scenarios/crypto_verify_bls_aggregated_signature.scen.json @@ -1,6 +1,6 @@ { "name": "crypto", - "comment": "does not currently work with scenarios-rs, because verify_bls function is not yet mocked", + "comment": "verify BLS Signature with aggregated public keys", "gasSchedule": "v3", "steps": [ { diff --git a/test/features/basic-features/scenarios/managed_buffer_copy_slice.scen.json b/test/features/basic-features/scenarios/managed_buffer_copy_slice.scen.json index 52ff3bcbf..8f343d18b 100644 --- a/test/features/basic-features/scenarios/managed_buffer_copy_slice.scen.json +++ b/test/features/basic-features/scenarios/managed_buffer_copy_slice.scen.json @@ -68,7 +68,7 @@ }, { "step": "scQuery", - "id": "3", + "id": "4", "tx": { "to": "sc:basic-features", "function": "mbuffer_copy_slice", @@ -86,7 +86,7 @@ }, { "step": "scQuery", - "id": "3", + "id": "5", "tx": { "to": "sc:basic-features", "function": "mbuffer_copy_slice", diff --git a/test/features/basic-features/scenarios/storage_i64_bad.scen.json b/test/features/basic-features/scenarios/storage_i64_bad.scen.json index 6fb3ab0c5..dff181e2d 100644 --- a/test/features/basic-features/scenarios/storage_i64_bad.scen.json +++ b/test/features/basic-features/scenarios/storage_i64_bad.scen.json @@ -33,7 +33,7 @@ "expect": { "out": [], "status": "*", - "message": "str:storage decode error (key: i64): argument out of range", + "message": "str:storage decode error (key: i64): value too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/test/features/basic-features/scenarios/storage_u64_bad.scen.json b/test/features/basic-features/scenarios/storage_u64_bad.scen.json index c7597fd01..e0ccba911 100644 --- a/test/features/basic-features/scenarios/storage_u64_bad.scen.json +++ b/test/features/basic-features/scenarios/storage_u64_bad.scen.json @@ -33,7 +33,7 @@ "expect": { "out": [], "status": "4", - "message": "str:storage decode error (key: u64): input too long", + "message": "str:storage decode error (key: u64): value too long", "logs": "*", "gas": "*", "refund": "*" diff --git a/test/features/big-float-features/output/big-float-features.mxsc.json b/test/features/big-float-features/output/big-float-features.mxsc.json index 1abec9c5e..b1964b2b4 100644 --- a/test/features/big-float-features/output/big-float-features.mxsc.json +++ b/test/features/big-float-features/output/big-float-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "big-float-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -1389,7 +1389,7 @@ "hasCallback": false, "types": {} }, - "code": "0061736d0100000001450d60000060027f7f017f60017f017f60027f7f006000017f60037f7f7f0060037f7f7f017f60017f0060027e7e017f60027f7e0060017f017e60017e017f60047f7f7f7f0002da062603656e760d626967466c6f6174436c6f6e65000303656e760b7369676e616c4572726f72000303656e7610626967466c6f6174536574496e743634000903656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000703656e7619736d616c6c496e744765745369676e6564417267756d656e74000a03656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e7617626967496e744765745369676e6564417267756d656e74000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e760f6765744e756d417267756d656e7473000403656e76136d42756666657246726f6d426967466c6f6174000103656e760d6d42756666657246696e697368000203656e760f6d4275666665725365744279746573000603656e760b626967466c6f61744d756c000503656e760b626967466c6f6174446976000503656e760b626967466c6f6174416464000503656e76116d427566666572546f426967466c6f6174000103656e7611626967466c6f6174536574426967496e74000303656e760b626967466c6f61744e6567000303656e760b626967466c6f6174506f77000503656e760c626967466c6f617453717274000303656e7610626967466c6f61745472756e63617465000303656e760a626967496e745369676e000203656e760a626967496e744c6f6732000203656e7613626967466c6f61744e657746726f6d46726163000803656e760e626967496e74536574496e743634000903656e7609626967496e74506f77000503656e76126d427566666572476574417267756d656e74000103656e760b626967466c6f6174537562000503656e760c626967466c6f61745369676e000203656e760b626967466c6f6174436d70000103656e760e636865636b4e6f5061796d656e74000003656e7614626967466c6f61744e657746726f6d5061727473000603656e7612626967466c6f61744e657746726f6d536369000803656e7612626967496e7446696e6973685369676e6564000703656e76176d42756666657246726f6d426967496e745369676e6564000103656e76106d4275666665724765744c656e677468000203656e760d6d427566666572417070656e640001036d6c02040202020b0c010402040202060404020707010101030302010202010202020401010101010101010101010200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000805030100030616037f01418080080b7f0041b482080b7f0041c082080b07ad0f4e066d656d6f7279020004696e69740053186e65775f66726f6d5f70617274735f6269675f666c6f61740054176e65775f66726f6d5f667261635f6269675f666c6f61740055166e65775f66726f6d5f7363695f6269675f666c6f61740056196269675f666c6f61745f66726f6d5f6269675f75696e745f310057186269675f666c6f61745f66726f6d5f6269675f696e745f310058126269675f666c6f61745f66726f6d5f6936340059126269675f666c6f61745f66726f6d5f693332005a126269675f666c6f61745f66726f6d5f693136005b116269675f666c6f61745f66726f6d5f6938005c146269675f666c6f61745f66726f6d5f6973697a65005d166269675f666c6f61745f66726f6d5f6d616e5f627566005e0e737172745f6269675f666c6f6174005f0d706f775f6269675f666c6f617400600e6269675f666c6f61745f7a65726f00610d6269675f666c6f61745f6e656700620d6164645f6269675f666c6f61740063116164645f6269675f666c6f61745f72656600640d7375625f6269675f666c6f61740065117375625f6269675f666c6f61745f72656600660d6d756c5f6269675f666c6f61740067116d756c5f6269675f666c6f61745f72656600680d6469765f6269675f666c6f61740069116469765f6269675f666c6f61745f726566006a146164645f61737369676e5f6269675f666c6f6174006b186164645f61737369676e5f6269675f666c6f61745f726566006c147375625f61737369676e5f6269675f666c6f6174006d187375625f61737369676e5f6269675f666c6f61745f726566006d146d756c5f61737369676e5f6269675f666c6f6174006e186d756c5f61737369676e5f6269675f666c6f61745f726566006f146469765f61737369676e5f6269675f666c6f61740070186469765f61737369676e5f6269675f666c6f61745f7265660070206e65775f66726f6d5f70617274735f6269675f666c6f61745f7772617070656400711f6e65775f66726f6d5f667261635f6269675f666c6f61745f7772617070656400721e6e65775f66726f6d5f7363695f6269675f666c6f61745f777261707065640073206269675f666c6f61745f66726f6d5f6269675f696e745f315f777261707065640074216269675f666c6f61745f66726f6d5f6269675f75696e745f315f7772617070656400751a6269675f666c6f61745f66726f6d5f6936345f7772617070656400761a6269675f666c6f61745f66726f6d5f6933325f7772617070656400771a6269675f666c6f61745f66726f6d5f6931365f777261707065640078196269675f666c6f61745f66726f6d5f69385f7772617070656400791c6269675f666c6f61745f66726f6d5f6973697a655f77726170706564007a1a737172745f6269675f666c6f61745f7265665f77726170706564007b19706f775f6269675f666c6f61745f7265665f77726170706564007c166269675f666c6f61745f7a65726f5f77726170706564007d156269675f666c6f61745f6e65675f77726170706564007e106c6e5f6269675f666c6f61745f726566007f186c6e5f6269675f666c6f61745f707265636973696f6e5f390080011a6c6e5f6269675f666c6f61745f616e795f707265636973696f6e008101156164645f6269675f666c6f61745f77726170706564008201196164645f6269675f666c6f61745f7265665f77726170706564008301157375625f6269675f666c6f61745f77726170706564008401197375625f6269675f666c6f61745f7265665f77726170706564008501156d756c5f6269675f666c6f61745f77726170706564008601196d756c5f6269675f666c6f61745f7265665f77726170706564008701156469765f6269675f666c6f61745f77726170706564008801196469765f6269675f666c6f61745f7265665f777261707065640089011c6164645f61737369676e5f6269675f666c6f61745f77726170706564008a01206164645f61737369676e5f6269675f666c6f61745f7265665f77726170706564008b011c7375625f61737369676e5f6269675f666c6f61745f77726170706564008c01207375625f61737369676e5f6269675f666c6f61745f7265665f77726170706564008c011c6d756c5f61737369676e5f6269675f666c6f61745f77726170706564008d01206d756c5f61737369676e5f6269675f666c6f61745f7265665f77726170706564008e011c6469765f61737369676e5f6269675f666c6f61745f77726170706564008f01206469765f61737369676e5f6269675f666c6f61745f7265665f77726170706564008f010863616c6c4261636b009001186269675f666c6f61745f66726f6d5f6269675f696e745f320058206269675f666c6f61745f66726f6d5f6269675f696e745f325f77726170706564007416737172745f6269675f666c6f61745f77726170706564007b11706f775f6269675f666c6f61745f7265660060216269675f666c6f61745f66726f6d5f6269675f75696e745f325f777261707065640075196269675f666c6f61745f66726f6d5f6269675f75696e745f3200571a6269675f666c6f61745f66726f6d5f6d616e5f6275665f726566005e12737172745f6269675f666c6f61745f726566005f15706f775f6269675f666c6f61745f77726170706564007c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020af1176c0e01017f102722012000100020010b1901017f41f0810841f0810828020041016b220036020020000b1001017f102722012000adc2100220010b1001017f102722012000adc3100220010b0f01017f102722012000ac100220010b0e01017f102722012000100220010b2e01017f418080084117102d22042000200110031a200441978008410310031a20042002200310031a20041004000b1101017f1027220220002001100c1a20020b0b0042ff7d4280011091010b0d00200010272200101b1a20000b0d0042ffff7b428080021091010b08002000102f10320b0d0020001027220010101a20000b2b01017e2000100522034280808080087d42ffffffff6f5804402001200241c181084112102c000b2003a70b0e01017f410010272200100620000b110042ffffffff6f4280808080081091010b0c00200010272200100720000b1400100920004604400f0b419a800841191001000b1201017f102722012000100a1a2001100b1a0b0c00200020002001100d20000b1001017f1027220220002001100e20020b1001017f1027220220002001100d20020b0a00200020002001100f0b0a00200020002001100d0b0e01017f102722012000101120010b0a0020002001103b10400b0e01017f102722012000101520010b0e01017f102722012000101220010b1001017f1027220220002001101320020b0e01017f102722012000101420010bd00101027f2000104022011016410048200141feffffff07467245044020011017220241004e044020004101200274102a103a2101429d988365428094ebdc03101822002001103d2000429ed69dd501428094ebdc031018103c20002001103d200042c0fa88c37a428094ebdc031018103c20002001103d200042a8c5a0c10a428094ebdc031018103c20002001103d20004294abb9c179428094ebdc031018103c42acacc2ca02428094ebdc031018210120002002102a20011039103c20000f0b4200102b0f0b41b38008411d1001000b4d01027f200041c000490440419c7f20006b2101200041f481086a22022d00004504404175420a101941742000ad1019200141754174101a200241013a00000b20010f0b41e18108410e1001000b08004200420110180b0c00200020002001100f20000b0c00200020002001100e20000b0c00200020002001101c20000b1001017f1027220220002001100f20020b1001017f1027220220002001101c20020b0e002000102622002001103c20000b100020001026220020002001100e20000b100020001026220020002001100d20000b100020001026220020002001101c20000b100020001026220020002001100f20000b0e002000102622002001103d20000b5201027f02402000101d41004a04400240024020004201102b2201101e220241004a20024100486b41ff01710e020001030b4200102b0f0b200010440f0b419b810841261001000b20012000103a104410410b0800101f410010370b2a00101f41031037410041ff800841131033410141ea800841151033410241dc8008410e1033102010380b1400101f410210374100100541011005101810380b1b00101f4102103741001005410141dc8008410e1033ac102110380b0e00101f410110371034103e10380b1000101f4101103741001036103e10380b1000101f4101103741001005102b10380b0e00101f410110371030102910380b1600101f41011037410041d18008410b1033102a10380b0e00101f41011037102e102810380b0e00101f410110371035102a10380b1000101f410110374100102f103210380b1000101f4101103741001031104310380b1a00101f4102103741001031410141d0800841011033104210380b0c00101f41001037104610380b1000101f4101103741001031104110380b1400101f410210374100103141011031104710380b1400101f410210374100103141011031104a10380b1400101f410210374100103141011031104910380b1400101f410210374100103141011031104b10380b1400101f410210374100103141011031103910380b1400101f410210374100103141011031103b10380b1400101f410210374100103141011031104810380b1400101f410210374100103141011031103a10380b1400101f410210374100103141011031104c10380b1400101f410210374100103141011031105010380b1400101f410210374100103141011031104f10380b1400101f410210374100103141011031104e10380b1400101f410210374100103141011031105110380b1400101f410210374100103141011031104d10380b3a02037f017e101f41041037410041ff800841131033410141ea800841151033410241dc8008410e103341031005210310202003102b103f10220b2201037e101f41031037410010054101100541021005210210182002102b103f10220b2b02027e017f101f4103103741001005410141dc8008410e1033410210052101ac10212001102b103f10220b1600101f4101103741001036103e4101102a103f10220b1400101f410110371034103e4101102a103f10220b1600101f4101103741001005102b4101102a103f10220b1c00101f41011037410041d18008410b1033102a4101102a103f10220b1400101f41011037103010294101102a103f10220b1400101f41011037102e10284101102a103f10220b1400101f410110371035102a4101102a103f10220b2202017f017e101f4102103741001036410110052101103e10432001102b103f10220b3002027f017e101f4103103741001036410141d08008410110332101410210052102103e200110422002102b103f10220b1200101f4100103710464101102a103f10220b2202017f017e101f4102103741001036410110052101103e10412001102b103f10220b1000101f4101103741001031105210380b2201017f101f4101103741001036103e1052210041091045103e2000103b104010220bdd0102057f017e230041106b22012400101f41021037410010364101100822054280808080105a044041928108410941d38108410e102c000b2005a72102103e1052210020021045103e2000103b1040210341014100102d210010272204200310231a200120041024220341187420034180fe03714108747220034108764180fe0371200341187672723602082000200141086a410410031a2000200410251a2001200241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001410c6a410410031a2000100b1a200141106a24000b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10472002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104a2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10492002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104b2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10392002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e103b2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10482002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e103a2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104c2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10502002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104f2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104e2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e10512002102b103f10220b2c02027f017e101f4103103741001036410110362101410210052102103e2001103e104d2002102b103f10220b02000b2501017e41001005220220017d200058044041d18008410b41c181084112102c000b2002a70b0b83020200418080080bef01617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e74736c6f6720617267756d656e74206d75737420626520706f73697469766562736d616c6c5f76616c75656578706f6e656e745f76616c75656672616374696f6e616c5f706172745f76616c7565696e74656772616c5f706172745f76616c7565707265636973696f6e6c6f6720617267756d656e74206d757374207065207374726963746c7920706f736974697665696e707574206f7574206f662072616e6765696e70757420746f6f206c6f6e6770616e6963206f636375727265640041f081080b0438ffffff", + "code": "0061736d0100000001450d60000060027f7f017f60017f017f60027f7f006000017f60037f7f7f0060037f7f7f017f60017f0060027e7e017f60027f7e0060017f017e60017e017f60047f7f7f7f0002da062603656e760d626967466c6f6174436c6f6e65000303656e760b7369676e616c4572726f72000303656e7610626967466c6f6174536574496e743634000903656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000703656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e7619736d616c6c496e744765745369676e6564417267756d656e74000a03656e7617626967496e744765745369676e6564417267756d656e74000303656e760f6765744e756d417267756d656e7473000403656e76136d42756666657246726f6d426967466c6f6174000103656e760d6d42756666657246696e697368000203656e760f6d4275666665725365744279746573000603656e760b626967466c6f61744d756c000503656e760b626967466c6f6174446976000503656e760b626967466c6f6174416464000503656e76116d427566666572546f426967466c6f6174000103656e7611626967466c6f6174536574426967496e74000303656e760b626967466c6f61744e6567000303656e760b626967466c6f6174506f77000503656e760c626967466c6f617453717274000303656e7610626967466c6f61745472756e63617465000303656e760a626967496e745369676e000203656e760a626967496e744c6f6732000203656e7613626967466c6f61744e657746726f6d46726163000803656e760e626967496e74536574496e743634000903656e7609626967496e74506f77000503656e76126d427566666572476574417267756d656e74000103656e760b626967466c6f6174537562000503656e760c626967466c6f61745369676e000203656e760b626967466c6f6174436d70000103656e760e636865636b4e6f5061796d656e74000003656e7614626967466c6f61744e657746726f6d5061727473000603656e7612626967466c6f61744e657746726f6d536369000803656e7612626967496e7446696e6973685369676e6564000703656e76176d42756666657246726f6d426967496e745369676e6564000103656e76106d4275666665724765744c656e677468000203656e760d6d427566666572417070656e640001036d6c02040202020b0c010406040404020202020707010101030302010202010202020401010101010101010101010200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000805030100030616037f01418080080b7f0041b482080b7f0041c082080b07ad0f4e066d656d6f7279020004696e69740053186e65775f66726f6d5f70617274735f6269675f666c6f61740054176e65775f66726f6d5f667261635f6269675f666c6f61740055166e65775f66726f6d5f7363695f6269675f666c6f61740056196269675f666c6f61745f66726f6d5f6269675f75696e745f310057186269675f666c6f61745f66726f6d5f6269675f696e745f310058126269675f666c6f61745f66726f6d5f6936340059126269675f666c6f61745f66726f6d5f693332005a126269675f666c6f61745f66726f6d5f693136005b116269675f666c6f61745f66726f6d5f6938005c146269675f666c6f61745f66726f6d5f6973697a65005d166269675f666c6f61745f66726f6d5f6d616e5f627566005e0e737172745f6269675f666c6f6174005f0d706f775f6269675f666c6f617400600e6269675f666c6f61745f7a65726f00610d6269675f666c6f61745f6e656700620d6164645f6269675f666c6f61740063116164645f6269675f666c6f61745f72656600640d7375625f6269675f666c6f61740065117375625f6269675f666c6f61745f72656600660d6d756c5f6269675f666c6f61740067116d756c5f6269675f666c6f61745f72656600680d6469765f6269675f666c6f61740069116469765f6269675f666c6f61745f726566006a146164645f61737369676e5f6269675f666c6f6174006b186164645f61737369676e5f6269675f666c6f61745f726566006c147375625f61737369676e5f6269675f666c6f6174006d187375625f61737369676e5f6269675f666c6f61745f726566006d146d756c5f61737369676e5f6269675f666c6f6174006e186d756c5f61737369676e5f6269675f666c6f61745f726566006f146469765f61737369676e5f6269675f666c6f61740070186469765f61737369676e5f6269675f666c6f61745f7265660070206e65775f66726f6d5f70617274735f6269675f666c6f61745f7772617070656400711f6e65775f66726f6d5f667261635f6269675f666c6f61745f7772617070656400721e6e65775f66726f6d5f7363695f6269675f666c6f61745f777261707065640073206269675f666c6f61745f66726f6d5f6269675f696e745f315f777261707065640074216269675f666c6f61745f66726f6d5f6269675f75696e745f315f7772617070656400751a6269675f666c6f61745f66726f6d5f6936345f7772617070656400761a6269675f666c6f61745f66726f6d5f6933325f7772617070656400771a6269675f666c6f61745f66726f6d5f6931365f777261707065640078196269675f666c6f61745f66726f6d5f69385f7772617070656400791c6269675f666c6f61745f66726f6d5f6973697a655f77726170706564007a1a737172745f6269675f666c6f61745f7265665f77726170706564007b19706f775f6269675f666c6f61745f7265665f77726170706564007c166269675f666c6f61745f7a65726f5f77726170706564007d156269675f666c6f61745f6e65675f77726170706564007e106c6e5f6269675f666c6f61745f726566007f186c6e5f6269675f666c6f61745f707265636973696f6e5f390080011a6c6e5f6269675f666c6f61745f616e795f707265636973696f6e008101156164645f6269675f666c6f61745f77726170706564008201196164645f6269675f666c6f61745f7265665f77726170706564008301157375625f6269675f666c6f61745f77726170706564008401197375625f6269675f666c6f61745f7265665f77726170706564008501156d756c5f6269675f666c6f61745f77726170706564008601196d756c5f6269675f666c6f61745f7265665f77726170706564008701156469765f6269675f666c6f61745f77726170706564008801196469765f6269675f666c6f61745f7265665f777261707065640089011c6164645f61737369676e5f6269675f666c6f61745f77726170706564008a01206164645f61737369676e5f6269675f666c6f61745f7265665f77726170706564008b011c7375625f61737369676e5f6269675f666c6f61745f77726170706564008c01207375625f61737369676e5f6269675f666c6f61745f7265665f77726170706564008c011c6d756c5f61737369676e5f6269675f666c6f61745f77726170706564008d01206d756c5f61737369676e5f6269675f666c6f61745f7265665f77726170706564008e011c6469765f61737369676e5f6269675f666c6f61745f77726170706564008f01206469765f61737369676e5f6269675f666c6f61745f7265665f77726170706564008f010863616c6c4261636b009001186269675f666c6f61745f66726f6d5f6269675f696e745f320058206269675f666c6f61745f66726f6d5f6269675f696e745f325f77726170706564007416737172745f6269675f666c6f61745f77726170706564007b11706f775f6269675f666c6f61745f7265660060216269675f666c6f61745f66726f6d5f6269675f75696e745f325f777261707065640075196269675f666c6f61745f66726f6d5f6269675f75696e745f3200571a6269675f666c6f61745f66726f6d5f6d616e5f6275665f726566005e12737172745f6269675f666c6f61745f726566005f15706f775f6269675f666c6f61745f77726170706564007c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020af1176c0e01017f102722012000100020010b1901017f41f0810841f0810828020041016b220036020020000b1001017f102722012000adc2100220010b1001017f102722012000adc3100220010b0f01017f102722012000ac100220010b0e01017f102722012000100220010b2e01017f418080084117102d22042000200110031a200441978008410310031a20042002200310031a20041004000b1101017f1027220220002001100c1a20020b0e01017f410010272200100520000b2b01017e2000100722034280808080087d42ffffffff6f5804402001200241c181084112102c000b2003a70b0b0042ff7d4280011091010b0d0042ffff7b428080021091010b110042ffffffff6f4280808080081091010b0d00200010272200101b1a20000b08002000103310350b0d0020001027220010101a20000b0c00200010272200100820000b1400100920004604400f0b419a800841191001000b1201017f102722012000100a1a2001100b1a0b0c00200020002001100d20000b1001017f1027220220002001100e20020b1001017f1027220220002001100d20020b0a00200020002001100f0b0a00200020002001100d0b0e01017f102722012000101120010b0a0020002001103b10400b0e01017f102722012000101520010b0e01017f102722012000101220010b1001017f1027220220002001101320020b0e01017f102722012000101420010bd00101027f2000104022011016410048200141feffffff07467245044020011017220241004e044020004101200274102a103a2101429d988365428094ebdc03101822002001103d2000429ed69dd501428094ebdc031018103c20002001103d200042c0fa88c37a428094ebdc031018103c20002001103d200042a8c5a0c10a428094ebdc031018103c20002001103d20004294abb9c179428094ebdc031018103c42acacc2ca02428094ebdc031018210120002002102a20011039103c20000f0b4200102b0f0b41b38008411d1001000b4d01027f200041c000490440419c7f20006b2101200041f481086a22022d00004504404175420a101941742000ad1019200141754174101a200241013a00000b20010f0b41e18108410e1001000b08004200420110180b0c00200020002001100f20000b0c00200020002001100e20000b0c00200020002001101c20000b1001017f1027220220002001100f20020b1001017f1027220220002001101c20020b0e002000102622002001103c20000b100020001026220020002001100e20000b100020001026220020002001100d20000b100020001026220020002001101c20000b100020001026220020002001100f20000b0e002000102622002001103d20000b5201027f02402000101d41004a04400240024020004201102b2201101e220241004a20024100486b41ff01710e020001030b4200102b0f0b200010440f0b419b810841261001000b20012000103a104410410b0800101f410010370b2a00101f41031037410041ff80084113102f410141ea80084115102f410241dc8008410e102f102010380b1400101f410210374100100741011007101810380b1b00101f4102103741001007410141dc8008410e102fac102110380b0e00101f41011037102e103e10380b1000101f4101103741001036103e10380b1000101f4101103741001007102b10380b0e00101f410110371031102910380b1600101f41011037410041d18008410b102f102a10380b0e00101f410110371030102810380b0e00101f410110371032102a10380b1000101f4101103741001033103510380b1000101f4101103741001034104310380b1a00101f4102103741001034410141d080084101102f104210380b0c00101f41001037104610380b1000101f4101103741001034104110380b1400101f410210374100103441011034104710380b1400101f410210374100103441011034104a10380b1400101f410210374100103441011034104910380b1400101f410210374100103441011034104b10380b1400101f410210374100103441011034103910380b1400101f410210374100103441011034103b10380b1400101f410210374100103441011034104810380b1400101f410210374100103441011034103a10380b1400101f410210374100103441011034104c10380b1400101f410210374100103441011034105010380b1400101f410210374100103441011034104f10380b1400101f410210374100103441011034104e10380b1400101f410210374100103441011034105110380b1400101f410210374100103441011034104d10380b3a02037f017e101f41041037410041ff80084113102f410141ea80084115102f410241dc8008410e102f41031007210310202003102b103f10220b2201037e101f41031037410010074101100741021007210210182002102b103f10220b2b02027e017f101f4103103741001007410141dc8008410e102f410210072101ac10212001102b103f10220b1600101f4101103741001036103e4101102a103f10220b1400101f41011037102e103e4101102a103f10220b1600101f4101103741001007102b4101102a103f10220b1c00101f41011037410041d18008410b102f102a4101102a103f10220b1400101f41011037103110294101102a103f10220b1400101f41011037103010284101102a103f10220b1400101f410110371032102a4101102a103f10220b2202017f017e101f4102103741001036410110072101103e10432001102b103f10220b3002027f017e101f4103103741001036410141d080084101102f2101410210072102103e200110422002102b103f10220b1200101f4100103710464101102a103f10220b2202017f017e101f4102103741001036410110072101103e10412001102b103f10220b1000101f4101103741001034105210380b2201017f101f4101103741001036103e1052210041091045103e2000103b104010220bdd0102057f017e230041106b22012400101f41021037410010364101100622054280808080105a044041928108410941d38108410e102c000b2005a72102103e1052210020021045103e2000103b1040210341014100102d210010272204200310231a200120041024220341187420034180fe03714108747220034108764180fe0371200341187672723602082000200141086a410410031a2000200410251a2001200241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001410c6a410410031a2000100b1a200141106a24000b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10472002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104a2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10492002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104b2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10392002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e103b2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10482002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e103a2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104c2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10502002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104f2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104e2002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e10512002102b103f10220b2c02027f017e101f4103103741001036410110362101410210072102103e2001103e104d2002102b103f10220b02000b2501017e41001007220220017d200058044041d18008410b41c181084112102c000b2002a70b0b83020200418080080bef01617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e74736c6f6720617267756d656e74206d75737420626520706f73697469766562736d616c6c5f76616c75656578706f6e656e745f76616c75656672616374696f6e616c5f706172745f76616c7565696e74656772616c5f706172745f76616c7565707265636973696f6e6c6f6720617267756d656e74206d757374207065207374726963746c7920706f736974697665696e707574206f7574206f662072616e6765696e70757420746f6f206c6f6e6770616e6963206f636375727265640041f081080b0438ffffff", "report": { "imports": [ "bigFloatAdd", @@ -1433,7 +1433,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/features/composability/builtin-func-features/output/builtin-func-features.mxsc.json b/test/features/composability/builtin-func-features/output/builtin-func-features.mxsc.json index 74208b706..b5ef8c6e8 100644 --- a/test/features/composability/builtin-func-features/output/builtin-func-features.mxsc.json +++ b/test/features/composability/builtin-func-features/output/builtin-func-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "builtin-func-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -99,7 +99,7 @@ "hasCallback": false, "types": {} }, - "code": "0061736d01000000015e0e60027f7f017f60000060017f017f6000017f60027f7f0060017f0060037f7f7f017f60047f7f7f7f017f60047f7f7f7f0060037f7f7f00600b7f7f7f7f7f7f7f7f7e7e7f017f60017f017e60027f7e00600a7f7f7f7f7f7f7f7f7e7f0002bc041703656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000003656e76166d616e616765644372656174654173796e6343616c6c000a03656e76126d427566666572476574417267756d656e74000003656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e76106d4275666665724765744c656e677468000203656e7619626967496e74476574556e7369676e6564417267756d656e74000403656e760b7369676e616c4572726f72000403656e760f6765744e756d417267756d656e7473000303656e760f6d4275666665725365744279746573000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e761776616c6964617465546f6b656e4964656e746966696572000203656e76096d4275666665724571000003656e760e626967496e74536574496e743634000c03656e76126d42756666657253746f726167654c6f6164000003656e76136d42756666657253746f7261676553746f7265000003656e760e636865636b4e6f5061796d656e74000103656e76196d616e6167656447657443616c6c6261636b436c6f73757265000503656e76146d427566666572436f707942797465536c696365000703656e76136d42756666657247657442797465536c696365000703656e76106d616e616765644173796e6343616c6c000803252402000d02030800020306070203000503080409090405020404090001050101010101010105030100030616037f01418080080b7f00419483080b7f0041a083080b07c2010a066d656d6f7279020004696e697400341263616c6c5f7365745f757365725f6e616d6500351563616c6c5f64656c6574655f757365725f6e616d650036217472616e7366657246756e6769626c6550726f6d6973654e6f43616c6c6261636b0037237472616e7366657246756e6769626c6550726f6d6973655769746843616c6c6261636b0038117472616e736665725f63616c6c6261636b00390863616c6c4261636b003a0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020afa12240f01017f10002201200010011a20010b1100200041024f0440200110171a0b20000b1d002000200120022003200420052006200742a0c21e2008200910021a0b0d002000101b220010031a20000b1901017f418c8308418c830828020041016b220036020020000b2e01017f418080084117101d22042000200110041a200441978008410310041a20042002200310041a20041005000b1101017f101b220220002001100b1a20020b3101017f20002802002201419083082802004e0440418d82084106419a80084111101c000b2000200141016a36020020010b080041014100101d0b6701017f230041106b2203240002402000101a220010074104470d002003410036020c200041002003410c6a410410211a200328020c41c58eb1a204470d0041a48108410b101d21000b2000102204402001200241978108410d101c000b200341106a240020000b0f00200020012003200210154100470b1600415841a48108410b100b1a41582000100e41004a0b0e01017f4101101b2200100820000b2101017f4100101a2202100741204704402000200141de81084110101c000b20020b1400100a20004604400f0b41bd800841191009000b0a0041764200100f41760b1f0020022003101d21022000101f36020820002002360204200020013602000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410041a200241106a24000b4901027f2001280204101f21030240200210224504402002101721030c010b200341af81084104100b1a0b20031028200041086a200141086a280200360200200020012902003702000b3301027f2001280204101f1a101b22042002100c1a20041028200041086a200141086a280200360200200020012902003702000b2301017f41ff8208410c101d21022000101f36020420002002360200200020013602080b2301027f200028020421012000280208210220002802002802001026200120021016000b09002000100d4100470bc30101077f230041106b220324002001101b220210101a0240027f410020021007450d001a0240200210074107470d002003410036000b2003410036020820024100200341086a2201410710211a4107210641d7810821040240034020012d0000220720042d00002208460440200141016a2101200441016a2104200641016b22060d010c020b0b200720086b21050b20050d0041010c010b200210220d0141020b21012000200236020420002001360200200341106a24000f0b41978108410d1009000b1c00200110224504402000200110111a0f0b200041af8108410410300b0d00200020012002101d10111a0b180020004102460440200110170f0b41b3810841101009000b1c01017f41ef80084119101d220041888108410f10041a20001005000b3601027f230041106b22012400200141086a41c282084113101d2202102e2000200129030837020020002002360208200141106a24000bbc0101037f230041206b22002400101241021025410041b182084111102021014101419c8208411510202102200041146a103302400240024020002802142000280218101841024704402001102d450d01200028021c20011017102f200041086a41e982084116101d2201102e2000280208200028020c10184102460d022002102d450d03200120021017102f200041206a24000f0b41c3810841141009000b41b3810841101009000b41c3810841141009000b41b3810841101009000b880101057f230041106b22002400101241021025419582084107102421014101101a210220002001360200230041106b22012400200141046a200041d68008410b102720012802082104200128020c2103101f1a200320021017102820012802042102200041046a220020033602082000200436020420002002360200200141106a24002000102c000b5d01027f230041106b2200240010124101102520004195820841071024360200230041106b22012400200141046a200041e18008410e1027200041046a2200200128020c36020820002001290204370200200141106a24002000102c000b8a0101057f230041206b220024001012410210254193820841021024210110232102200041146a22031033200028021420002802181031210420032001102b200041086a2201200320041029200320012002102a200028021c2000280214210220002802182104416741014100100b1a1026200220044101410041014100420041671019200041206a24000bb002010b7f230041206b220024001012410210254193820841021024210210232104200041146a22031033200028021420002802181031210120032002102b200041086a2202200320011029200320022004102a200028021c2000280214210620002802182107101f2103416741014100100b1a416710172104200310072108410021020340200220084f4504402000410036021420032002200041146a2209410410211a20002000280214220141187420014180fe03714108747220014108764180fe037120014118767272220a1007220141187420014180fe03714108747220014108764180fe03712001411876727236021420042009410410041a2004200a10011a200241046a21020c010b0b10262006200741fc8108411141fc8108411142a08d0620041019200041206a24000bb80302067f017e230041106b22012400101f22051013414e41014100100b1a200510072104024002400340200020044704402001410036020420052000200141046a410410210d022005200041046a22022001280204220041187420004180fe03714108747220004108764180fe03712000411876727222031000220010140d03414e20001028200220036a21000c010b0b414e1007044041ab800841121009000b41908308100a360200419083082802004100480440419a800841111009000b20014100360200200141046a21044100210202402001101e10062206428080808010540440027f41002006a7220345200341ebde0146720d001a2001280200419083082802004e0440101f210241010c010b2001101e101a210241010b21002004200236020820042003360204200420003602000c010b418d8208410641ee8108410e101c000b20012802004190830828020048044041ab800841121009000b2001280204210341d582084114101d230041106b220224002002410036000b2002410036020820024102410120034101711b3a000f200241086a41077241011030200241106a2400200141106a24000f0b1032000b1032000b02000b0b9f030200418080080b8b03617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473536574557365724e616d6544656c657465557365724e616d6573657269616c697a6572206465636f6465206572726f723a20696e70757420746f6f2073686f72744553445420657870656374656445474c442d30303030303045474c44496e76616c696420746f6b656e204944546f6b656e20494420616c72656164792073657470656e64696e67626164206172726179206c656e677468696e70757420746f6f206c6f6e677472616e736665725f63616c6c6261636b726573756c74746f616464726573736e6f6e5f66756e6769626c655f746f6b656e5f696466756e6769626c655f746f6b656e5f696466756e6769626c6545736474546f6b656e49646c61746573745472616e73666572526573756c746e6f6e46756e6769626c6545736474546f6b656e4964455344545472616e7366657200418c83080b0438ffffff", + "code": "0061736d01000000015e0e60027f7f017f60000060017f017f6000017f60027f7f0060017f0060037f7f7f017f60047f7f7f7f017f60047f7f7f7f0060027f7e0060037f7f7f00600b7f7f7f7f7f7f7f7f7e7e7f017f60017f017e600a7f7f7f7f7f7f7f7f7e7f0002de041803656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000003656e76166d616e616765644372656174654173796e6343616c6c000b03656e76126d427566666572476574417267756d656e74000003656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e76106d4275666665724765744c656e677468000203656e7619626967496e74476574556e7369676e6564417267756d656e74000403656e760b7369676e616c4572726f72000403656e760f6765744e756d417267756d656e7473000303656e760f6d4275666665725365744279746573000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e761776616c6964617465546f6b656e4964656e746966696572000203656e76096d4275666665724571000003656e760e626967496e74536574496e743634000903656e76126d42756666657253746f726167654c6f6164000003656e76136d42756666657253746f7261676553746f7265000003656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000903656e760e636865636b4e6f5061796d656e74000103656e76196d616e6167656447657443616c6c6261636b436c6f73757265000503656e76146d427566666572436f707942797465536c696365000703656e76136d42756666657247657442797465536c696365000703656e76106d616e616765644173796e6343616c6c000803232202000d0203080002030607020003050308040a0a040502040400050101010101010105030100030616037f01418080080b7f0041a883080b7f0041b083080b07c2010a066d656d6f7279020004696e697400331263616c6c5f7365745f757365725f6e616d6500341563616c6c5f64656c6574655f757365725f6e616d650035217472616e7366657246756e6769626c6550726f6d6973654e6f43616c6c6261636b0036237472616e7366657246756e6769626c6550726f6d6973655769746843616c6c6261636b0037117472616e736665725f63616c6c6261636b00380863616c6c4261636b00390a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020add12220f01017f10002201200010011a20010b1100200041024f0440200110181a0b20000b1d002000200120022003200420052006200742a0c21e2008200910021a0b0d002000101c220010031a20000b1901017f41a0830841a0830828020041016b220036020020000b2e01017f418080084117101e22042000200110041a200441978008410310041a20042002200310041a20041005000b1101017f101c220220002001100b1a20020b3101017f2000280200220141a483082802004e044041a082084106419a80084111101d000b2000200141016a36020020010b080041014100101e0b6701017f230041106b2203240002402000101b220010074104470d002003410036020c200041002003410c6a410410221a200328020c41c58eb1a204470d0041b78108410b101e21000b2000102304402001200241aa8108410d101d000b200341106a240020000b0f00200020012003200210164100470b1600415841b78108410b100b1a41582000100e41004a0b2101017f4100101b2202100741204704402000200141f181084110101d000b20020b0e01017f4101101c2200100820000b1400100a20004604400f0b41bd800841191009000b0a0041764200100f41760b1f0020022003101e21022000102036020820002002360204200020013602000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410041a200241106a24000b4901027f2001280204102021030240200210234504402002101821030c010b200341c281084104100b1a0b20031029200041086a200141086a280200360200200020012902003702000b3301027f200128020410201a101c22042002100c1a20041029200041086a200141086a280200360200200020012902003702000b2301017f41928308410c101e21022000102036020420002002360200200020013602080b2301027f200028020421012000280208210220002802002802001027200120021017000b09002000100d4100470bc30101077f230041106b220324002001101c220210101a0240027f410020021007450d001a0240200210074107470d002003410036000b2003410036020820024100200341086a2201410710221a4107210641ea810821040240034020012d0000220720042d00002208460440200141016a2101200441016a2104200641016b22060d010c020b0b200720086b21050b20050d0041010c010b200210230d0141020b21012000200236020420002001360200200341106a24000f0b41aa8108410d1009000b1900200020011023047f41c281084104101e0520010b10111a0b180020004102460440200110180f0b41c6810841101009000b3601027f230041106b22012400200141086a41d582084113101e2202102f2000200129030837020020002002360208200141106a24000bbc0101037f230041206b22002400101341021026410041c48208411110212101410141af8208411510212102200041146a103202400240024020002802142000280218101941024704402001102e450d01200028021c200110181030200041086a41fc82084116101e2201102f2000280208200028020c10194102460d022002102e450d032001200210181030200041206a24000f0b41d6810841141009000b41c6810841101009000b41d6810841141009000b41c6810841101009000b880101057f230041106b2200240010134102102641a882084107102421014101101b210220002001360200230041106b22012400200141046a200041d68008410b102820012802082104200128020c210310201a200320021018102920012802042102200041046a220020033602082000200436020420002002360200200141106a24002000102d000b5d01027f230041106b22002400101341011026200041a8820841071024360200230041106b22012400200141046a200041e18008410e1028200041046a2200200128020c36020820002001290204370200200141106a24002000102d000b8a0101057f230041206b2200240010134102102641a6820841021024210110252102200041146a22031032200028021420002802181031210420032001102c200041086a220120032004102a200320012002102b200028021c2000280214210220002802182104416741014100100b1a102720022004410141004101410042004167101a200041206a24000bb002010b7f230041206b2200240010134102102641a6820841021024210210252104200041146a22031032200028021420002802181031210120032002102c200041086a220220032001102a200320022004102b200028021c200028021421062000280218210710202103416741014100100b1a416710182104200310072108410021020340200220084f4504402000410036021420032002200041146a2209410410221a20002000280214220141187420014180fe03714108747220014108764180fe037120014118767272220a1007220141187420014180fe03714108747220014108764180fe03712001411876727236021420042009410410041a2004200a10011a200241046a21020c010b0b102720062007418f82084111418f8208411142a08d062004101a200041206a24000bc90302077f017e230041106b22002400102022051014414e41014100100b1a2005100721020240024003402002200647044020004100360204200220066b4104490d0220052006200041046a410410220d0320002802042101200641046a22032005100722044b0d022004200141187420014180fe03714108747220014108764180fe037120014118767272220120036a2206490d022005200320011000220110150d02414e200110290c010b0b414e1007044041ab800841121009000b41a48308100a36020041a483082802004100480440419a800841111009000b20004100360200200041046a21024100210302402000101f10062207428080808010540440027f41002007a7220445200441ebde0146720d001a200028020041a483082802004e04401020210341010c010b2000101f101b210341010b21012002200336020820022004360204200220013602000c010b41a08208410641818208410e101d000b200028020041a4830828020048044041ab800841121009000b2000280204210441e882084114101e41674202420120044101711b1012416710111a200041106a24000f0b41ef80084119101e220041888108410f10041a20001005000b4197810841131009000b02000b0bb2030200418080080b9e03617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473536574557365724e616d6544656c657465557365724e616d6573657269616c697a6572206465636f6465206572726f723a20696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734553445420657870656374656445474c442d30303030303045474c44496e76616c696420746f6b656e204944546f6b656e20494420616c72656164792073657470656e64696e67626164206172726179206c656e677468696e70757420746f6f206c6f6e677472616e736665725f63616c6c6261636b726573756c74746f616464726573736e6f6e5f66756e6769626c655f746f6b656e5f696466756e6769626c655f746f6b656e5f696466756e6769626c6545736474546f6b656e49646c61746573745472616e73666572526573756c746e6f6e46756e6769626c6545736474546f6b656e4964455344545472616e736665720041a083080b0438ffffff", "report": { "imports": [ "bigIntGetUnsignedArgument", @@ -111,6 +111,7 @@ "mBufferCopyByteSlice", "mBufferEq", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -128,12 +129,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/builtin-func-features.wasm", - "size": 3794, + "size": 3816, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/composability/forwarder-barnard/output/forwarder-barnard.mxsc.json b/test/features/composability/forwarder-barnard/output/forwarder-barnard.mxsc.json deleted file mode 100644 index 745a4a401..000000000 --- a/test/features/composability/forwarder-barnard/output/forwarder-barnard.mxsc.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", - "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" - }, - "contractCrate": { - "name": "forwarder-barnard", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.59.0" - } - }, - "abi": { - "name": "ForwarderBarnard", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "sync_call_fallible", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "endpoint_name", - "type": "bytes" - }, - { - "name": "args", - "type": "variadic", - "multi_arg": true - } - ], - "outputs": [] - }, - { - "name": "forward_sync_fallible_accept_funds_multi_transfer", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "payment_args", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "forward_sync_reject_funds_multi_transfer", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "payment_args", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "name": "transfer_fallible", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "payments", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "bool" - } - ] - }, - { - "docs": [ - "Receiver needs to be an endpoint with no arguments, for simplicity." - ], - "name": "transfer_execute_fallible", - "mutability": "mutable", - "inputs": [ - { - "name": "to", - "type": "Address" - }, - { - "name": "endpoint_name", - "type": "bytes" - }, - { - "name": "payments", - "type": "variadic>", - "multi_arg": true - } - ], - "outputs": [ - { - "type": "bool" - } - ] - } - ], - "events": [ - { - "identifier": "sync_call_fallible_success", - "inputs": [ - { - "name": "result", - "type": "List" - } - ] - }, - { - "identifier": "sync_call_fallible_error", - "inputs": [ - { - "name": "error_code", - "type": "u32" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": false, - "types": {} - }, - "code": "0061736d01000000016e1260000060027f7f006000017f60017f017f60027f7f017f60017f0060037f7f7f017f60057f7f7e7f7f017f60027f7e0060067e7f7f7f7f7f017f60047f7f7f7f017f60017f017e6000017e60017e0060067f7e7f7f7f7f0060047f7f7f7f0060057f7f7f7f7f0060037f7f7f0002bb041603656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000403656e762a6d616e61676564457865637574654f6e44657374436f6e74657874576974684572726f7252657475726e000903656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000503656e76106d4275666665724765744c656e677468000303656e760b7369676e616c4572726f72000103656e760f6765744e756d417267756d656e7473000203656e762c6d616e616765644d756c74695472616e73666572455344544e4654457865637574655769746852657475726e000703656e76136d42756666657247657442797465536c696365000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000403656e76196d427566666572546f536d616c6c496e74556e7369676e6564000b03656e76176d427566666572546f426967496e74556e7369676e6564000403656e760f6d4275666665725365744279746573000603656e760e626967496e74536574496e743634000803656e76126d427566666572476574417267756d656e74000403656e760f6d616e6167656457726974654c6f67000103656e76106d616e61676564534341646472657373000503656e760e636865636b4e6f5061796d656e74000003656e760a6765744761734c656674000c03656e760f636c65616e52657475726e44617461000003656e7614736d616c6c496e7446696e6973685369676e6564000d032726030e020f0403020301020505000107031011080101010303020401010505020000000000000005030100030616037f01418080080b7f0041b882080b7f0041c082080b07db010a066d656d6f7279020004696e697400351273796e635f63616c6c5f66616c6c69626c65003631666f72776172645f73796e635f66616c6c69626c655f6163636570745f66756e64735f6d756c74695f7472616e73666572003728666f72776172645f73796e635f72656a6563745f66756e64735f6d756c74695f7472616e736665720038117472616e736665725f66616c6c69626c650039197472616e736665725f657865637574655f66616c6c69626c65003a0863616c6c4261636b003b0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ae916260f01017f10002201200010011a20010b28002000200120022003200420051018220310022202200320021b360204200020024100473602000b1901017f41b0820841b0820828020041016b220036020020000b2e01017f41a180084117101a22042000200110031a200441b88008410310031a20042002200310031a20041004000b1101017f1018220220002001100d1a20020b3b01037f101c210220002802002101034041b4820828020020014a04402000200141016a220336020020022001101d101e200321010c010b0b20020b080041014100101a0b0d00200010182200100f1a20000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410031a200241106a24000b2301017f4100101d22001005412047044041ea8108410241b2810841101019000b20000b190041b4820828020020004c04400f0b41cc800841121006000b1900200041b482082802004c04400f0b41bb800841111006000b0b0041b4820810073602000b0900200020011006000b21002000102504404180800841211023000b2001200020022003200410084100470b070020001005450bb10302067f017e230041206b22052400200541086a41f780084114102720052802082109200528020c2106101c1a200620031016101e200410052103101c22082003410476ad102820062008101e4100210320041005210a03402003200a4f450440200541186a420037030020054200370310200420034110200541106a10091a200528021c21082005290214210b20062005280210220741187420074180fe03714108747220074108764180fe0371200741187672721029101c2207200b423886200b4280fe038342288684200b428080fc0783421886200b42808080f80f834208868484200b42088842808080f80f83200b421888428080fc078384200b4228884280fe0383200b423888848484102820062007101e101c1a10182207200841187420084180fe03714108747220084108764180fe037120084118767272100a1a20062007101e200341106a21030c010b0b0240200110250d00200620011029200520021005360218200541003602142005200236021003402005200541106a102a2005280200410171450d012006200528020410290c000b000b2000200936020020002006360204200541206a24000b180020012002101a21012000101c360204200020013602000bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b100d1a200341106a24000b0d00101c1a200020011016101e0b6201027f230041106b220224002002410b6a2001103020022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b10002000101c360204200020013602000bfd0202037f017e230041206b22012400101c2103200120001005220236020c20014100360208200120003602044100210002400340200020024904400240200141046a102d1016220210054104470d0020014100360210200241004104200141106a10091a200128021041c58eb1a204470d0041a78108410b101a21020b200141046a102d2200100541094f0d022000100b2104200141046a102d10182200100c1a2001200241187420024180fe03714108747220024108764180fe0371200241187672723602102001200442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843702142001200041187420004180fe03714108747220004108764180fe03712000411876727236021c2003200141106a411010031a200128020c2102200128020821000c010b0b200141206a240020030f0b41c28108410841998108410e1019000b6001017f230041106b220124002001410b6a2000103020012d000b4101460440200128000c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b41c28108410841bb800841111019000b0a0041764200100e41760b1201017f101c220220002001101a101e20020b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c2001280200200341042002410c6a10091a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b130020004101710440200110320f0b101c10330b1901027f41fc81084118102f101c22022000ad1028200210100b9b0101047f230041206b2201240041948208411a102f101c1016210220012000100536021820014100360214200120003602100340200141086a200141106a102a200128020841017104402001200128020c22041005220041187420004180fe03714108747220004108764180fe03712000411876727236021c20022001411c6a410410031a2002200410011a0c010b0b20021010200141206a24000b0c01017f10182200101120000b120010121007044041de800841191006000b0bd30102047f017e230041306b220024001012102241021021101f21024101101d210120004102360224200041246a101b21032000280224102010132104200041186a2001102b20002802182101200041106a20044201882002102e20012003101720002802102101200028021421021014024002402001410171450440101c210120002002100536022c20004100360228200020023602240340200041086a200041246a102a2000280208410171450d022001200028020c1016101e0c000b000b200210320c010b200110330b200041306a24000bb00102057f017e230041206b220024001012102241011021101f21022000410136021c2000411c6a101b200028021c1020200041106a41ca8108410c10272000280214210320002802102104102c210110132105200041086a20042003200220011026200028020c2102200028020821012000200542a08d067d2005200542a08d06561b1034102e20012002101720002802042101200028020021021014200220011031200245ad1015200041206a24000b9c0102037f017e230041206b220024001012102241011021101f21012000410136021c2000411c6a101b2102200028021c102010132103200041106a41d68108410c1027200041086a2000280210200028021420012002102c1026200028020c210120002802082102200020034201881034102e20022001101720002802042102200028020021011014200120021031200145ad1015200041206a24000b5301037f230041106b220024001012102241011021101f21022000410136020c2000410c6a101b200028020c1020102c2000101c102b20024200200028020020002802041024410173ad1015200041106a24000b910102057f017e230041106b220024001012102241021021101f21034101101d21022000410236020c2000410c6a101b200028020c102010132105102c210120002002102b200028020421020240200028020022041025450440200542018821050c010b4200210520011025450d00418b8108410e1023000b200120032005200420021024410173ad1015200041106a24000b02000b0bc2020200418080080bae027472616e736665722065786563757465207265717569726573207061796d656e74617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74734d756c7469455344544e46545472616e73666572656d707479207472616e73666572696e70757420746f6f206c6f6e6745474c442d303030303030626164206172726179206c656e67746876617220617267736163636570745f66756e647372656a6563745f66756e64737061796d656e7473746f617267737061796d656e745f6172677373796e635f63616c6c5f66616c6c69626c655f6572726f7273796e635f63616c6c5f66616c6c69626c655f737563636573730041b082080b0438ffffff", - "report": { - "imports": [ - "bigIntSetInt64", - "checkNoPayment", - "cleanReturnData", - "getGasLeft", - "getNumArguments", - "mBufferAppend", - "mBufferAppendBytes", - "mBufferFromBigIntUnsigned", - "mBufferGetArgument", - "mBufferGetByteSlice", - "mBufferGetLength", - "mBufferNew", - "mBufferSetBytes", - "mBufferToBigIntUnsigned", - "mBufferToSmallIntUnsigned", - "managedExecuteOnDestContextWithErrorReturn", - "managedMultiTransferESDTNFTExecuteWithReturn", - "managedSCAddress", - "managedSignalError", - "managedWriteLog", - "signalError", - "smallIntFinishSigned" - ], - "isMemGrow": false, - "eiCheck": { - "eiVersion": "1.5", - "ok": true - }, - "codeReport": { - "path": "../output/forwarder-barnard.wasm", - "size": 4238, - "hasAllocator": false, - "hasPanic": "None" - } - } -} diff --git a/test/features/composability/forwarder-queue/output/forwarder-queue-promises.mxsc.json b/test/features/composability/forwarder-queue/output/forwarder-queue-promises.mxsc.json index cd373b4c9..da5d1db5b 100644 --- a/test/features/composability/forwarder-queue/output/forwarder-queue-promises.mxsc.json +++ b/test/features/composability/forwarder-queue/output/forwarder-queue-promises.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder-queue", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -444,7 +444,7 @@ } } }, - "code": "0061736d01000000019c011860027f7f0060017f017f60000060027f7f017f6000017f60017f0060037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60057f7f7e7f7f017f60057f7f7e7f7f0060017f017e60067e7f7f7f7f7f017f600b7f7f7f7f7f7f7f7f7e7e7f017f6000017e60017e0060047f7f7f7e0060057e7f7f7f7f0060027e7f0060027f7f017e60037f7e7f0002bc072603656e760e626967496e74536574496e743634000903656e7609626967496e74416464000603656e76106d4275666665724765744c656e677468000103656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000303656e76176d427566666572546f426967496e74556e7369676e6564000303656e761b6d616e616765645472616e7366657256616c756545786563757465000c03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000c03656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e760f6d4275666665725365744279746573000a03656e760b7369676e616c4572726f72000003656e7612626967496e7447657443616c6c56616c7565000503656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000a03656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000e03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e7611676574417267756d656e744c656e677468000103656e760f6765744e756d417267756d656e7473000403656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000f03656e76166d616e616765644372656174654173796e6343616c6c001003656e760a626967496e745369676e000103656e76146d427566666572436f707942797465536c696365000b03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e760f6d616e6167656457726974654c6f67000003656e76106d616e61676564534341646472657373000503656e760e636865636b4e6f5061796d656e74000203656e760d6d42756666657246696e697368000103656e760a6765744761734c656674001103656e760f636c65616e52657475726e44617461000203656e7616736d616c6c496e7446696e697368556e7369676e6564001203656e76196d616e6167656447657443616c6c6261636b436c6f73757265000503656e76126d616e61676564427566666572546f486578000003656e76136d42756666657247657442797465536c696365000b03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0007037271000001040001040000010000000103030001000d010b000105010001010107030101000105020502000407000804080806000900130008070709001408030a0706010004010001000606031500060600060306031601000003010d0402071704040202020202020202020202020202050505030100030616037f01418080080b7f0041f984080b7f00418085080b07cf0210066d656d6f7279020004696e69740087010c7175657565645f63616c6c73008801146164645f7175657565645f63616c6c5f73796e63008a011c6164645f7175657565645f63616c6c5f6c65676163795f6173796e63008b01206164645f7175657565645f63616c6c5f7472616e736665725f65786563757465008c011d6164645f7175657565645f63616c6c5f7472616e736665725f65736474008d01176164645f7175657565645f63616c6c5f70726f6d697365008e010f6164645f7175657565645f63616c6c008f0114666f72776172645f7175657565645f63616c6c730090010e63616c6c6261636b5f636f756e740091011163616c6c6261636b5f7061796d656e74730092011870726f6d697365735f63616c6c6261636b5f6d6574686f640093010863616c6c4261636b0094010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01030aac5a711a00200041ff017141027441d084086a2802002d0000200110270b2701017f230041106b22022400200220003a000f20012002410f6a4101100d1a200241106a24000b1601017f1029220142001000200120012000100120010b1901017f41f0840841f0840828020041016b220036020020000beb0102077f017e230041206b2202240020012d001c21062001280210102b2107200129030821092001280214102b2108102c2105200220012802182203100236021c20024100360218200220033602140340200241086a200241146a102d200228020841017104402005200228020c102b102e0c010b0b4101210320012802042104027f200128020041014604402004102f0c010b41002103200410280b2104200020063a001c2000200536021820002008360214200020073602102000200937030820002004360204200020033602002000200128022836022820002001290320370320200241206a24000b0f01017f10032201200010041a20010b08004101410010450b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a4104103b1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100d1a200241106a24000b870102037f017e230041406a22012400102c2102200120001002360214200141003602102001200036020c0340200141186a2001410c6a1030200128021841014745044020012903202104200128022c21002001280228102b210320012000102836023c20012004370330200120033602382002200141306a10310c010b0b200141406b240020020b5501017f230041306b220224002002411f6a20011040200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a106842010542000b370300200241306a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100d1a200341106a24000b1d002000200110332201100236020820004100360204200020013602000b0d0020001029220010181a20000b11002000200110351029220010051a20000b0e002000200020011063200110640b0a0020001037200110380b0f01017f10292201200010171a20010b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100d1a2001200010041a200241106a24000b980101027f230041306b220524000240200110020440200541286a42003703002005420037032002402001103a4101470d0020014100200541206a22064110103b1a200541106a2006103c200528021c21062005280218103d450d002000200620022003200410061a0c020b2000200120022003200410071a0c010b10292201420010002000200120022003200410061a0b200541306a24000b0900200010024104760b0f00200020012003200210234100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841b78008410b10091a200010410bcb0101037f230041206b220124004102103f450440415a10080b02404104103f0d00415841b78008410b10091a2001415a1002360208200142daffffff0f37020003402001410f6a2001104020012d000f4101470d012001280010220241187420024180fe03714108747220024108764180fe0371200241187672721041450d000b419f80084118100a000b027f415a1042450440415a102f210341010c010b4101103f450440415d100b0b415d1028210341000b21022000200336020420002002360200200141206a24000b2b01027f200041f884082d0000220171200041ff017146220245044041f8840820002001723a00000b20020b7001037f230041106b22022400200020012802042204200128020849047f200241086a22034200370300200242003703002001280200200420024110103b1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102441004a0b070020001002450b0d00200010292200100c1a20000b2e01017f41c2800841171045220420002001100d1a200441d980084103100d1a200420022003100d1a2004100e000b1101017f102922022000200110091a20020b3c01037f102c2102200028020021010340200141f484082802004e4504402000200141016a2203360200200220011043102e200321010c010b0b20020b4901017f230041106b220124000240200010024104470d002001410036020c200041002001410c6a4104103b1a200128020c41c58eb1a204470d00106921000b200141106a240020000b1b01017f2001103d210220002001360204200020024101733602000b21002000104322001002412047044041b9830841024191830841101044000b20000b190041f4840828020020004c04400f0b41ed80084112100a000b120010124504400f0b41ff80084119100a000b1900200041f484082802004c04400f0b41dc80084111100a000b0b0041f4840810123602000b090020002001100a000b0a0041764200100041760b0d0020002001200220031025000b6501017f230041306b22022400200241286a42003703002002420037032020014100200241206a22014110103b450440200241106a20011068200041086a200241186a29030037030020002002290310370300200241306a24000f0b419e8208411d100a000b8c0201047f230041f0006b22052400200541186a41d281084114105620052802182107200528021c2206200310572004103a2103102c22082003ad105820062008102e20052004100236022c2005410036022820052004360224200541386a2104200541e0006a21030340200541df006a200541246a104020052d005f410147450440200541d0006a200341086a290000370300200520032900003703482004200541c8006a103c20052802442108200620052802401059200541086a200720062005290338105a20052802082107200528020c22062008105b0c010b0b200541106a2007200620012002105c200528021421012000200528021036020020002001360204200541f0006a24000b0c01017f10292200101b20000b7101017f230041206b22052400200541186a41f58108410c1056200541106a2005280218200528021c2003105d200541086a200528021020052802142004105e20052005280208200528020c20012002105c200528020421012000200528020036020020002001360204200541206a24000ba30101027f230041306b22052400200541286a41e68108410f1056200541206a2005280228200528022c2004280208105d200541186a200528022020052802242004290300105a200541106a2005280218200528021c200428020c105e2005280210210620052802142104102c1a20042003102b102e200541086a2006200420012002105c200528020c21012000200528020836020020002001360204200541306a24000b180020012002104521012000102c360204200020013602000b1000102c1a20002001280200102b102e0b2f01017f230041106b2202240020022001200241086a10840120002002280200200228020410091a200241106a24000b0d00102c1a20002001102b102e0b160020022003105f20002002360204200020013602000b0d00102c1a200020011037102e0b6e01017f230041206b220524000240200310420d0020022003105920052004100236021c20054100360218200520043602140340200541086a200541146a102d2005280208410171450d012002200528020c10590c000b000b2000200236020420002001360200200541206a24000b160020022003105720002002360204200020013602000b160020022003106020002002360204200020013602000b1201017f102c22022001105820002002102e0b1000102c1a200020012802001037102e0b110020002001200220032004102910131a0b370020012002200320042000280200220120002802042202200120022000280208290300200028020c290300200028021028020010141a0b5101017f230041106b220224002002410036020c20002002410c6a41042001108301200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001106520032802084101710440200328020c2000200120046a360204200341106a24000f0b2002418f8208410f1066000b1f0020012002200310032201101621022000200136020420002002453602000b2c01017f41e98208411b10452203200010041a200341d980084103100d1a200320012002100d1a2003100e000b070020001015450bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b0a0041b78008410b10450b0d002000416710181a416710020b4701017f2000106c21022001280200220004402000102c2200106d20012802042000106d20012802082000106d200128020c2000106d2002200010191a0f0b200241014100106e0b13002000102b220041e482084105100d1a20000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104100d1a200241106a24000b0d00200020012002104510191a0b6800200020011070102c210020022d001c200010262000200228021010041a200229030820001071200228021420001038200228021820001072200228020020022802042000107320022802202000106d20022802242000106d20022802282000106d200010191a0b5701017f230041106b220224002000102b220041df82084105100d1a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100d1a200241106a240020000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100d1a200241106a24000b5b01017f230041206b22022400200010024102762001106d20022000100236021c20024100360218200220003602140340200241086a200241146a102d20022802084101710440200228020c200110380c010b0b200241206a24000ba70101017f230041306b220324000240200041017104404101200210272001103a2002106d200320011002360214200341003602102003200136020c0340200341186a2003410c6a103020032802184101470d02200328022c024020032802282201103d4504402001200210380c010b41042002106d200241db82084104100d1a0b200329032020021071200210360c000b000b4100200210272001200210360b200341306a24000bc80601077f230041406a220424002004200110752004200428020c41016a220736020c024020042802002203450440200420073602040c010b200441106a2205200120042802082208107620042007360234200120082005106f0b200441286a200241186a290300370300200441206a200241106a290300370300200441186a200241086a2903003703002004200836023820044100360234200420073602302004200229030037031020012007200441106a2202106f2004200341016a3602002004200736020820012004106b20022101024020002000410020006b41037122056a22064f0d00200021032002210020050440200521020340200320002d00003a0000200041016a2100200341016a2103200241016b22020d000b0b200541016b4107490d000340200320002d00003a0000200341016a200041016a2d00003a0000200341026a200041026a2d00003a0000200341036a200041036a2d00003a0000200341046a200041046a2d00003a0000200341056a200041056a2d00003a0000200341066a200041066a2d00003a0000200341076a200041076a2d00003a0000200041086a2100200341086a22032006470d000b0b2006413020056b2209417c7122076a21030240200120056a2200410371450440200320064d0d0120002102034020062002280200360200200241046a2102200641046a22062003490d000b0c010b200320064d0d002000410374220141187121082000417c71220541046a2102410020016b4118712101200528020021050340200620052008762002280200220520017472360200200241046a2102200641046a22062003490d000b0b200020076a2102024020032009410371220120036a22054f0d002001220004400340200320022d00003a0000200241016a2102200341016a2103200041016b22000d000b0b200141016b4107490d000340200320022d00003a0000200341016a200241016a2d00003a0000200341026a200241026a2d00003a0000200341036a200241036a2d00003a0000200341046a200241046a2d00003a0000200341056a200241056a2d00003a0000200341066a200241066a2d00003a0000200341076a200241076a2d00003a0000200241086a2102200341086a22032005470d000b0b200441406b24000b910101057f230041106b22022400024002402001106c2201106a4504400c010b200241046a2203200110322003200110632106200241046a200110632103200241046a200110632104200241046a200110632105200228020c2002280208470d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141918008410e1066000bc50302097f027e230041306b22032400200341146a22042001200210702201103202400240200420011079220841ff017141044904402004412020011064210920042001107a210c200420011035210a2004200110632102102c21070340200204402007200341146a20011035102e200241016b21020c010b0b027f024002400240200341146a2001107941ff01710e020102000b200141808008410d1066000b200341146a20011034210441000c010b200341146a200110632102102c2104034020020440200341086a200341146a220520011035104710482003280208410171450d04200328020c210620052001107a210d200320052001103436022c200320063602282003200d3703202004200341206a1031200241016b21020c010b0b41010b2102200341146a200110632106200341146a200110632105200341146a20011063210b200328021c2003280218470d022000200b3602282000200536022420002006360220200020083a001c200020073602182000200a360214200020093602102000200c3703082000200436020420002002360200200341306a24000f0b200141808008410d1066000b200141848308410d1066000b200141918008410e1066000b0b00200020011070106a450b1c0020012002107745044020002001200210760f0b200041023602000b2e01017f230041106b22022400200241003a000f20002002410f6a4101200110830120022d000f200241106a24000b850102017e017f230041106b22032400200342003703082000200341086a4108200110830120032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840bbe0102017e037f230041106b2202240020024200370308024020001033220410022203410949044020044100200220036b41106a2003103b1a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d01200241106a24002001a70f0b200041918008410e1066000b200041918008410e1066000b1701017f102c22022001ad42ff0183105820002002102e0b5901017f230041206b2202240020022001100236021c20024100360218200220013602140340200241086a200241146a102d20022802084101710440200228020c2101102c1a20002001102b102e0c010b0b200241206a24000b1201017f102c2202200020011045102e20020bc60101067f230041d0006b22012400102c210220012000100236020c2001410036020820012000360204200141186a2105200141406b210303402001413f6a200141046a104020012d003f410147450440200141306a200341086a290000370300200120032900003703282005200141286a10682001280224210620012802202104102c210002402004103d4504402004102b21000c010b200041db8208410410091a0b20022000102e20022001290318105f20022006105b0c010b0b200141d0006a240020020bee0101037f230041f0006b220524002005200336021420052001360210200541086a103e2005200528020c220636021c2005200528020822073602180240200741017104402006102f107f2107418984084114107e22062000107c2006200541106a10572006200541146a105720062007107d0c010b41f583084114107e22062000107c2006200541106a10572006200541146a105720062005411c6a10600b2006102c101a1081012106200520003a006c2005200136026020052004360268200520033602642005200237035820052005290218370350200541206a2006200541d0006a1074200541f0006a24000b0a0041ca8308410c10450b1c01017f41b98108411910452200418f8208410f100d1a2000100e000b2e01017f20002802002000280204220420012002103b04402003418f8208410f1066000b2000200220046a3602040bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b0a0041d68308410e10450b0a0041e48308411110450b0600101c104b0bd50102097f017e230041f0006b22002400101c104b20001081012201360204200041406b20011075200041086a2001200028024410782000200041046a22023602380240034020002802084102470440200041406b200041086a2203102a200028024022044102460d02200028024421052000280258200028025420002903482000280250210820002d005c2003200228020020002802641078410141001045220110262001200810041a20011071200110382001107220042005200110732001101d1a0c010b0b200041f0006a24000f0b108901000b0b0041e08408410e100a000b070041001095010b070041011095010b070041021096010beb0102077f017e230041d0006b22002400104d4105104c4100104921034101100f2107410210432104230041106b22012400200141086a4103104310471048200128020841017145044041c48308410541848308410d1044000b200128020c2102200141106a24004104102922051010200041053602002000104621062000280200104a102c21012000200536020c2000420037030020002002360208200120001031108101210220002003360240200041033a004c200020063602482000200436024420002007370338200020013602342000410136023020002002200041306a1074200041d0006a24000b070041031096010b9d0102057f017e230041106b22002400104d4104104c027f0240024041001011047f4100100f22054280025a0d01200542045a0d022005a70541000b0c020b41bb8308410941918008410e1044000b41bb8308410941808008410d1044000b4101104921024102100f21054103104321032000410436020c2000410c6a10462104200028020c104a41ff01712002200520032004108001200041106a24000bdb1602187f017e230041a0026b22002400104b200041f0016a210c200041a4016a210e200041a0016a2105200041e8016a2201210f200041ec016a211220004180026a210d200041e4016a2110200041e0016a2107200041bc016a2109200041fc006a2111200041f8006a2106200041e8006a4104722113200041386a410472210a2001410472210b02400340200041e8006a108101220110750240024002402001200028026c22021077450440200041e8016a220420012002107820002802e80122144102460d01200041b0016a2215200b41186a280200360200200041a8016a2216200b41106a2902003703002005200b41086a2902003703002000200b29020037039801200028028c02210220002802900221032000280294022117200120002802880222081077450440200041386a2001107502402003044020042001200310762000200236028c02200120032004106f0c010b2000200236023c0b024020020440200041e8016a22042001200210762000200336029002200120022004106f0c010b200020033602400b20012008107041014100106e2000200028023841016b3602382001200041386a106b0b200a200029039801370200200a41186a2015280200360200200a41106a2016290300370200200a41086a200529030037020020002017360264200020033602602000200236025c2000200836025820002014360238200041e8016a200041386a102a20004180016a200d2903003703002006200041f8016a290300370300200041f0006a200c290300370300200020002903e801221837036802402018a74101710440200028026c102f107f210241b584084118107e220120002d008401107c20012006105720012011105720012002107d0c010b419d84084118107e220120002d008401107c2001200610572001201110572001201310600b2001102c101a200028027c21012000102c220436029401200020013602900120002006360288012000200041e8006a36028c01024002400240024020002d00840141016b0e03010203000b200720004190016a29020037030020002000290288013703d8012000101e221842a08d067d2018201842a08d06561b22183703d0012007280200210120002802e401210220002802d8012103024020002802dc01220428020041014604400240024002402004280204103a0e020102000b200020012002200320042802041052200028020421012000280200210210532103104f210420002903d001200320042002200110610c030b104f210420002903d001200328020020042001200210610c020b20004198016a2004280204105120002903980121182000200e3602fc01200020053602f801200020183703f0012000200f360288022000200f36028402200020023602ec01200020013602e8012000200041d0016a360280022018500440200041086a200120022005200e1054200028020c210120002802082102104f210420002903d001200328020020042002200110610c020b200041106a200120022003280200200c1055200028021421012000280210210210532103104f210420002903d001200320042002200110610c010b2018200328020020042802042001200210610b101f0c070b20004188016a22012802042107200141106a220021042001280200210220012802082103200128020c2106200741046a210520072802004101710440230041306b2201240002400240024020052802002207103a0e020102000b2001200636022820012003360224200120043602202001200036021c20012005360218230041106b22002400200041086a200141186a220128020c20012802102002200128020028020010520c0a0b2002280200104f200320061050000b200141186a200710512001200141206a3602102001200141246a3602142001200129031837030820022802002105230041206b22022400200241106a200141086a220141086a2903003703002002200436021c20022000360218200220063602042002200336020020022001290300370308230041106b220024002002280204210120022802002103200229030850044020002003200120022802102002280214105420002802042101200028020021002005104f200020011050000b200041086a200320012005200241086a10550c080b230041206b220024002000200536020c2000200636021c200020033602182000200436021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a22002802002802002003280200280200200028020420002802081050000b2000290370211820011042450d04200028026c2102024020002802684101460440200210420d010c050b20021067450d040b41818208410e104e000b200029037021182000280280012102102c2103200020063602b401200020033602b001200041183602ac01200041a183083602a801200020023602a401200020013602a00120002018370398012000200041e8006a3602b801200041673602c40141674101410010091a20002802c401102b2101200020002802b001220210023602f001200041003602ec01200020023602e8010340200041306a200041e8016a102d200028023041017104402000200028023422031002220241187420024180fe03714108747220024108764180fe0371200241187672723602d8012001200041d8016a4104100d1a2001200310041a0c010b0b200020013602c401200042003703c80120002000290398013703d00120002802b801220841046a210420002802a401210120002802a001210220002802b4012103200828020041014604400240024002402004280200103a0e020102000b2000200136028c02200020023602880220002009360284022000200936028002200041183602f001200041a183083602ec012000200041c4016a3602fc012000200041c8016a3602f8012000200041d0016a3602f401200020043602e801200041186a20022001200320042802001052200028021c21012000280218210220121053104f2002200110620c070b2000200136028002200020023602fc01200041183602ec01200041a183083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f001104f2104200041e8016a200328020020042002200110620c060b200041d8016a2004280200105120002903d8012118200020103602fc01200020073602f801200020183703f001200020093602980220002009360294022000411836028402200041a1830836028002200020013602ec01200020023602e8012000200041c4016a360290022000200041c8016a36028c022000200041d0016a360288022018500440200041206a200220012007201010542000280224210120002802202102104f2104200d200328020020042002200110620c060b200041286a200220012003280200200c1055200028022c210120002802282102200d1053104f2002200110620c050b20002001360284022000200236028002200041183602ec01200041a183083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00120042802002104200020033602fc01200041e8016a200328020020042002200110620c040b200041a0026a24000f0b108901000b420021180b200028026841014604402000280278200028026c20182001200410390c010b200028026c1067450440102c2108200028026c1028210210692103200042003702ec012000200241187420024180fe03714108747220024108764180fe0371200241187672723602f4012000200341187420034180fe03714108747220034108764180fe0371200341187672723602e8012008200041e8016a4110100d1a2000280278200820182001200410390c010b0b419881084121104e000b200028020c2101200028020821001053104f200020011050000b0e00101c104b108501107bad10200b0e00101c104b1086011033101d1a0bf00201057f230041406a22002400102c22021021414e4101410010091a200210022103024002400340200120034704402000410036023020022001200041306a4104103b0d02200041286a2002200141046a22042000280230220141187420014180fe03714108747220014108764180fe037120014118767272220110652000280228410171450d03414e200028022c102e200120046a21010c010b0b414e1002044041ed80084112100a000b200041206a1085012202107b41016aad200041306a108401200220002802202000280224106e200041186a103e41bb8208412010451a200041106a41014100105620002802142101200028021021034101410010452202200310041a20002001100236023820004100360234200020013602300340200041086a200041306a102d20002802084101710440200028020c200241c983084101100d1a416710222002416710041a0c010b0b108601200210191a200041406b24000f0b108201000b108201000b02000b4a01047f230041106b22012400104d4102104c4100104921024101104321032001410236020c2001410c6a10462104200128020c104a20002002420020032004108001200141106a24000b5202047f017e230041106b22012400104d4103104c4100104921024101100f21054102104321032001410336020c2001410c6a10462104200128020c104a20002002200520032004108001200141106a24000b0bea040300418080080bbb02696e76616c69642076616c756500010203696e70757420746f6f206c6f6e67756e65787065637465642045474c44207472616e7366657245474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74737472616e736665722065786563757465207265717569726573207061796d656e7473657269616c697a6572206465636f6465206572726f723a204d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e73666572696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67650041db82080b930245474c442e6e6f64652e696e666f73746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564626164206172726179206c656e67746870726f6d697365735f63616c6c6261636b5f6d6574686f64746f63616c6c5f74797065746f6b656e407175657565645f63616c6c7363616c6c6261636b5f636f756e7463616c6c6261636b5f7061796d656e74736164645f7175657565645f63616c6c5f65676c646164645f7175657565645f63616c6c5f65736474666f72776172645f7175657565645f63616c6c5f65676c64666f72776172645f7175657565645f63616c6c5f657364740000000d0002000e0002000f0002001000020070616e6963206f636375727265640041f084080b0438ffffff", + "code": "0061736d010000000196011760027f7f0060017f017f60000060027f7f017f60017f006000017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60017f017e60057f7f7e7f7f017f60067e7f7f7f7f7f017f600b7f7f7f7f7f7f7f7f7e7e7f017f6000017e60017e0060047f7f7f7e0060057e7f7f7f7f0060027e7f0060027f7f017e60057f7f7e7f7f0002fe072803656e760e626967496e74536574496e743634000903656e7609626967496e74416464000603656e76106d4275666665724765744c656e677468000103656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000303656e76176d427566666572546f426967496e74556e7369676e6564000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6d4275666665725365744279746573000a03656e760b7369676e616c4572726f72000003656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000a03656e76126d616e616765645369676e616c4572726f72000403656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e7611676574417267756d656e744c656e677468000103656e760f6765744e756d417267756d656e7473000503656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000e03656e76166d616e616765644372656174654173796e6343616c6c000f03656e76146d427566666572436f707942797465536c696365000b03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e760f6d616e6167656457726974654c6f67000003656e76106d616e61676564534341646472657373000403656e760e636865636b4e6f5061796d656e74000203656e760d6d42756666657246696e697368000103656e760a6765744761734c656674001003656e760f636c65616e52657475726e44617461000203656e760a626967496e745369676e000103656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000d03656e761b6d616e616765645472616e7366657256616c756545786563757465000d03656e7616736d616c6c496e7446696e697368556e7369676e6564001103656e76196d616e6167656447657443616c6c6261636b436c6f73757265000403656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000903656e76126d616e61676564427566666572546f486578000003656e76136d42756666657247657442797465536c696365000b03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0007036c6b0000010500010500000100000001030300010004010001010107030101000104020402050701000805080806000900120008070700091308030a0706070b00010100010004060314000606000603060315010000030116050705050202020202020202020202020202040405030100030616037f01418080080b7f0041f984080b7f00418085080b07cf0210066d656d6f7279020004696e69740083010c7175657565645f63616c6c73008401146164645f7175657565645f63616c6c5f73796e630086011c6164645f7175657565645f63616c6c5f6c65676163795f6173796e63008701206164645f7175657565645f63616c6c5f7472616e736665725f657865637574650088011d6164645f7175657565645f63616c6c5f7472616e736665725f65736474008901176164645f7175657565645f63616c6c5f70726f6d697365008a010f6164645f7175657565645f63616c6c008b0114666f72776172645f7175657565645f63616c6c73008c010e63616c6c6261636b5f636f756e74008d011163616c6c6261636b5f7061796d656e7473008e011870726f6d697365735f63616c6c6261636b5f6d6574686f64008f010863616c6c4261636b0090010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01030a8c586b1a00200041ff017141027441d084086a2802002d0000200110290b2701017f230041106b22022400200220003a000f20012002410f6a4101100b1a200241106a24000b1601017f102b220142001000200120012000100120010b1901017f41f0840841f0840828020041016b220036020020000beb0102077f017e230041206b2202240020012d001c21062001280210102d2107200129030821092001280214102d2108102e2105200220012802182203100236021c20024100360218200220033602140340200241086a200241146a102f200228020841017104402005200228020c102d10300c010b0b4101210320012802042104027f20012802004101460440200410310c010b410021032004102a0b2104200020063a001c2000200536021820002008360214200020073602102000200937030820002004360204200020033602002000200128022836022820002001290320370320200241206a24000b0f01017f10032201200010041a20010b08004101410010420b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410651a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100b1a200241106a24000b870102037f017e230041406a22012400102e2102200120001002360214200141003602102001200036020c0340200141186a2001410c6a1032200128021841014745044020012903202104200128022c21002001280228102d210320012000102a36023c20012004370330200120033602382002200141306a10330c010b0b200141406b240020020b5501017f230041306b220224002002411f6a2001103d200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a106642010542000b370300200241306a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100b1a200341106a24000b1d002000200110352201100236020820004100360204200020013602000b0d002000102b220010151a20000b1100200020011037102b220010051a20000b0e002000200020011060200110610b0a00200010392001103a0b0f01017f102b2201200010141a20010b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100b1a2001200010041a200241106a24000bcb0101037f230041206b220124004102103c450440415a10060b02404104103c0d00415841b78008410b10071a2001415a1002360208200142daffffff0f37020003402001410f6a2001103d20012d000f4101470d012001280010220241187420024180fe03714108747220024108764180fe037120024118767272103e450d000b419f800841181008000b027f415a103f450440415a1031210341010c010b4101103c450440415d10090b415d102a210341000b21022000200336020420002002360200200141206a24000b2b01027f200041f884082d0000220171200041ff017146220245044041f8840820002001723a00000b20020b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010651a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102641004a0b070020001002450b0d002000102b2200100a1a20000b2e01017f41c2800841171042220420002001100b1a200441d980084103100b1a200420022003100b1a2004100c000b1101017f102b22022000200110071a20020b3c01037f102e2102200028020021010340200141f484082802004e4504402000200141016a22033602002002200110401030200321010c010b0b20020b4f01017f230041106b220124000240200010024104470d002001410036020c200041002001410c6a410410651a200128020c41c58eb1a204470d0041b78008410b104221000b200141106a240020000b1b01017f20011067210220002001360204200020024101733602000b21002000104022001002412047044041b9830841024191830841101041000b20000b190041f4840828020020004c04400f0b41ed800841121008000b120010104504400f0b41ff800841191008000b1900200041f484082802004c04400f0b41dc800841111008000b0b0041f4840810103602000b0a0041764200100041760b0d0020002001200220031027000b0900200010024104760b6b01017f230041306b22022400200241286a4200370300200242003703202001100241104f044020014100200241206a220141101064200241106a20011066200041086a200241186a29030037030020002002290310370300200241306a24000f0b419e8208411d1008000bef0202047f017e230041406a22052400200541186a41b181084114105320052802182107200528021c220620031054200410022103102e22082003410476ad1055200620081030200520041002360228200541003602242005200436022003402005412f6a200541206a103d20052d002f410147450440200528003c21032005290034210920062005280030220441187420044180fe03714108747220044108764180fe0371200441187672721056200541086a20072006200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484105720052802082107200528020c2206200341187420034180fe03714108747220034108764180fe03712003411876727210580c010b0b200541106a20072006200120021059200528021421012000200528021036020020002001360204200541406b24000b0c01017f102b2200101920000b7101017f230041206b22052400200541186a41d48108410c1053200541106a2005280218200528021c2003105a200541086a200528021020052802142004105b20052005280208200528020c200120021059200528020421012000200528020036020020002001360204200541206a24000ba30101027f230041306b22052400200541286a41c58108410f1053200541206a2005280228200528022c2004280208105a200541186a2005280220200528022420042903001057200541106a2005280218200528021c200428020c105b2005280210210620052802142104102e1a20042003102d1030200541086a20062004200120021059200528020c21012000200528020836020020002001360204200541306a24000b180020012002104221012000102e360204200020013602000b1000102e1a20002001280200102d10300bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10071a200341106a24000b0d00102e1a20002001102d10300b160020022003105d20002002360204200020013602000b0d00102e1a20002001103910300b6e01017f230041206b2205240002402003103f0d0020022003105620052004100236021c20054100360218200520043602140340200541086a200541146a102f2005280208410171450d012002200528020c10560c000b000b2000200236020420002001360200200541206a24000b160020022003105420002002360204200020013602000b160020022003105c20002002360204200020013602000b1000102e1a20002001280200103910300b1201017f102e2202200110552000200210300b110020002001200220032004102b10111a0b370020012002200320042000280200220120002802042202200120022000280208290300200028020c290300200028021028020010121a0b5101017f230041106b220224002002410036020c20002002410c6a41042001108001200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001106220032802084101710440200328020c2000200120046a360204200341106a24000f0b200241fc8108410f1063000b3701037f200110022205200249200220036a20054b724504402001200220031003220610134521040b20002006360204200020043602000b2c01017f41e98208411b10422203200010041a200341d980084103100b1a200320012002100b1a2003100c000b1a00200020012002200310654504400f0b418b820841131008000b0f00200020012003200210254100470bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841b78008410b10071a2000103e0b0d002000416710151a416710020b4301017f2000106a21022001280200220004402000102e2200106b20012802042000106b20012802082000106b200128020c2000106b2002200010161a0f0b2002106c0b13002000102d220041e482084105100b1a20000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a4104100b1a200241106a24000b0d00200041014100104210161a0b680020002001106e102e210020022d001c200010282000200228021010041a20022903082000106f20022802142000103a200228021820001070200228020020022802042000107120022802202000106b20022802242000106b20022802282000106b200010161a0b5701017f230041106b220224002000102d220041df82084105100b1a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100b1a200241106a240020000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100b1a200241106a24000b5b01017f230041206b22022400200010024102762001106b20022000100236021c20024100360218200220003602140340200241086a200241146a102f20022802084101710440200228020c2001103a0c010b0b200241206a24000ba70101017f230041306b220324000240200041017104404101200210292001104d2002106b200320011002360214200341003602102003200136020c0340200341186a2003410c6a103220032802184101470d02200328022c024020032802282201106745044020012002103a0c010b41042002106b200241db82084104100b1a0b20032903202002106f200210380c000b000b4100200210292001200210380b200341306a24000bbc08010c7f230041406a220424002004200110732004200428020c41016a220336020c024020042802002207450440200420033602040c010b200441106a2206200120042802082205107420042003360234200120052006106d0b200441286a200241186a290300370300200441206a200241106a290300370300200441186a200241086a2903003703002004200536023820044100360234200420033602302004200229030037031020012003200441106a2202106d2004200741016a3602002004200336020820012004106920022101230041106b2106024020002000410020006b41037122056a22034f0d00200021022001210020050440200521070340200220002d00003a0000200041016a2100200241016a2102200741016b22070d000b0b200541016b4107490d000340200220002d00003a0000200241016a200041016a2d00003a0000200241026a200041026a2d00003a0000200241036a200041036a2d00003a0000200241046a200041046a2d00003a0000200241056a200041056a2d00003a0000200241066a200041066a2d00003a0000200241076a200041076a2d00003a0000200041086a2100200241086a22022003470d000b0b2003413020056b220d417c71220e6a21020240200120056a22054103712201450440200220034d0d0120052101034020032001280200360200200141046a2101200341046a22032002490d000b0c010b2006410036020c2006410c6a2001722100410420016b22074101710440200020052d00003a0000410121080b20074102710440200020086a200520086a2f01003b01000b200520016b210820014103742107200628020c210b02402002200341046a4d0440200321000c010b410020076b411871210a03402003200b200776200841046a2208280200220b200a7472360200200341086a210c200341046a220021032002200c4b0d000b0b41002103200641003a0008200641003a0006027f20014101460440410021014100210a200641086a0c010b200841056a2d00002006200841046a2d000022013a0008410874210a41022109200641066a0b210c20002005410171047f200c200841046a20096a2d00003a000020062d0006411074210320062d00080520010b41ff01712003200a7272410020076b41187174200b200776723602000b2005200e6a210102402002200d410371220320026a22054f0d002003220004400340200220012d00003a0000200141016a2101200241016a2102200041016b22000d000b0b200341016b4107490d000340200220012d00003a0000200241016a200141016a2d00003a0000200241026a200141026a2d00003a0000200241036a200141036a2d00003a0000200241046a200141046a2d00003a0000200241056a200141056a2d00003a0000200241066a200141066a2d00003a0000200241076a200141076a2d00003a0000200141086a2101200241086a22022005470d000b0b200441406b24000b910101057f230041106b22022400024002402001106a220110684504400c010b200241046a2203200110342003200110602106200241046a200110602103200241046a200110602104200241046a200110602105200228020c2002280208470d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141918008410e1063000bc50302097f027e230041306b22032400200341146a220420012002106e2201103402400240200420011077220841ff0171410449044020044120200110612109200420011078210c200420011037210a2004200110602102102e21070340200204402007200341146a200110371030200241016b21020c010b0b027f024002400240200341146a2001107741ff01710e020102000b200141808008410d1063000b200341146a20011036210441000c010b200341146a200110602102102e2104034020020440200341086a200341146a220520011037104410452003280208410171450d04200328020c2106200520011078210d200320052001103636022c200320063602282003200d3703202004200341206a1033200241016b21020c010b0b41010b2102200341146a200110602106200341146a200110602105200341146a20011060210b200328021c2003280218470d022000200b3602282000200536022420002006360220200020083a001c200020073602182000200a360214200020093602102000200c3703082000200436020420002002360200200341306a24000f0b200141808008410d1063000b200141848308410d1063000b200141918008410e1063000b0b0020002001106e1068450b1c0020012002107545044020002001200210740f0b200041023602000b2e01017f230041106b22022400200241003a000f20002002410f6a4101200110800120022d000f200241106a24000b850102017e017f230041106b22032400200342003703082000200341086a4108200110800120032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b4002017f017e0240200010352201100241094904402001101722024280808080105a0d012002a70f0b200041ee8108410e1063000b200041918008410e1063000b1701017f102e22022001ad42ff018310552000200210300b5901017f230041206b2202240020022001100236021c20024100360218200220013602140340200241086a200241146a102f20022802084101710440200228020c2101102e1a20002001102d10300c010b0b200241206a24000b1201017f102e2202200020011042103020020bc60101067f230041d0006b22012400102e210220012000100236020c2001410036020820012000360204200141186a2105200141406b210303402001413f6a200141046a103d20012d003f410147450440200141306a200341086a290000370300200120032900003703282005200141286a10662001280224210620012802202104102e21000240200410674504402004102d21000c010b200041db8208410410071a0b20022000103020022001290318105d2002200610580c010b0b200141d0006a240020020bed0101037f230041f0006b220524002005200336021420052001360210200541086a103b2005200528020c220636021c20052005280208220736021802402007410171044020061031107d2107418984084114107c22062000107a2006200541106a10542006200541146a105420062007107b0c010b41f583084114107c22062000107a2006200541106a10542006200541146a105420062005411c6a105c0b2006102e1018107f2106200520003a006c2005200136026020052004360268200520033602642005200237035820052005290218370350200541206a2006200541d0006a1072200541f0006a24000b0a0041ca8308410c10420b3901017f2000280208200028020422046b2002490440200341fc8108410f1063000b200028020020042001200210642000200220046a3602040b0a0041d68308410e10420b0a0041e48308411110420b0600101a10480bd40102097f017e230041f0006b22002400101a10482000107f2201360204200041406b20011073200041086a2001200028024410762000200041046a22023602380240034020002802084102470440200041406b200041086a2203102c200028024022044102460d02200028024421052000280258200028025420002903482000280250210820002d005c2003200228020020002802641076410141001042220110282001200810041a2001106f2001103a2001107020042005200110712001101b1a0c010b0b200041f0006a24000f0b108501000b0b0041e08408410e1008000b070041001091010b070041011091010b070041021092010bea0102077f017e230041d0006b22002400104a410510494100104621034101100e2107410210402104230041106b22012400200141086a4103104010441045200128020841017145044041c48308410541848308410d1041000b200128020c2102200141106a24004104102b2205100d2000410536020020001043210620002802001047102e21012000200536020c2000420037030020002002360208200120001033107f210220002003360240200041033a004c200020063602482000200436024420002007370338200020013602342000410136023020002002200041306a1072200041d0006a24000b070041031092010b9c0102057f017e230041106b22002400104a41041049027f024002404100100f047f4100100e22054280025a0d01200542045a0d022005a70541000b0c020b41bb8308410941918008410e1041000b41bb8308410941808008410d1041000b4101104621024102100e21054103104021032000410436020c2000410c6a10432104200028020c104741ff01712002200520032004107e200041106a24000bd21502187f017e230041a0026b220024001048200041f0016a210c200041a4016a210e200041a0016a2105200041e8016a2201210f200041ec016a211220004180026a210d200041e4016a2110200041e0016a2107200041bc016a2108200041fc006a2111200041f8006a2106200041e8006a4104722113200041386a41047221092001410472210a03400240200041e8006a107f220110730240024002402001200028026c22021075450440200041e8016a220420012002107620002802e80122144102460d01200041b0016a2215200a41186a280200360200200041a8016a2216200a41106a2902003703002005200a41086a2902003703002000200a29020037039801200028028c022102200028029002210320002802940221172001200028028802220b1075450440200041386a2001107302402003044020042001200310742000200236028c02200120032004106d0c010b2000200236023c0b024020020440200041e8016a22042001200210742000200336029002200120022004106d0c010b200020033602400b2001200b106e106c2000200028023841016b3602382001200041386a10690b2009200029039801370200200941186a2015280200360200200941106a2016290300370200200941086a200529030037020020002017360264200020033602602000200236025c2000200b36025820002014360238200041e8016a200041386a102c20004180016a200d2903003703002006200041f8016a290300370300200041f0006a200c290300370300200020002903e801221837036802402018a74101710440200028026c1031107d210241b584084118107c220120002d008401107a20012006105420012011105420012002107b0c010b419d84084118107c220120002d008401107a20012006105420012011105420012013105c0b2001102e1018200028027c21012000102e220236029401200020013602900120002006360288012000200041e8006a36028c01024002400240024020002d00840141016b0e03010203000b200720004190016a29020037030020002000290288013703d8012000101c221842a08d067d2018201842a08d06561b22183703d0012007280200210120002802e401210220002802d8012103024020002802dc01220428020041014604400240024002402004280204104d0e020102000b20002001200220032004280204104f200028020421012000280200210210502103104b210420002903d0012003200420022001105e0c030b104b210420002903d0012003280200200420012002105e0c020b20004198016a2004280204104e20002903980121182000200e3602fc01200020053602f801200020183703f0012000200f360288022000200f36028402200020023602ec01200020013602e8012000200041d0016a360280022018500440200041086a200120022005200e1051200028020c210120002802082102104b210420002903d0012003280200200420022001105e0c020b200041106a200120022003280200200c1052200028021421012000280210210210502103104b210420002903d0012003200420022001105e0c010b20182003280200200428020420012002105e0b101d0c080b20004188016a22012802042107200141106a220021042001280200210220012802082103200128020c2106200741046a210520072802004101710440230041306b2201240002400240024020052802002207104d0e020102000b2001200636022820012003360224200120043602202001200036021c20012005360218230041106b22002400200041086a200141186a220128020c200128021020022001280200280200104f0c090b2002280200104b20032006104c000b200141186a2007104e2001200141206a3602102001200141246a3602142001200129031837030820022802002105230041206b22022400200241106a200141086a220141086a2903003703002002200436021c20022000360218200220063602042002200336020020022001290300370308230041106b220024002002280204210120022802002103200229030850044020002003200120022802102002280214105120002802042101200028020021002005104b20002001104c000b200041086a200320012005200241086a10520c070b230041206b220024002000200536020c2000200636021c200020033602182000200436021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a2200280200280200200328020028020020002802042000280208104c000b200029037021182001103f450d04200028026c21030240200028026841014604402003103f0d010c050b2003101e0d040b41e08108410e1008000b200029037021182000280280012102102e2103200020063602b401200020033602b001200041183602ac01200041a183083602a801200020023602a401200020013602a00120002018370398012000200041e8006a3602b801200041673602c40141674101410010071a20002802c401102d2101200020002802b001220210023602f001200041003602ec01200020023602e8010340200041306a200041e8016a102f200028023041017104402000200028023422031002220241187420024180fe03714108747220024108764180fe0371200241187672723602d8012001200041d8016a4104100b1a2001200310041a0c010b0b200020013602c401200042003703c80120002000290398013703d00120002802b801220b41046a210420002802a401210120002802a001210220002802b4012103200b28020041014604400240024002402004280200104d0e020102000b2000200136028c02200020023602880220002008360284022000200836028002200041183602f001200041a183083602ec012000200041c4016a3602fc012000200041c8016a3602f8012000200041d0016a3602f401200020043602e801200041186a2002200120032004280200104f200028021c21012000280218210220121050104b20022001105f0c080b2000200136028002200020023602fc01200041183602ec01200041a183083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f001104b2104200041e8016a2003280200200420022001105f0c070b200041d8016a2004280200104e20002903d8012118200020103602fc01200020073602f801200020183703f001200020083602980220002008360294022000411836028402200041a1830836028002200020013602ec01200020023602e8012000200041c4016a360290022000200041c8016a36028c022000200041d0016a360288022018500440200041206a200220012007201010512000280224210120002802202102104b2104200d2003280200200420022001105f0c070b200041286a200220012003280200200c1052200028022c210120002802282102200d1050104b20022001105f0c060b20002001360284022000200236028002200041183602ec01200041a183083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00120042802002104200020033602fc01200041e8016a2003280200200420022001105f0c050b200041a0026a24000f0b108501000b420021180b200028026c2103200028027821042000280268410146047f20042003201820012002101f052004200320182001200210200b1a0c010b0b200028020c2101200028020821001050104b20002001104c000b0e00101a10481081011079ad10210b0e00101a10481082011035101b1a0bf20201057f230041306b22002400102e22021022414e4101410010071a200210022103024003402001200347044020004100360224200320016b41034d0d0220022001200041246a41041064200041186a2002200141046a22042000280224220141187420014180fe03714108747220014108764180fe037120014118767272220110622000280218410171450d02414e200028021c1030200120046a21010c010b0b414e1002044041ed800841121008000b41671081012201107941016aad10232001416710161a200041106a103b41bb8208412010421a200041086a410141001053200028020c2102200028020821034101410010422201200310041a20002002100236022c200041003602282000200236022403402000200041246a102f200028020041017104402000280204200141c983084101100b1a416710242001416710041a0c010b0b108201200110161a200041306a24000f0b4198810841191042220041fc8108410f100b1a2000100c000b02000b4901047f230041106b22012400104a410210494100104621024101104021032001410236020c2001410c6a10432104200128020c104720002002420020032004107e200141106a24000b5102047f017e230041106b22012400104a410310494100104621024101100e21054102104021032001410336020c2001410c6a10432104200128020c104720002002200520032004107e200141106a24000b0bea040300418080080bbb02696e76616c69642076616c756500010203696e70757420746f6f206c6f6e67756e65787065637465642045474c44207472616e7366657245474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747373657269616c697a6572206465636f6465206572726f723a204d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e67650041db82080b930245474c442e6e6f64652e696e666f73746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564626164206172726179206c656e67746870726f6d697365735f63616c6c6261636b5f6d6574686f64746f63616c6c5f74797065746f6b656e407175657565645f63616c6c7363616c6c6261636b5f636f756e7463616c6c6261636b5f7061796d656e74736164645f7175657565645f63616c6c5f65676c646164645f7175657565645f63616c6c5f65736474666f72776172645f7175657565645f63616c6c5f65676c64666f72776172645f7175657565645f63616c6c5f657364740000000d0002000e0002000f0002001000020070616e6963206f636375727265640041f084080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -463,6 +463,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -471,6 +472,7 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedBufferToHex", "managedCreateAsyncCall", @@ -488,12 +490,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.3", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder-queue-promises.wasm", - "size": 13800, + "size": 13566, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/forwarder-queue/output/forwarder-queue.mxsc.json b/test/features/composability/forwarder-queue/output/forwarder-queue.mxsc.json index c0ea7c826..bbe4cf6ef 100644 --- a/test/features/composability/forwarder-queue/output/forwarder-queue.mxsc.json +++ b/test/features/composability/forwarder-queue/output/forwarder-queue.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder-queue", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -441,7 +441,7 @@ } } }, - "code": "0061736d010000000196011760027f7f0060017f017f60000060027f7f017f60017f0060037f7f7f006000017f60047f7f7f7f0060057f7f7f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60057f7f7e7f7f017f60057f7f7e7f7f0060017f017e60067e7f7f7f7f7f017f600b7f7f7f7f7f7f7f7f7e7e7f017f6000017e60017e0060047f7f7f7e0060057e7f7f7f7f0060027e7f0060027f7f017e0283072403656e760e626967496e74536574496e743634000903656e7609626967496e74416464000503656e76106d4275666665724765744c656e677468000103656e760a6d4275666665724e6577000603656e760d6d427566666572417070656e64000303656e76176d427566666572546f426967496e74556e7369676e6564000303656e761b6d616e616765645472616e7366657256616c756545786563757465000c03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000c03656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000a03656e76126d616e616765645369676e616c4572726f72000403656e7611676574417267756d656e744c656e677468000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000e03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760b7369676e616c4572726f72000003656e760f6765744e756d417267756d656e7473000603656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000f03656e76166d616e616765644372656174654173796e6343616c6c001003656e76146d427566666572436f707942797465536c696365000b03656e760a626967496e745369676e000103656e760f6d4275666665725365744279746573000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e760f6d616e6167656457726974654c6f67000003656e76106d616e61676564534341646472657373000403656e760e636865636b4e6f5061796d656e74000203656e760d6d42756666657246696e697368000103656e760a6765744761734c656674001103656e760f636c65616e52657475726e44617461000203656e7616736d616c6c496e7446696e697368556e7369676e6564001203656e76136d42756666657247657442797465536c696365000b03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0007036a69000001060001060000010000000103030001000d010b00010107030101010004020402010006070008060808050009000013000807070901001408030a05010006010100010004050315000505000503050316000003010d060702020202020202020202020202040405030100030616037f01418080080b7f0041bd84080b7f0041c084080b07b1020f066d656d6f7279020004696e6974007e0c7175657565645f63616c6c73007f146164645f7175657565645f63616c6c5f73796e630081011c6164645f7175657565645f63616c6c5f6c65676163795f6173796e63008201206164645f7175657565645f63616c6c5f7472616e736665725f657865637574650083011d6164645f7175657565645f63616c6c5f7472616e736665725f65736474008401176164645f7175657565645f63616c6c5f70726f6d6973650085010f6164645f7175657565645f63616c6c00860114666f72776172645f7175657565645f63616c6c730087010e63616c6c6261636b5f636f756e740088011163616c6c6261636b5f7061796d656e74730089010863616c6c4261636b008a010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020adc55691a00200041ff0171410274419484086a2802002d0000200110250b2701017f230041106b22022400200220003a000f20012002410f6a410110091a200241106a24000b1601017f1027220142001000200120012000100120010b1901017f41b4840841b4840828020041016b220036020020000beb0102077f017e230041206b2202240020012d001c210620012802101029210720012903082109200128021410292108102a2105200220012802182203100236021c20024100360218200220033602140340200241086a200241146a102b200228020841017104402005200228020c1029102c0c010b0b4101210320012802042104027f200128020041014604402004102d0c010b41002103200410260b2104200020063a001c2000200536021820002008360214200020073602102000200937030820002004360204200020033602002000200128022836022820002001290320370320200241206a24000b0f01017f10032201200010041a20010b080041014100103e0b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410391a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410091a200241106a24000b870102037f017e230041406a22012400102a2102200120001002360214200141003602102001200036020c0340200141186a2001410c6a102e200128021841014745044020012903202104200128022c210020012802281029210320012000102636023c20012004370330200120033602382002200141306a102f0c010b0b200141406b240020020b5501017f230041306b220224002002411f6a20011053200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a106342010542000b370300200241306a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437020420002003411010091a200341106a24000b1d002000200110312201100236020820004100360204200020013602000b0d0020001027220010161a20000b11002000200110331027220010051a20000b0e00200020002001105f200110600b0a0020001035200110360b0f01017f10272201200010151a20010b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410091a2001200010041a200241106a24000b980101027f230041306b220524000240200110020440200541286a4200370300200542003703200240200110384101470d0020014100200541206a2206411010391a200541106a2006103a200528021c21062005280218103b450d002000200620022003200410061a0c020b2000200120022003200410071a0c010b10272201420010002000200120022003200410061a0b200541306a24000b0900200010024104760b0f00200020012003200210214100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841b78008410b10141a200010650b0d0020001027220010081a20000b2e01017f41c280084117103e22042000200110091a200441d98008410310091a20042002200310091a2004100a000b1101017f102722022000200110141a20020b3c01037f102a2102200028020021010340200141b884082802004e4504402000200141016a220336020020022001103c102c200321010c010b0b20020b21002000103c22001002412047044041808308410241d882084110103d000b20000b4901017f230041106b220124000240200010024104470d002001410036020c200041002001410c6a410410391a200128020c41c58eb1a204470d00106421000b200141106a240020000b1b01017f2001103b210220002001360204200020024101733602000b190041b8840828020020004c04400f0b41ed80084112100e000b1200100f4504400f0b41ff80084119100e000b1900200041b884082802004c04400f0b41dc80084111100e000b0b0041b88408100f3602000b2b01027f200041bc84082d0000220171200041ff017146220245044041bc840820002001723a00000b20020b090020002001100e000b0a0041764200100041760b0d0020002001200220031023000b6501017f230041306b22022400200241286a42003703002002420037032020014100200241206a220141101039450440200241106a20011063200041086a200241186a29030037030020002002290310370300200241306a24000f0b41858208411d100e000b8c0201047f230041f0006b22052400200541186a41b981084114105020052802182107200528021c220620031051200410382103102a22082003ad105220062008102c20052004100236022c2005410036022820052004360224200541386a2104200541e0006a21030340200541df006a200541246a105320052d005f410147450440200541d0006a200341086a290000370300200520032900003703482004200541c8006a103a20052802442108200620052802401054200541086a200720062005290338105520052802082107200528020c2206200810560c010b0b200541106a20072006200120021057200528021421012000200528021036020020002001360204200541f0006a24000b0c01017f10272200101b20000b7101017f230041206b22052400200541186a41dc8108410c1050200541106a2005280218200528021c20031058200541086a200528021020052802142004105920052005280208200528020c200120021057200528020421012000200528020036020020002001360204200541206a24000ba30101027f230041306b22052400200541286a41cd8108410f1050200541206a2005280228200528022c20042802081058200541186a2005280220200528022420042903001055200541106a2005280218200528021c200428020c10592005280210210620052802142104102a1a200420031029102c200541086a20062004200120021057200528020c21012000200528020836020020002001360204200541306a24000b180020012002103e21012000102a360204200020013602000b1000102a1a200020012802001029102c0bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10141a200341106a24000b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010391a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0d00102a1a200020011029102c0b160020022003105a20002002360204200020013602000b0d00102a1a200020011035102c0b6e01017f230041206b2205240002402003105b0d0020022003105420052004100236021c20054100360218200520043602140340200541086a200541146a102b2005280208410171450d012002200528020c10540c000b000b2000200236020420002001360200200541206a24000b160020022003105120002002360204200020013602000b160020022003105c20002002360204200020013602000b1201017f102a22022001105220002002102c0b070020001002450b1000102a1a200020012802001035102c0b110020002001200220032004102710101a0b370020012002200320042000280200220120002802042202200120022000280208290300200028020c290300200028021028020010111a0b5001017f230041106b220224002002410036020c20002002410c6a41042001107d200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3801027f2000280204210310032104200028020020032001200410124504402000200120036a36020420040f0b200241f68108410f1061000b2c01017f41b08208411b103e2203200010041a200341d98008410310091a20032001200210091a2003100a000b070020001013450bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b0a0041b78008410b103e0b0b0041582000102241004a0b0d002000416710161a416710020b4301017f2000106821022001280200220004402000102a22001069200128020420001069200128020820001069200128020c200010692002200010171a0f0b2002106a0b130020001029220041ab8208410510091a20000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410091a200241106a24000b0d00200041014100103e10171a0b680020002001106c102a210020022d001c200010242000200228021010041a20022903082000106d20022802142000103620022802182000106e200228020020022802042000106f200228022020001069200228022420001069200228022820001069200010171a0b5701017f230041106b2202240020001029220041a68208410510091a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410091a200241106a240020000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810091a200241106a24000b5b01017f230041206b22022400200010024102762001106920022000100236021c20024100360218200220003602140340200241086a200241146a102b20022802084101710440200228020c200110360c010b0b200241206a24000ba70101017f230041306b220324000240200041017104404101200210252001103820021069200320011002360214200341003602102003200136020c0340200341186a2003410c6a102e20032802184101470d02200328022c024020032802282201103b4504402001200210360c010b410420021069200241a28208410410091a0b20032903202002106d200210340c000b000b4100200210252001200210340b200341306a24000bc80601077f230041406a220424002004200110712004200428020c41016a220736020c024020042802002203450440200420073602040c010b200441106a2205200120042802082208107220042007360234200120082005106b0b200441286a200241186a290300370300200441206a200241106a290300370300200441186a200241086a2903003703002004200836023820044100360234200420073602302004200229030037031020012007200441106a2202106b2004200341016a3602002004200736020820012004106720022101024020002000410020006b41037122056a22064f0d00200021032002210020050440200521020340200320002d00003a0000200041016a2100200341016a2103200241016b22020d000b0b200541016b4107490d000340200320002d00003a0000200341016a200041016a2d00003a0000200341026a200041026a2d00003a0000200341036a200041036a2d00003a0000200341046a200041046a2d00003a0000200341056a200041056a2d00003a0000200341066a200041066a2d00003a0000200341076a200041076a2d00003a0000200041086a2100200341086a22032006470d000b0b2006413020056b2209417c7122076a21030240200120056a2200410371450440200320064d0d0120002102034020062002280200360200200241046a2102200641046a22062003490d000b0c010b200320064d0d002000410374220141187121082000417c71220541046a2102410020016b4118712101200528020021050340200620052008762002280200220520017472360200200241046a2102200641046a22062003490d000b0b200020076a2102024020032009410371220120036a22054f0d002001220004400340200320022d00003a0000200241016a2102200341016a2103200041016b22000d000b0b200141016b4107490d000340200320022d00003a0000200341016a200241016a2d00003a0000200341026a200241026a2d00003a0000200341036a200241036a2d00003a0000200341046a200241046a2d00003a0000200341056a200241056a2d00003a0000200341066a200241066a2d00003a0000200341076a200241076a2d00003a0000200241086a2102200341086a22032005470d000b0b200441406b24000b910101057f230041106b220224000240024020011068220110664504400c010b200241046a22032001103020032001105f2106200241046a2001105f2103200241046a2001105f2104200241046a2001105f2105200228020c2002280208470d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141918008410e1061000bc50302097f027e230041306b22032400200341146a220420012002106c2201103002400240200420011075220841ff0171410449044020044120200110602109200420011076210c200420011033210a20042001105f2102102a21070340200204402007200341146a20011033102c200241016b21020c010b0b027f024002400240200341146a2001107541ff01710e020102000b200141808008410d1061000b200341146a20011032210441000c010b200341146a2001105f2102102a2104034020020440200341086a200341146a220520011033104110422003280208410171450d04200328020c2106200520011076210d200320052001103236022c200320063602282003200d3703202004200341206a102f200241016b21020c010b0b41010b2102200341146a2001105f2106200341146a2001105f2105200341146a2001105f210b200328021c2003280218470d022000200b3602282000200536022420002006360220200020083a001c200020073602182000200a360214200020093602102000200c3703082000200436020420002002360200200341306a24000f0b200141808008410d1061000b200141cb8208410d1061000b200141918008410e1061000b0b0020002001106c1066450b1c0020012002107345044020002001200210720f0b200041023602000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001107d20022d000f200241106a24000b840102017e017f230041106b22032400200342003703082000200341086a41082001107d20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b5901017f230041206b2202240020022001100236021c20024100360218200220013602140340200241086a200241146a102b20022802084101710440200228020c2101102a1a200020011029102c0c010b0b200241206a24000b1701017f102a22022001ad42ff0183105220002002102c0b1201017f102a220220002001103e102c20020bc60101067f230041d0006b22012400102a210220012000100236020c2001410036020820012000360204200141186a2105200141406b210303402001413f6a200141046a105320012d003f410147450440200141306a200341086a290000370300200120032900003703282005200141286a10632001280224210620012802202104102a210002402004103b4504402004102921000c010b200041a28208410410141a0b20022000102c20022001290318105a2002200610560c010b0b200141d0006a240020020bf50201037f230041e0006b22052400200520033602042005200136020041021047450440415a10180b0240410410470d00415841b78008410b10141a2005415a1002360248200542daffffff0f3702400340200541106a200541406b105320052d00104101470d012005280011220641187420064180fe03714108747220064108764180fe0371200641187672721065450d000b419f80084118100e000b0240415a105b044041011047450440415d10190b2005415d102636020c2005410036020841bb8308411410792206200010782006200510512006200541046a105120062005410c6a105c0c010b2005415a102d220636020c200541013602082006102d107a210741cf8308411410792206200010782006200510512006200541046a10512006200710770b2006102a101a107c2106200520003a005c2005200136025020052004360258200520033602542005200237034820052005290208370340200541106a2006200541406b1070200541e0006a24000b0a0041908308410c103e0b2e01017f2000280200200028020422042001200210390440200341f68108410f1061000b2000200220046a3602040b0600101c10440bd40102097f017e230041f0006b22002400101c10442000107c2201360204200041406b20011071200041086a2001200028024410742000200041046a22023602380240034020002802084102470440200041406b200041086a22031028200028024022044102460d02200028024421052000280258200028025420002903482000280250210820002d005c200320022802002000280264107441014100103e220110242001200810041a2001106d200110362001106e200420052001106f2001101d1a0c010b0b200041f0006a24000f0b108001000b0b0041a48408410e100e000b07004100108b010b07004101108b010b07004102108c010bea0102077f017e230041d0006b220024001046410510454100104021034101100c21074102103c2104230041106b22012400200141086a4103103c104110422001280208410171450440418b8308410541cb8208410d103d000b200128020c2102200141106a2400410410272205100d200041053602002000103f210620002802001043102a21012000200536020c200042003703002000200236020820012000102f107c210220002003360240200041033a004c200020063602482000200436024420002007370338200020013602342000410136023020002002200041306a1070200041d0006a24000b07004103108c010b9c0102057f017e230041106b22002400104641041045027f024002404100100b047f4100100c22054280025a0d01200542045a0d022005a70541000b0c020b41828308410941918008410e103d000b41828308410941808008410d103d000b4101104021024102100c21054103103c21032000410436020c2000410c6a103f2104200028020c104341ff01712002200520032004107b200041106a24000bd61602187f017e230041a0026b220024001044200041f0016a210c200041a4016a210e200041a0016a2105200041e8016a2201210f200041ec016a211220004180026a210d200041e4016a2110200041e0016a2107200041bc016a2109200041fc006a2111200041f8006a2106200041e8006a4104722113200041386a410472210a2001410472210b02400340200041e8006a107c220110710240024002402001200028026c22021073450440200041e8016a220420012002107420002802e80122144102460d01200041b0016a2215200b41186a280200360200200041a8016a2216200b41106a2902003703002005200b41086a2902003703002000200b29020037039801200028028c02210220002802900221032000280294022117200120002802880222081073450440200041386a2001107102402003044020042001200310722000200236028c02200120032004106b0c010b2000200236023c0b024020020440200041e8016a22042001200210722000200336029002200120022004106b0c010b200020033602400b20012008106c106a2000200028023841016b3602382001200041386a10670b200a200029039801370200200a41186a2015280200360200200a41106a2016290300370200200a41086a200529030037020020002017360264200020033602602000200236025c2000200836025820002014360238200041e8016a200041386a102820004180016a200d2903003703002006200041f8016a290300370300200041f0006a200c290300370300200020002903e801221837036802402018a74101710440200028026c102d107a210241fb830841181079220120002d00840110782001200610512001201110512001200210770c010b41e3830841181079220120002d008401107820012006105120012011105120012013105c0b2001102a101a200028027c21012000102a220436029401200020013602900120002006360288012000200041e8006a36028c01024002400240024020002d00840141016b0e03010203000b200720004190016a29020037030020002000290288013703d8012000101e221842a08d067d2018201842a08d06561b22183703d0012007280200210120002802e401210220002802d8012103024020002802dc0122042802004101460440024002400240200428020410380e020102000b20002001200220032004280204104c2000280204210120002802002102104d21031049210420002903d0012003200420022001105d0c030b1049210420002903d0012003280200200420012002105d0c020b20004198016a2004280204104b20002903980121182000200e3602fc01200020053602f801200020183703f0012000200f360288022000200f36028402200020023602ec01200020013602e8012000200041d0016a360280022018500440200041086a200120022005200e104e200028020c2101200028020821021049210420002903d0012003280200200420022001105d0c020b200041106a200120022003280200200c104f2000280214210120002802102102104d21031049210420002903d0012003200420022001105d0c010b20182003280200200428020420012002105d0b101f0c070b20004188016a22012802042107200141106a220021042001280200210220012802082103200128020c2106200741046a210520072802004101710440230041306b220124000240024002402005280200220710380e020102000b2001200636022820012003360224200120043602202001200036021c20012005360218230041106b22002400200041086a200141186a220128020c200128021020022001280200280200104c0c0a0b2002280200104920032006104a000b200141186a2007104b2001200141206a3602102001200141246a3602142001200129031837030820022802002105230041206b22022400200241106a200141086a220141086a2903003703002002200436021c20022000360218200220063602042002200336020020022001290300370308230041106b220024002002280204210120022802002103200229030850044020002003200120022802102002280214104e20002802042101200028020021002005104920002001104a000b200041086a200320012005200241086a104f0c080b230041206b220024002000200536020c2000200636021c200020033602182000200436021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a2200280200280200200328020028020020002802042000280208104a000b200029037021182001105b450d04200028026c21020240200028026841014604402002105b0d010c050b20021062450d040b41e88108410e1048000b200029037021182000280280012102102a2103200020063602b401200020033602b001200041183602ac01200041e882083602a801200020023602a401200020013602a00120002018370398012000200041e8006a3602b801200041673602c40141674101410010141a20002802c40110292101200020002802b001220210023602f001200041003602ec01200020023602e8010340200041306a200041e8016a102b200028023041017104402000200028023422031002220241187420024180fe03714108747220024108764180fe0371200241187672723602d8012001200041d8016a410410091a2001200310041a0c010b0b200020013602c401200042003703c80120002000290398013703d00120002802b801220841046a210420002802a401210120002802a001210220002802b401210320082802004101460440024002400240200428020010380e020102000b2000200136028c02200020023602880220002009360284022000200936028002200041183602f001200041e882083602ec012000200041c4016a3602fc012000200041c8016a3602f8012000200041d0016a3602f401200020043602e801200041186a2002200120032004280200104c200028021c2101200028021821022012104d104920022001105e0c070b2000200136028002200020023602fc01200041183602ec01200041e882083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00110492104200041e8016a2003280200200420022001105e0c060b200041d8016a2004280200104b20002903d8012118200020103602fc01200020073602f801200020183703f001200020093602980220002009360294022000411836028402200041e8820836028002200020013602ec01200020023602e8012000200041c4016a360290022000200041c8016a36028c022000200041d0016a360288022018500440200041206a2002200120072010104e200028022421012000280220210210492104200d2003280200200420022001105e0c060b200041286a200220012003280200200c104f200028022c210120002802282102200d104d104920022001105e0c050b20002001360284022000200236028002200041183602ec01200041e882083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00120042802002104200020033602fc01200041e8016a2003280200200420022001105e0c040b200041a0026a24000f0b108001000b420021180b200028026841014604402000280278200028026c20182001200410370c010b200028026c1062450440102a2108200028026c1026210210642103200042003702ec012000200241187420024180fe03714108747220024108764180fe0371200241187672723602f4012000200341187420034180fe03714108747220034108764180fe0371200341187672723602e8012008200041e8016a411010091a2000280278200820182001200410370c010b0b4198810841211048000b200028020c210120002802082100104d104920002001104a000bcd0102017e047f230041106b22012400101c1044419c8308410e103e210220014200370308024020021031220410022203410949044020044100200120036b41106a200310391a2001290308220042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe0383200042388884848422004280808080105a0d0120001020200141106a24000f0b200241918008410e1061000b200241918008410e1061000b1300101c104441aa83084111103e1031101d1a0b02000b4901047f230041106b220124001046410210454100104021024101103c21032001410236020c2001410c6a103f2104200128020c104320002002420020032004107b200141106a24000b5102047f017e230041106b220124001046410310454100104021024101100c21054102103c21032001410336020c2001410c6a103f2104200128020c104320002002200520032004107b200141106a24000b0bc6040200418080080bb204696e76616c69642076616c756500010203696e70757420746f6f206c6f6e67756e65787065637465642045474c44207472616e7366657245474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74737472616e736665722065786563757465207265717569726573207061796d656e744d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e73666572696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e676545474c442e6e6f64652e696e666f73746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564626164206172726179206c656e67746870726f6d697365735f63616c6c6261636b5f6d6574686f64746f63616c6c5f74797065746f6b656e7175657565645f63616c6c7363616c6c6261636b5f636f756e7463616c6c6261636b5f7061796d656e74736164645f7175657565645f63616c6c5f65676c646164645f7175657565645f63616c6c5f65736474666f72776172645f7175657565645f63616c6c5f65676c64666f72776172645f7175657565645f63616c6c5f65736474000d0002000e0002000f0002001000020070616e6963206f636375727265640041b484080b0438ffffff", + "code": "0061736d010000000196011760027f7f0060017f017f60000060027f7f017f60017f0060037f7f7f006000017f60047f7f7f7f0060057f7f7f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60017f017e60057f7f7e7f7f017f60067e7f7f7f7f7f017f600b7f7f7f7f7f7f7f7f7e7e7f017f6000017e60017e0060047f7f7f7e0060057e7f7f7f7f0060027e7f0060027f7f017e60057f7f7e7f7f0002a3072503656e760e626967496e74536574496e743634000903656e7609626967496e74416464000503656e76106d4275666665724765744c656e677468000103656e760a6d4275666665724e6577000603656e760d6d427566666572417070656e64000303656e76176d427566666572546f426967496e74556e7369676e6564000303656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000a03656e76126d616e616765645369676e616c4572726f72000403656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e7611676574417267756d656e744c656e677468000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e760b7369676e616c4572726f72000003656e760f6765744e756d417267756d656e7473000603656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000e03656e76166d616e616765644372656174654173796e6343616c6c000f03656e76146d427566666572436f707942797465536c696365000b03656e760f6d4275666665725365744279746573000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e760f6d616e6167656457726974654c6f67000003656e76106d616e61676564534341646472657373000403656e760e636865636b4e6f5061796d656e74000203656e760d6d42756666657246696e697368000103656e760a6765744761734c656674001003656e760f636c65616e52657475726e44617461000203656e760a626967496e745369676e000103656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000d03656e761b6d616e616765645472616e7366657256616c756545786563757465000d03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e7616736d616c6c496e7446696e697368556e7369676e6564001103656e76136d42756666657247657442797465536c696365000b03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0007036665000001060001060000010000000103030001000107030101000104020402010607010008060808050009000012000807070009011308030a05070b00010101000100040503140005050005030503150000030116060702020202020202020202020202040405030100030616037f01418080080b7f0041bd84080b7f0041c084080b07af020f066d656d6f7279020004696e6974007b0c7175657565645f63616c6c73007c146164645f7175657565645f63616c6c5f73796e63007e1c6164645f7175657565645f63616c6c5f6c65676163795f6173796e63007f206164645f7175657565645f63616c6c5f7472616e736665725f657865637574650080011d6164645f7175657565645f63616c6c5f7472616e736665725f65736474008101176164645f7175657565645f63616c6c5f70726f6d6973650082010f6164645f7175657565645f63616c6c00830114666f72776172645f7175657565645f63616c6c730084010e63616c6c6261636b5f636f756e740085011163616c6c6261636b5f7061796d656e74730086010863616c6c4261636b0087010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aff53651a00200041ff0171410274419484086a2802002d0000200110260b2701017f230041106b22022400200220003a000f20012002410f6a410110071a200241106a24000b1601017f1028220142001000200120012000100120010b1901017f41b4840841b4840828020041016b220036020020000beb0102077f017e230041206b2202240020012d001c21062001280210102a2107200129030821092001280214102a2108102b2105200220012802182203100236021c20024100360218200220033602140340200241086a200241146a102c200228020841017104402005200228020c102a102d0c010b0b4101210320012802042104027f200128020041014604402004102e0c010b41002103200410270b2104200020063a001c2000200536021820002008360214200020073602102000200937030820002004360204200020033602002000200128022836022820002001290320370320200241206a24000b0f01017f10032201200010041a20010b080041014100103a0b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a4104105f1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410071a200241106a24000b870102037f017e230041406a22012400102b2102200120001002360214200141003602102001200036020c0340200141186a2001410c6a102f200128021841014745044020012903202104200128022c21002001280228102a210320012000102736023c20012004370330200120033602382002200141306a10300c010b0b200141406b240020020b5501017f230041306b220224002002411f6a2001104f200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a106042010542000b370300200241306a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437020420002003411010071a200341106a24000b1d002000200110322201100236020820004100360204200020013602000b0d0020001028220010131a20000b11002000200110341028220010051a20000b0e00200020002001105b2001105c0b0a0020001036200110370b0f01017f10282201200010121a20010b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410071a2001200010041a200241106a24000b0d0020001028220010061a20000b2e01017f41c280084117103a22042000200110071a200441d98008410310071a20042002200310071a20041008000b1101017f102822022000200110111a20020b3c01037f102b2102200028020021010340200141b884082802004e4504402000200141016a2203360200200220011038102d200321010c010b0b20020b4f01017f230041106b220124000240200010024104470d002001410036020c200041002001410c6a4104105f1a200128020c41c58eb1a204470d0041b78008410b103a21000b200141106a240020000b1b01017f20011061210220002001360204200020024101733602000b21002000103822001002412047044041808308410241d8820841101039000b20000b190041b8840828020020004c04400f0b41ed80084112100c000b1200100d4504400f0b41ff80084119100c000b1900200041b884082802004c04400f0b41dc80084111100c000b0b0041b88408100d3602000b2b01027f200041bc84082d0000220171200041ff017146220245044041bc840820002001723a00000b20020b0a0041764200100041760b0d0020002001200220031024000b0900200010024104760b6b01017f230041306b22022400200241286a4200370300200242003703202001100241104f044020014100200241206a22014110105e200241106a20011060200041086a200241186a29030037030020002002290310370300200241306a24000f0b41858208411d100c000bef0202047f017e230041406a22052400200541186a419881084114104c20052802182107200528021c22062003104d200410022103102b22082003410476ad104e20062008102d200520041002360228200541003602242005200436022003402005412f6a200541206a104f20052d002f410147450440200528003c21032005290034210920062005280030220441187420044180fe03714108747220044108764180fe0371200441187672721050200541086a20072006200942388620094280fe0383422886842009428080fc0783421886200942808080f80f834208868484200942088842808080f80f832009421888428080fc07838420094228884280fe03832009423888848484105120052802082107200528020c2206200341187420034180fe03714108747220034108764180fe03712003411876727210520c010b0b200541106a20072006200120021053200528021421012000200528021036020020002001360204200541406b24000b0c01017f10282200101820000b7101017f230041206b22052400200541186a41bb8108410c104c200541106a2005280218200528021c20031054200541086a200528021020052802142004105520052005280208200528020c200120021053200528020421012000200528020036020020002001360204200541206a24000ba30101027f230041306b22052400200541286a41ac8108410f104c200541206a2005280228200528022c20042802081054200541186a2005280220200528022420042903001051200541106a2005280218200528021c200428020c10552005280210210620052802142104102b1a20042003102a102d200541086a20062004200120021053200528020c21012000200528020836020020002001360204200541306a24000b180020012002103a21012000102b360204200020013602000b1000102b1a20002001280200102a102d0bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10111a200341106a24000b7001037f230041106b22022400200020012802042204200128020849047f200241086a22034200370300200242003703002001280200200420024110105f1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0d00102b1a20002001102a102d0b160020022003105720002002360204200020013602000b0d00102b1a200020011036102d0b6e01017f230041206b220524000240200310580d0020022003105020052004100236021c20054100360218200520043602140340200541086a200541146a102c2005280208410171450d012002200528020c10500c000b000b2000200236020420002001360200200541206a24000b160020022003104d20002002360204200020013602000b160020022003105620002002360204200020013602000b1000102b1a200020012802001036102d0b1201017f102b22022001104e20002002102d0b070020001002450b1100200020012002200320041028100e1a0b370020012002200320042000280200220120002802042202200120022000280208290300200028020c2903002000280210280200100f1a0b5001017f230041106b220224002002410036020c20002002410c6a41042001107a200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4b01037f02402000280204220420002802002205100222034b0d002003200120046a2203490d002005200420011003220110100d002000200336020420010f0b200241e38108410f105d000b2c01017f41b08208411b103a2203200010041a200341d98008410310071a20032001200210071a20031008000b1a002000200120022003105f4504400f0b41f281084113100c000b0f00200020012003200210224100470bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841b78008410b10111a200010620b0b0041582000102341004a0b0d002000416710131a416710020b4301017f2000106521022001280200220004402000102b22001066200128020420001066200128020820001066200128020c200010662002200010141a0f0b200210670b13002000102a220041ab8208410510071a20000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410071a200241106a24000b0d00200041014100103a10141a0b6800200020011069102b210020022d001c200010252000200228021010041a20022903082000106a20022802142000103720022802182000106b200228020020022802042000106c200228022020001066200228022420001066200228022820001066200010141a0b5701017f230041106b220224002000102a220041a68208410510071a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410071a200241106a240020000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810071a200241106a24000b5b01017f230041206b22022400200010024102762001106620022000100236021c20024100360218200220003602140340200241086a200241146a102c20022802084101710440200228020c200110370c010b0b200241206a24000ba70101017f230041306b220324000240200041017104404101200210262001104620021066200320011002360214200341003602102003200136020c0340200341186a2003410c6a102f20032802184101470d02200328022c02402003280228220110614504402001200210370c010b410420021066200241a28208410410071a0b20032903202002106a200210350c000b000b4100200210262001200210350b200341306a24000bbc08010c7f230041406a2204240020042001106e2004200428020c41016a220336020c024020042802002207450440200420033602040c010b200441106a2206200120042802082205106f2004200336023420012005200610680b200441286a200241186a290300370300200441206a200241106a290300370300200441186a200241086a2903003703002004200536023820044100360234200420033602302004200229030037031020012003200441106a220210682004200741016a3602002004200336020820012004106420022101230041106b2106024020002000410020006b41037122056a22034f0d00200021022001210020050440200521070340200220002d00003a0000200041016a2100200241016a2102200741016b22070d000b0b200541016b4107490d000340200220002d00003a0000200241016a200041016a2d00003a0000200241026a200041026a2d00003a0000200241036a200041036a2d00003a0000200241046a200041046a2d00003a0000200241056a200041056a2d00003a0000200241066a200041066a2d00003a0000200241076a200041076a2d00003a0000200041086a2100200241086a22022003470d000b0b2003413020056b220d417c71220e6a21020240200120056a22054103712201450440200220034d0d0120052101034020032001280200360200200141046a2101200341046a22032002490d000b0c010b2006410036020c2006410c6a2001722100410420016b22074101710440200020052d00003a0000410121080b20074102710440200020086a200520086a2f01003b01000b200520016b210820014103742107200628020c210b02402002200341046a4d0440200321000c010b410020076b411871210a03402003200b200776200841046a2208280200220b200a7472360200200341086a210c200341046a220021032002200c4b0d000b0b41002103200641003a0008200641003a0006027f20014101460440410021014100210a200641086a0c010b200841056a2d00002006200841046a2d000022013a0008410874210a41022109200641066a0b210c20002005410171047f200c200841046a20096a2d00003a000020062d0006411074210320062d00080520010b41ff01712003200a7272410020076b41187174200b200776723602000b2005200e6a210102402002200d410371220320026a22054f0d002003220004400340200220012d00003a0000200141016a2101200241016a2102200041016b22000d000b0b200341016b4107490d000340200220012d00003a0000200241016a200141016a2d00003a0000200241026a200141026a2d00003a0000200241036a200141036a2d00003a0000200241046a200141046a2d00003a0000200241056a200141056a2d00003a0000200241066a200141066a2d00003a0000200241076a200141076a2d00003a0000200141086a2101200241086a22022005470d000b0b200441406b24000b910101057f230041106b220224000240024020011065220110634504400c010b200241046a22032001103120032001105b2106200241046a2001105b2103200241046a2001105b2104200241046a2001105b2105200228020c2002280208470d010b2000200536020c200020043602082000200336020420002006360200200241106a24000f0b200141918008410e105d000bc50302097f027e230041306b22032400200341146a22042001200210692201103102400240200420011072220841ff01714104490440200441202001105c2109200420011073210c200420011034210a20042001105b2102102b21070340200204402007200341146a20011034102d200241016b21020c010b0b027f024002400240200341146a2001107241ff01710e020102000b200141808008410d105d000b200341146a20011033210441000c010b200341146a2001105b2102102b2104034020020440200341086a200341146a220520011034103c103d2003280208410171450d04200328020c2106200520011073210d200320052001103336022c200320063602282003200d3703202004200341206a1030200241016b21020c010b0b41010b2102200341146a2001105b2106200341146a2001105b2105200341146a2001105b210b200328021c2003280218470d022000200b3602282000200536022420002006360220200020083a001c200020073602182000200a360214200020093602102000200c3703082000200436020420002002360200200341306a24000f0b200141808008410d105d000b200141cb8208410d105d000b200141918008410e105d000b0b002000200110691063450b1c00200120021070450440200020012002106f0f0b200041023602000b2d01017f230041106b22022400200241003a000f20002002410f6a41012001107a20022d000f200241106a24000b840102017e017f230041106b22032400200342003703082000200341086a41082001107a20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b1701017f102b22022001ad42ff0183104e20002002102d0b5901017f230041206b2202240020022001100236021c20024100360218200220013602140340200241086a200241146a102c20022802084101710440200228020c2101102b1a20002001102a102d0c010b0b200241206a24000b1201017f102b220220002001103a102d20020bc60101067f230041d0006b22012400102b210220012000100236020c2001410036020820012000360204200141186a2105200141406b210303402001413f6a200141046a104f20012d003f410147450440200141306a200341086a290000370300200120032900003703282005200141286a10602001280224210620012802202104102b21000240200410614504402004102a21000c010b200041a28208410410111a0b20022000102d2002200129031810572002200610520c010b0b200141d0006a240020020bf50201037f230041e0006b22052400200520033602042005200136020041021043450440415a10150b0240410410430d00415841b78008410b10111a2005415a1002360248200542daffffff0f3702400340200541106a200541406b104f20052d00104101470d012005280011220641187420064180fe03714108747220064108764180fe0371200641187672721062450d000b419f80084118100c000b0240415a1058044041011043450440415d10160b2005415d102736020c2005410036020841bb83084114107622062000107420062005104d2006200541046a104d20062005410c6a10560c010b2005415a102e220636020c200541013602082006102e1077210741cf83084114107622062000107420062005104d2006200541046a104d2006200710750b2006102b101710792106200520003a005c2005200136025020052004360258200520033602542005200237034820052005290208370340200541106a2006200541406b106d200541e0006a24000b0a0041908308410c103a0b3901017f2000280208200028020422046b2002490440200341e38108410f105d000b2000280200200420012002105e2000200220046a3602040b0600101910400bd30102097f017e230041f0006b2200240010191040200010792201360204200041406b2001106e200041086a2001200028024410712000200041046a22023602380240034020002802084102470440200041406b200041086a22031029200028024022044102460d02200028024421052000280258200028025420002903482000280250210820002d005c200320022802002000280264107141014100103a220110252001200810041a2001106a200110372001106b200420052001106c2001101a1a0c010b0b200041f0006a24000f0b107d000b0b0041a48408410e100c000b070041001088010b070041011088010b070041021089010bea0102077f017e230041d0006b220024001042410510414100103e21034101100b2107410210382104230041106b22012400200141086a41031038103c103d2001280208410171450440418b8308410541cb8208410d1039000b200128020c2102200141106a24004104102822051009200041053602002000103b21062000280200103f102b21012000200536020c20004200370300200020023602082001200010301079210220002003360240200041033a004c200020063602482000200436024420002007370338200020013602342000410136023020002002200041306a106d200041d0006a24000b070041031089010b9c0102057f017e230041106b22002400104241041041027f024002404100100a047f4100100b22054280025a0d01200542045a0d022005a70541000b0c020b41828308410941918008410e1039000b41828308410941808008410d1039000b4101103e21024102100b21054103103821032000410436020c2000410c6a103b2104200028020c103f41ff017120022005200320041078200041106a24000bd11502187f017e230041a0026b220024001040200041f0016a210c200041a4016a210e200041a0016a2105200041e8016a2201210f200041ec016a211220004180026a210d200041e4016a2110200041e0016a2107200041bc016a2108200041fc006a2111200041f8006a2106200041e8006a4104722113200041386a41047221092001410472210a03400240200041e8006a10792201106e0240024002402001200028026c22021070450440200041e8016a220420012002107120002802e80122144102460d01200041b0016a2215200a41186a280200360200200041a8016a2216200a41106a2902003703002005200a41086a2902003703002000200a29020037039801200028028c022102200028029002210320002802940221172001200028028802220b1070450440200041386a2001106e024020030440200420012003106f2000200236028c0220012003200410680c010b2000200236023c0b024020020440200041e8016a220420012002106f200020033602900220012002200410680c010b200020033602400b2001200b106910672000200028023841016b3602382001200041386a10640b2009200029039801370200200941186a2015280200360200200941106a2016290300370200200941086a200529030037020020002017360264200020033602602000200236025c2000200b36025820002014360238200041e8016a200041386a102920004180016a200d2903003703002006200041f8016a290300370300200041f0006a200c290300370300200020002903e801221837036802402018a74101710440200028026c102e1077210241fb830841181076220120002d008401107420012006104d20012011104d2001200210750c010b41e3830841181076220120002d008401107420012006104d20012011104d2001201310560b2001102b1017200028027c21012000102b220236029401200020013602900120002006360288012000200041e8006a36028c01024002400240024020002d00840141016b0e03010203000b200720004190016a29020037030020002000290288013703d8012000101b221842a08d067d2018201842a08d06561b22183703d0012007280200210120002802e401210220002802d8012103024020002802dc0122042802004101460440024002400240200428020410460e020102000b2000200120022003200428020410482000280204210120002802002102104921031044210420002903d001200320042002200110590c030b1044210420002903d001200328020020042001200210590c020b20004198016a2004280204104720002903980121182000200e3602fc01200020053602f801200020183703f0012000200f360288022000200f36028402200020023602ec01200020013602e8012000200041d0016a360280022018500440200041086a200120022005200e104a200028020c2101200028020821021044210420002903d001200328020020042002200110590c020b200041106a200120022003280200200c104b2000280214210120002802102102104921031044210420002903d001200320042002200110590c010b2018200328020020042802042001200210590b101c0c080b20004188016a22012802042107200141106a220021042001280200210220012802082103200128020c2106200741046a210520072802004101710440230041306b220124000240024002402005280200220710460e020102000b2001200636022820012003360224200120043602202001200036021c20012005360218230041106b22002400200041086a200141186a220128020c20012802102002200128020028020010480c090b20022802001044200320061045000b200141186a200710472001200141206a3602102001200141246a3602142001200129031837030820022802002105230041206b22022400200241106a200141086a220141086a2903003703002002200436021c20022000360218200220063602042002200336020020022001290300370308230041106b220024002002280204210120022802002103200229030850044020002003200120022802102002280214104a200028020421012000280200210020051044200020011045000b200041086a200320012005200241086a104b0c070b230041206b220024002000200536020c2000200636021c200020033602182000200436021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a22002802002802002003280200280200200028020420002802081045000b2000290370211820011058450d04200028026c2103024020002802684101460440200310580d010c050b2003101d0d040b41c78108410e100c000b200029037021182000280280012102102b2103200020063602b401200020033602b001200041183602ac01200041e882083602a801200020023602a401200020013602a00120002018370398012000200041e8006a3602b801200041673602c40141674101410010111a20002802c401102a2101200020002802b001220210023602f001200041003602ec01200020023602e8010340200041306a200041e8016a102c200028023041017104402000200028023422031002220241187420024180fe03714108747220024108764180fe0371200241187672723602d8012001200041d8016a410410071a2001200310041a0c010b0b200020013602c401200042003703c80120002000290398013703d00120002802b801220b41046a210420002802a401210120002802a001210220002802b4012103200b2802004101460440024002400240200428020010460e020102000b2000200136028c02200020023602880220002008360284022000200836028002200041183602f001200041e882083602ec012000200041c4016a3602fc012000200041c8016a3602f8012000200041d0016a3602f401200020043602e801200041186a20022001200320042802001048200028021c21012000280218210220121049104420022001105a0c080b2000200136028002200020023602fc01200041183602ec01200041e882083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00110442104200041e8016a2003280200200420022001105a0c070b200041d8016a2004280200104720002903d8012118200020103602fc01200020073602f801200020183703f001200020083602980220002008360294022000411836028402200041e8820836028002200020013602ec01200020023602e8012000200041c4016a360290022000200041c8016a36028c022000200041d0016a360288022018500440200041206a2002200120072010104a200028022421012000280220210210442104200d2003280200200420022001105a0c070b200041286a200220012003280200200c104b200028022c210120002802282102200d1049104420022001105a0c060b20002001360284022000200236028002200041183602ec01200041e882083602e8012000200041c4016a3602f8012000200041c8016a3602f4012000200041d0016a3602f00120042802002104200020033602fc01200041e8016a2003280200200420022001105a0c050b200041a0026a24000f0b107d000b420021180b200028026c2103200028027821042000280268410146047f20042003201820012002101e0520042003201820012002101f0b1a0c010b0b200028020c21012000280208210010491044200020011045000b4d02027f017e101910400240419c8308410e103a220010322201100241094904402001102022024280808080105a0d01200210210f0b200041d58108410e105d000b200041918008410e105d000b13001019104041aa83084111103a1032101a1a0b02000b4901047f230041106b220124001042410210414100103e21024101103821032001410236020c2001410c6a103b2104200128020c103f200020024200200320041078200141106a24000b5102047f017e230041106b220124001042410310414100103e21024101100b21054102103821032001410336020c2001410c6a103b2104200128020c103f200020022005200320041078200141106a24000b0bc6040200418080080bb204696e76616c69642076616c756500010203696e70757420746f6f206c6f6e67756e65787065637465642045474c44207472616e7366657245474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74734d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442e6e6f64652e696e666f73746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564626164206172726179206c656e67746870726f6d697365735f63616c6c6261636b5f6d6574686f64746f63616c6c5f74797065746f6b656e7175657565645f63616c6c7363616c6c6261636b5f636f756e7463616c6c6261636b5f7061796d656e74736164645f7175657565645f63616c6c5f65676c646164645f7175657565645f63616c6c5f65736474666f72776172645f7175657565645f63616c6c5f65676c64666f72776172645f7175657565645f63616c6c5f65736474000d0002000e0002000f0002001000020070616e6963206f636375727265640041b484080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -468,6 +468,7 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCreateAsyncCall", "managedExecuteOnDestContext", @@ -483,12 +484,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder-queue.wasm", - "size": 13071, + "size": 12876, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/forwarder-raw/output/forwarder-raw-init-async-call.mxsc.json b/test/features/composability/forwarder-raw/output/forwarder-raw-init-async-call.mxsc.json index 948d47ccf..a56f41bc0 100644 --- a/test/features/composability/forwarder-raw/output/forwarder-raw-init-async-call.mxsc.json +++ b/test/features/composability/forwarder-raw/output/forwarder-raw-init-async-call.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder-raw", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -104,19 +104,18 @@ "hasCallback": true, "types": {} }, - "code": "0061736d01000000013d0b60027f7f017f60017f017f60027f7f0060017f006000017f60000060037f7f7f017f60027f7e0060047f7f7f7f017f60037f7f7f0060047f7f7f7f0002f7031603656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000003656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000303656e76106d4275666665724765744c656e677468000103656e760b7369676e616c4572726f72000203656e760f6765744e756d417267756d656e7473000403656e760f6d4275666665725365744279746573000603656e760e626967496e74536574496e743634000703656e76136d42756666657253746f7261676553746f7265000003656e76126d42756666657253746f726167654c6f6164000003656e76136d42756666657247657442797465536c696365000803656e76126d427566666572476574417267756d656e74000003656e760e636865636b4e6f5061796d656e74000503656e7612626967496e7447657443616c6c56616c7565000303656e760a626967496e745369676e000103656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000303656e7609626967496e74416464000903656e76096d4275666665724571000003656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e760f6d616e6167656457726974654c6f67000203656e76106d616e616765644173796e6343616c6c000a031211010400010102030305010402010202050505030100030616037f01418080080b7f0041d581080b7f0041e081080b074106066d656d6f7279020004696e697400250863616c6c4261636b0026077570677261646500250a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab90e110f01017f10002201200010011a20010b08004101410010180b1101017f102022022000200110071a20020b3c01037f10172102200028020021010340200141d081082802004e4504402000200141016a220336020020022001101a101b200321010c010b0b20020b0d00200010202200100c1a20000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410021a200241106a24000b190041d0810828020020004c04400f0b41c8800841121005000b1900200041d081082802004c04400f0b41b7800841111005000b0b0041d0810810063602000b2b01027f200041d481082d0000220171200041ff017146220245044041d4810820002001723a00000b20020b1901017f41cc810841cc810828020041016b220036020020000b910102037f017e230041106b22022400200220013a000f20022001ad22054218883c000c20022005421088a722033a000d20022005420888a722043a000e20024100360208200041054104200141808080084922001b2000200341ff0171457122006a41002000200441ff01711b22006a4100200020011b6a2200200241086a6a410820006b101810091a200241106a24000bd60102017e037f230041106b2202240020024200370308200010202203100a1a024020031004220441094f0d00200341002004200220046b41106a100b1a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d00200241106a24002001a70f0b41ed8008411b10182202200010011a200241b48008410310021a200241da8008410e10021a20021003000b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410021a2001200010011a200241106a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c2001280200200341042002410c6a100b1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000bc00101047f230041106b22002400100d101e4102101d4100101a220110044120470440419d800841171018220041808008410210021a200041b48008410310021a2000418c8108411010021a20001003000b4101101a21022000410236020c2000410c6a10192103200028020c101c230041106b220024002000200136020010171a2000200336020c2000200236020820002000360204200041046a220028020028020020002802042102200028020821004176420010084176200220001015000bef05020a7f017e230041306b2200240010171a10171a101e4100101d20004100360218200041186a101921052000280218101c02404108101f0d004101101f450440415d100e0b415d100f41004c04404102101f450440415a10100b41594101410010071a4159415a10011a0c010b415841828008410b10071a4159418d8008411010071a0b4159100421080340200320084f450440200041206a420037030020004200370318415920034110200041186a100b1a200029021c210a200028022421012000280218210241b981084111101822061016220441888108410410021a200241187420024180fe03714108747220024108764180fe03712002411876727210162107102022024200100820022002200141187420014180fe03714108747220014108764180fe037120014118767272101120041022210120061016220641e88008410510021a2006200141016a2209101b10172101415841828008410b10071a024041582007101241004c04402007200110230c010b200041808080203602182001200041186a410410021a2001419c8108410410021a0b2000200a3703182001200041186a410810021a10202207200210131a2007200110232006200110091a200420091021200341106a21030c010b0b1017220241a08108410c1018101b1017101621012000200510043602202000410036021c200020053602180340200041106a200041186a1024200028021041017104402000200028021422041004220341187420034180fe03714108747220034108764180fe03712003411876727236022c20012000412c6a410410021a2001200410011a0c010b0b20022001101441ac8108410d101822031016220141888108410410021a20011022210220031016220341e88008410510021a2003200241016a2204101b101721022000200510043602202000410036021c200020053602180340200041086a200041186a102420002802084101710440200028020c200210230c010b0b2003200210091a200120041021200041306a24000b0bde010200418080080bca01746f45474c442d303030303030ffffffd80000000000000000ffffffdd617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e7473696e70757420746f6f206c6f6e672e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746845474c4463616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e74730041cc81080b0438ffffff", + "code": "0061736d0100000001420c60027f7f017f60027f7f0060017f017f6000017f60017f0060000060037f7f7f017f60027f7e0060017f017e60047f7f7f7f017f60037f7f7f0060047f7f7f7f000292041603656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000003656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000403656e76106d4275666665724765744c656e677468000203656e760b7369676e616c4572726f72000103656e760f6765744e756d417267756d656e7473000303656e760f6d4275666665725365744279746573000603656e760e626967496e74536574496e743634000703656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000703656e76136d42756666657253746f7261676553746f7265000003656e76126d42756666657253746f726167654c6f6164000003656e76196d427566666572546f536d616c6c496e74556e7369676e6564000803656e76126d427566666572476574417267756d656e74000003656e76136d42756666657247657442797465536c696365000903656e760e636865636b4e6f5061796d656e74000503656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e7609626967496e74416464000a03656e76096d4275666665724571000003656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e760f6d616e6167656457726974654c6f67000103656e76106d616e616765644173796e6343616c6c000b031211020300020201040405030102010101050505030100030616037f01418080080b7f0041d181080b7f0041e081080b074106066d656d6f7279020004696e697400250863616c6c4261636b0026077570677261646500250a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aef0b110f01017f10002201200010011a20010b08004101410010180b1101017f101f22022000200110071a20020b3c01037f10172102200028020021010340200141cc81082802004e4504402000200141016a220336020020022001101a101b200321010c010b0b20020b0d002000101f2200100d1a20000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410021a200241106a24000b190041cc810828020020004c04400f0b41ad800841121005000b1900200041cc81082802004c04400f0b419c800841111005000b0b0041cc810810063602000b1901017f41c8810841c8810828020041016b220036020020000b100041672001ad100920004167100a1a0b4102017f017e2000101f2201100b1a02402001100441094904402001100c22024280808080105a0d012002a70f0b200041bf80081022000b2000419081081022000b2c01017f41dd8008411b10182202200010011a200241998008410310021a20022001410e10021a20021003000b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410021a2001200010011a200241106a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c2001280200200341042002410c6a100e1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000bc00101047f230041106b22002400100f101e4102101d4100101a2201100441204704404182800841171018220041808008410210021a200041998008410310021a200041fc8008411010021a20001003000b4101101a21022000410236020c2000410c6a10192103200028020c101c230041106b220024002000200136020010171a2000200336020c2000200236020820002000360204200041046a220028020028020020002802042102200028020821004176420010084176200220001015000bbc05020a7f017e230041306b2200240010171a10171a101e4100101d20004100360218200041186a101921052000280218101c41d081082d0000220141087145044041d0810820014108723a0000415910100b4159100421080340200320084f450440200041206a420037030020004200370318415920034110200041186a100e1a200029021c210a200028022421012000280218210241b781084111101822061016220441f88008410410021a200241187420024180fe03714108747220024108764180fe03712002411876727210162107101f22024200100820022002200141187420014180fe03714108747220014108764180fe037120014118767272101120041021210120061016220641d88008410510021a2006200141016a2209101b10172101415841cd8008410b10071a024041582007101241004c04402007200110230c010b200041808080203602182001200041186a410410021a2001418c8108410410021a0b2000200a3703182001200041186a410810021a101f2207200210131a20072001102320062001100a1a200420091020200341106a21030c010b0b10172202419e8108410c1018101b1017101621012000200510043602202000410036021c200020053602180340200041106a200041186a1024200028021041017104402000200028021422041004220341187420034180fe03714108747220034108764180fe03712003411876727236022c20012000412c6a410410021a2001200410011a0c010b0b20022001101441aa8108410d101822031016220141f88008410410021a20011021210220031016220341d88008410510021a2003200241016a2204101b101721022000200510043602202000410036021c200020053602180340200041086a200041186a102420002802084101710440200028020c200210230c010b0b20032002100a1a200120041020200041306a24000b0bdc010200418080080bc801746f617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747376616c756520746f6f206c6f6e6745474c442d3030303030302e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746845474c44696e70757420746f6f206c6f6e6763616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e74730041c881080b0438ffffff", "report": { "imports": [ "bigIntAdd", - "bigIntGetCallValue", "bigIntSetInt64", - "bigIntSign", "checkNoPayment", "getNumArguments", "mBufferAppend", "mBufferAppendBytes", "mBufferEq", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -124,20 +123,21 @@ "mBufferSetBytes", "mBufferStorageLoad", "mBufferStorageStore", + "mBufferToSmallIntUnsigned", "managedAsyncCall", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedSignalError", "managedWriteLog", "signalError" ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder-raw-init-async-call.wasm", - "size": 2773, + "size": 2473, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/composability/forwarder-raw/output/forwarder-raw-init-sync-call.mxsc.json b/test/features/composability/forwarder-raw/output/forwarder-raw-init-sync-call.mxsc.json index 72eb2e96b..0d4149335 100644 --- a/test/features/composability/forwarder-raw/output/forwarder-raw-init-sync-call.mxsc.json +++ b/test/features/composability/forwarder-raw/output/forwarder-raw-init-sync-call.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder-raw", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -82,13 +82,11 @@ "hasCallback": true, "types": {} }, - "code": "0061736d0100000001440c60027f7f017f60017f017f6000017f60027f7f0060017f0060000060037f7f7f017f60047f7f7f7f017f6000017e60067e7f7f7f7f7f017f60027f7e0060037f7f7f000294041703656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000003656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e76106d4275666665724765744c656e677468000103656e760b7369676e616c4572726f72000303656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000403656e760f6765744e756d417267756d656e7473000203656e760f6d4275666665725365744279746573000603656e76096d4275666665724571000003656e76136d42756666657253746f7261676553746f7265000003656e76126d42756666657253746f726167654c6f6164000003656e76126d427566666572476574417267756d656e74000003656e760a6765744761734c656674000803656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000903656e760f636c65616e52657475726e44617461000503656e760f6d616e6167656457726974654c6f67000303656e760a626967496e745369676e000103656e760e626967496e74536574496e743634000a03656e7609626967496e74416464000b03656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e76136d42756666657247657442797465536c6963650007031a190102010202060100010201030404050702030001030303050505030100030616037f01418080080b7f0041d182080b7f0041e082080b073705066d656d6f7279020004696e6974002e0863616c6c4261636b002f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa811190f01017f10002201200010011a20010b100041011019450440415d10020b415d0b2b01027f200041d082082d0000220171200041ff017146220245044041d0820820002001723a00000b20020b100041021019450440415a10030b415a0bc80101037f230041106b22012400024002400240024002400240101a220010044104760e020201000b41c28008411d1005000b200141086a420037030020014200370300200020014110101c0d02200128020c21002001280200220241187420024180fe03714108747220024108764180fe037120024118767272101d0d01419d800841251005000b101821000c020b200041187420004180fe03714108747220004108764180fe03712000411876727221000c010b41aa8108411d1005000b200141106a240020000b0c00200041002001200210260b1600415841828008410b10091a41582000100a41004a0b1101017f102722022000200110091a20020b3c01037f10202102200028020021010340200141cc82082802004e4504402000200141016a22033602002002200110211022200321010c010b0b20020b080041014100101e0b0d00200010272200100d1a20000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b190041cc820828020020004c04400f0b418a810841121005000b1900200041cc82082802004c04400f0b41f9800841111005000b0b0041cc820810083602000b0f00200020012003200210164100470b1901017f41c8820841c8820828020041016b220036020020000b910102037f017e230041106b22022400200220013a000f20022001ad22054218883c000c20022005421088a722033a000d20022005420888a722043a000e20024100360208200041054104200141808080084922001b2000200341ff0171457122006a41002000200441ff01711b22006a4100200020011b6a2200200241086a6a410820006b101e100b1a200241106a24000b1201017f1020220220002001101e102220020bd40102017e037f230041106b2202240020024200370308200010272203100c1a024020031004220441094f0d002003200220046b41106a2004101c1a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d00200241106a24002001a70f0b41cc8108411b101e2202200010011a200241f68008410310061a2002419c8108410e10061a20021007000b990101037f230041206b2202240020012802001017210320022000100436021820024100360214200220003602100340200241086a200241106a102c200228020841017104402002200228020c22041004220041187420004180fe03714108747220004108764180fe03712000411876727236021c20032002411c6a410410061a2003200410011a0c010b0b20012003360200200241206a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410261a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010011a200241106a24000bf60102057f017e230041206b22002400101b1a1025410210244100102122011004412047044041df80084117101e220041808008410210061a200041f68008410310061a200041eb8108411010061a20001007000b41011021210220004102360214200041146a101f210320002802141023101b2104100e10201a420188200120042002200310272201100f1a10101020210220002001100436021c20004100360218200020013602140340200041086a200041146a102c200028020841017104402002200028020c101710220c010b0b41a98208411e1029200010203602142002200041146a102b20002802141011200041206a24000bdc04020a7f017e230041206b2200240010201a10201a10254100102420004100360210200041106a101f2107200028021010230240410810190d001018101241004c0440101a210141594101410010091a4159200110011a0c010b415841828008410b10091a4159418d8008411010091a0b4159100421080340200320084f450440200041186a42003703002000420037031041592003200041106a411010261a2000290214210a200028021c210120002802102102419882084111101e22041017220541e78108410410061a200241187420024180fe03714108747220024108764180fe03712002411876727210172106102722024200101320022002200141187420014180fe03714108747220014108764180fe03712001411876727210142005102a210120041017220441c78108410510061a2004200141016a220910221020210102402006101d45044020062001102d0c010b200041808080203602102001200041106a410410061a200141fb8108410410061a0b2000200a3703102001200041106a410810061a10272206200210151a20062001102d20042001100b1a200520091028200341106a21030c010b0b41ff8108410c1029200010203602102007200041106a102b20002802101011418b8208410d101e22031017220141e78108410410061a2001102a210220031017220341c78108410510061a2003200241016a220510221020210220002007100436021820004100360214200020073602100340200041086a200041106a102c20002802084101710440200028020c2002102d0c010b0b20032002100b1a200120051028200041206a24000b0bdb020200418080080bc702746f45474c442d303030303030ffffffd80000000000000000ffffffdd66756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e7473696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e67652e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746845474c4463616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e7473657865637574655f6f6e5f646573745f636f6e746578745f726573756c740041c882080b0438ffffff", + "code": "0061736d0100000001490d60027f7f017f60027f7f006000017f60017f017f60017f0060000060027f7e0060037f7f7f017f60047f7f7f7f017f60017f017e6000017e60067e7f7f7f7f7f017f60037f7f7f0002af041703656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000003656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e76106d4275666665724765744c656e677468000303656e760b7369676e616c4572726f72000103656e760e626967496e74536574496e743634000603656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000403656e760f6765744e756d417267756d656e7473000203656e760f6d4275666665725365744279746573000703656e76096d4275666665724571000003656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000603656e76136d42756666657253746f7261676553746f7265000003656e76126d42756666657253746f726167654c6f6164000003656e76196d427566666572546f536d616c6c496e74556e7369676e6564000903656e76126d427566666572476574417267756d656e74000003656e760a6765744761734c656674000a03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000b03656e760f636c65616e52657475726e44617461000503656e760f6d616e6167656457726974654c6f67000103656e7609626967496e74416464000c03656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e76136d42756666657247657442797465536c6963650008031817030202080300030203010404050201000301010101050505030100030616037f01418080080b7f0041e182080b7f0041f082080b073705066d656d6f7279020004696e6974002c0863616c6c4261636b002d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ae10e170f01017f10002201200010011a20010b2601017f41e082082d0000220041087145044041e0820820004108723a0000415910020b41590bdb0101037f230041106b22012400027f02400240024002401018220010034104760e020201000b41a78008411d1004000b200141086a4200370300200142003703002000100341104f04402000410020014110101a450d02418f810841131004000b41a28108411d1004000b415d42001005415d0c010b200128020c21002001280200220241187420024180fe03714108747220024108764180fe037120024118767272101b4504404182800841251004000b200041187420004180fe03714108747220004108764180fe0371200041187672720b200141106a24000b0f00200020012003200210164100470b1600415841bf8108410b10091a41582000100a41004a0b1101017f102422022000200110091a20020b3c01037f101e2102200028020021010340200141dc82082802004e4504402000200141016a220336020020022001101f1020200321010c010b0b20020b080041014100101c0b0d00200010242200100f1a20000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b190041dc820828020020004c04400f0b41ef800841121004000b1900200041dc82082802004c04400f0b41de800841111004000b0b0041dc820810083602000b1901017f41d8820841d8820828020041016b220036020020000b100041672001ad100b20004167100c1a0b1201017f101e220220002001101c102020020b4102017f017e200010242201100d1a02402001100341094904402001100e22024280808080105a0d012002a70f0b2000418181081028000b2000418282081028000b2c01017f41cf8108411b101c2202200010011a200241db8008410310061a20022001410e10061a20021007000b990101037f230041206b2202240020012802001017210320022000100336021820024100360214200220003602100340200241086a200241106a102a200228020841017104402002200228020c22041003220041187420004180fe03714108747220004108764180fe03712000411876727236021c20032002411c6a410410061a2003200410011a0c010b0b20012003360200200241206a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a4104101a1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b5101027f230041106b22022400200220001003220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010011a200241106a24000bf60102057f017e230041206b2200240010191a1023410210224100101f22011003412047044041c480084117101c220041808008410210061a200041db8008410310061a200041ee8108411010061a20001007000b4101101f210220004102360214200041146a101d210320002802141021101921041010101e1a42018820012004200220031024220110111a1012101e210220002001100336021c20004100360218200020013602140340200041086a200041146a102a200028020841017104402002200028020c101710200c010b0b41ba8208411e10262000101e3602142002200041146a102920002802141013200041206a24000b9f04020b7f017e230041206b22002400101e1a101e1a10234100102220004100360210200041106a101d21072000280210102110182208100321090340200320094f450440200041186a42003703002000420037031020082003200041106a4110101a1a2000290214210b200028021c21012000280210210241a982084111101c22041017220541ea8108410410061a200241187420024180fe03714108747220024108764180fe03712002411876727210172106102422024200100520022002200141187420014180fe03714108747220014108764180fe037120014118767272101420051027210120041017220441ca8108410510061a2004200141016a220a1020101e210102402006101b45044020062001102b0c010b200041808080203602102001200041106a410410061a200141fe8108410410061a0b2000200b3703102001200041106a410810061a10242206200210151a20062001102b20042001100c1a2005200a1025200341106a21030c010b0b41908208410c10262000101e3602102007200041106a102920002802101013419c8208410d101c22031017220141ea8108410410061a20011027210220031017220341ca8108410510061a2003200241016a22051020101e210220002007100336021820004100360214200020073602100340200041086a200041106a102a20002802084101710440200028020c2002102b0c010b0b20032002100c1a200120051025200041206a24000b0bec020200418080080bd802746f66756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747376616c756520746f6f206c6f6e67736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746845474c44696e70757420746f6f206c6f6e6763616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e7473657865637574655f6f6e5f646573745f636f6e746578745f726573756c740041d882080b0438ffffff", "report": { "imports": [ "bigIntAdd", - "bigIntGetCallValue", "bigIntSetInt64", - "bigIntSign", "cleanReturnData", "getGasLeft", "getNumArguments", @@ -96,6 +94,7 @@ "mBufferAppendBytes", "mBufferEq", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -103,20 +102,21 @@ "mBufferSetBytes", "mBufferStorageLoad", "mBufferStorageStore", + "mBufferToSmallIntUnsigned", "managedExecuteOnDestContext", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedSignalError", "managedWriteLog", "signalError" ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder-raw-init-sync-call.wasm", - "size": 3299, + "size": 3019, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/composability/forwarder-raw/output/forwarder-raw.mxsc.json b/test/features/composability/forwarder-raw/output/forwarder-raw.mxsc.json index ea3fc689b..dd2bdaf81 100644 --- a/test/features/composability/forwarder-raw/output/forwarder-raw.mxsc.json +++ b/test/features/composability/forwarder-raw/output/forwarder-raw.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder-raw", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -543,7 +543,7 @@ "hasCallback": true, "types": {} }, - "code": "0061736d01000000019d011860000060027f7f0060017f017f60017f006000017f60027f7f017f60037f7f7f0060047f7f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60057f7f7e7f7f0060067e7f7f7f7f7f017f60057f7f7e7f7f017f60057e7f7f7f7f017f60077e7f7f7f7f7f7f017f60077f7e7f7f7f7f7f0060017f017e60017e006000017e60047f7f7f7e0060057f7f7f7f7f0060037f7e7f0060027e7f0002ac082a03656e760e626967496e74536574496e743634000803656e7609626967496e74416464000603656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000503656e76106d4275666665724765744c656e677468000203656e760f6d4275666665725365744279746573000903656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000c03656e761b6d616e616765645472616e7366657256616c756545786563757465000d03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000d03656e760b7369676e616c4572726f72000103656e7612626967496e7447657443616c6c56616c7565000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000303656e76126d427566666572476574417267756d656e74000503656e76126d427566666572417070656e644279746573000903656e76126d616e616765645369676e616c4572726f72000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74001103656e760f6765744e756d417267756d656e7473000403656e760f636c65616e52657475726e44617461000003656e76146d427566666572436f707942797465536c696365000a03656e760a626967496e745369676e000203656e760a626967496e7454446976000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e76176d427566666572546f426967496e74556e7369676e6564000503656e76126d42756666657253746f726167654c6f6164000503656e76136d42756666657253746f7261676553746f7265000503656e760f6d616e6167656457726974654c6f67000103656e760d6d42756666657246696e697368000203656e76106d616e61676564534341646472657373000303656e760e636865636b4e6f5061796d656e74000003656e760666696e697368000103656e7616736d616c6c496e7446696e697368556e7369676e6564001203656e7614626967496e7446696e697368556e7369676e6564000303656e760a6765744761734c656674001303656e761b6d616e61676564457865637574654f6e53616d65436f6e74657874000c03656e76166d616e6167656445786563757465526561644f6e6c79000e03656e76156d616e61676564437265617465436f6e7472616374000f03656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374000f03656e76166d616e6167656455706772616465436f6e7472616374001003656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000503656e76106d616e616765644173796e6343616c6c0007037f7e02040202040101010605010201030e0b020501020404040201020301040304010402070209020a04030303000106040704010b010608010114011507070103020803020b0203050706010202040202020301160505020201050102010117010303030300000000000000000000000000000000000000000000000000000005030100030616037f01418080080b7f00418586080b7f00419086080b0793061e066d656d6f7279020004696e6974008d010d63616c6c6261636b5f61726773008e011163616c6c6261636b5f7061796d656e7473008f011963616c6c6261636b5f7061796d656e74735f747269706c657300900113636c6561725f63616c6c6261636b5f696e666f0091011663616c6c6261636b5f617267735f61745f696e6465780092011963616c6c6261636b5f7061796d656e745f61745f696e6465780093010f666f72776172645f7061796d656e7400940123666f72776172645f6469726563745f657364745f7669615f7472616e73665f6578656300950119666f72776172645f6469726563745f657364745f6d756c746900960112666f72776172645f6173796e635f63616c6c0097011f666f72776172645f6173796e635f63616c6c5f68616c665f7061796d656e7400980118666f72776172645f7472616e73665f657865635f65676c6400990118666f72776172645f7472616e73665f657865635f65736474009a0113666f72776172645f7472616e73665f65786563009b0119666f72776172645f7472616e73665f657865635f7477696365009c012b666f72776172645f6173796e635f72657472696576655f6d756c74695f7472616e736665725f66756e6473009d0136666f727761726465725f6173796e635f73656e645f616e645f72657472696576655f6d756c74695f7472616e736665725f66756e6473009e011c63616c6c5f657865637574655f6f6e5f646573745f636f6e74657874009f012263616c6c5f657865637574655f6f6e5f646573745f636f6e746578745f747769636500a0011c63616c6c5f657865637574655f6f6e5f73616d655f636f6e7465787400a1012563616c6c5f657865637574655f6f6e5f646573745f636f6e746578745f726561646f6e6c7900a2010f6465706c6f795f636f6e747261637400a301126465706c6f795f66726f6d5f736f7572636500a4010c63616c6c5f7570677261646500a5011863616c6c5f757067726164655f66726f6d5f736f7572636500a6010863616c6c4261636b00a7010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ac75f7e1601017f102b220142001000200120012000100120010b1901017f41fc850841fc850828020041016b220036020020000b0f01017f10022201200010031a20010b5801027f230041206b22012400102e210220012000100436021c20014100360218200120003602140340200141086a200141146a102f200128020841017104402002200128020c102c10300c010b0b200141206a240020020b08004101410010330b6301027f230041106b220224002002410b6a200110830120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100d1a200241106a24000b3b02017f017e20002001280204220220012802084d047e2001200241016a360204200041086a20012802002802002002103242010542000b3703000bed0102027f017e230041206b22032400200320012002107d2201107922021004360214200341003602102003200236020c2003410c6a22042001107010772102200342003703182004200341186a410820011071200329031821052003410c6a200110701078210420032802142003280210470440200141fc8308410e1072000b2000200436020c200020023602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200341206a24000b1101017f102b22022000200110051a20020b0a0020001035200110360b0f01017f102b2201200010151a20010b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100d1a2001200010031a200241106a24000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210051a200141106a24000b150020002001200220032004102b220110061a20010b8c0101027f230041306b220524000240200110040440200541286a42003703002005420037032002402001103a4101470d002001200541206a2206103b1a200541106a2006103c200528021c21062005280218103d450d002000200620022003200410071a0c020b2000200120022003200410081a0c010b2000103e20022003200410071a0b200541306a24000b0900200010044104760b0f00200041002001411010504101730bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841b78108410b10051a200010430b0e01017f102b22004200100020000b8f0101037f230041206b22002400104021010240410410410d00415841b78108410b10051a200020011004360208200041003602042000200136020003402000410f6a2000104220002d000f4101470d012000280010220241187420024180fe03714108747220024108764180fe0371200241187672721043450d000b41d2810841181009000b200041206a240020010b100041021041450440415a100b0b415a0b2b01027f2000418486082d0000220171200041ff01714622024504404184860820002001723a00000b20020b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010501a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102841004a0b4d01027f230041106b220124000240103f2202103a41014604402001200210452001290300500d0141ea8108411c1009000b4195810841221009000b20002001290308370300200141106a24000bf60102017e027f230041106b22032400200341086a4200370300200342003703002001410020034110105045044020032902042102200328020021012000200328020c220441187420044180fe03714108747220044108764180fe03712004411876727236020c2000200141187420014180fe03714108747220014108764180fe0371200141187672723602082000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe03832002423888848484370300200341106a24000f0b41998408411d1009000b100041011041450440415d100a0b415d0b7f02037f017e230041106b220124000240024002400240024010402202103a0e020102000b4195810841221009000b104821021046102a21030c010b2001200210492001280208102c21022001290300200128020c102a21034200520d010b2000200336020420002002360200200141106a24000f0b41ea8108411c1009000b0a0041b78108410b10330b6001017f230041306b22022400200241286a4200370300200242003703202001200241206a2201103b0440200241106a2001103c200041086a200241186a29030037030020002002290310370300200241306a24000f0b41998408411d1009000b5701027f230041106b22002400027f02400240024010402201103a0e020102000b41ab8208411d1009000b10460c010b2000200110492000280208103d4504404186820841251009000b200028020c0b200041106a24000b0d002000102b2200100c1a20000b2e01017f41c8820841171033220420002001100d1a200441df82084103100d1a200420022003100d1a2004100e000b3b01037f102e21022000280200210103404180860828020020014a04402000200141016a220336020020022001104b1030200321010c010b0b20020b1f002000104b2200100441204704402001200241eb84084110104c000b20000b7901027f230041106b220124002000104b220010042102200141003b010e0240200041002001410e6a4102105045044020024102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41d78008410d418a8408410f104c000b41d78008410d41fc8308410e104c000b0f00200020012003200210274100470b2601017e4100100f22004280808080105a044041d28008410541fc8308410e104c000b2000a70b19004180860828020020004c04400f0b41f3820841121009000b1400101020004604400f0b4185830841191009000b19002000418086082802004c04400f0b41e2820841111009000b0b004180860810103602000b0900200020011009000b0d0020001058200120021059000b0a0041764200100041760b0d0020002001200220031029000b0c01017f102b2200101b20000bfa0201057f230041106b22032400200028020421052000280200210620002903085004402000280210210220002802142104230041206b22002400200041186a41e28308410c105e200041106a2000280218200028021c20021065200041086a200028021020002802142004106620002000280208200028020c200620051064200028020421022003200028020036020020032002360204200041206a2400200328020421002003280200210220011058200220001059000b230041306b22022400200241286a41d38308410f105e200241206a2002280228200228022c200041086a22002802081065200241186a2002280220200228022420002903001062200241106a2002280218200228021c200028020c10662002280210210420022802142100102e1a20002001102c1030200241086a20042000200620051064200228020c2100200341086a2201200228020836020020012000360204200241306a2400200328020c210020032802082101105a1058200120001059000b5c02037f017e230041106b22052400102e21062000280208280200102c2107200029030021082005200028020c280200102a36020c200520083703002005200736020820062005105d200120062002200320041039200541106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100d1a200341106a24000b180020012002103321012000102e360204200020013602000b2e01017f230041106b2202240020022001200241086a107c20002002280200200228020410051a200241106a24000b5501017f230041306b220224002002411f6a20011042200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a103c42010542000b370300200241306a24000b0d00102e1a20002001102c10300b160020022003106a20002002360204200020013602000b0d00102e1a20002001103510300b6e01017f230041206b220524000240200310690d0020022003106120052004100436021c20054100360218200520043602140340200541086a200541146a102f2005280208410171450d012002200528020c10610c000b000b2000200236020420002001360200200541206a24000b1e00102e1a20022003280200102c103020002002360204200020013602000b1e00102e1a200220032802001035103020002002360204200020013602000b10002000102e360204200020013602000b3501027f230041106b22012400200141086a102e1067200128020c21022000200128020836020020002002360204200141106a24000b070020001004450b1201017f102e22022001105f2000200210300bdd0102047f027e230041406a2201240002400240200028021822021069450440200029031021050c010b200028020c106c0d010b200141106a200041086a290300220637030020012000290300370308200041206a2103200028021c210002402006a72204103d4504402001200436021c2001200141146a36023c20012001290308370330200120003602282001200236022420012001411c6a36023820012003360220200141306a2003280200200520022000105c0c010b20012802142003280200200520022000106d0b200141406b24000f0b41ee8308410e1056000b0b002000107441ff0171450b5901037f230041106b220524002000106c0440419e830841211056000b102e21062000102a2100104821072005200036020c200542003703002005200736020820062005105d200120062002200320041039200541106a24000b27002000290300200028021028020020002802142802002000280208200028020c10381011102d0b880501077f230041106b22012400200141086a200041086a290300370300200120002903003703002000411c6a2105200028021821032000280210210420002802142100230041106b2202240020022000360208200220043602042002200336020c230041206b2200240020012802082103200041086a2204200241046a220241086a280200360200200020022902003703002000200128020c36020c2000200136021c2000200536021820002005360214230041206b220224002003103d450440200241106a20042902003703002002200336021820022000290200370308230041206b22012400200041146a2200280204210520002802002104200241086a220228020c2106200141086a200241086a2802003602002001200636021c200120033602182001200229020037030020012000280208290300370310200128020821032001280200210620012802042107230041106b220224002002200141106a220041086a36020820022000410c6a36020c20022000290300370300230041206b22002400200041106a200241086a2903003703002000200436021c2000200536021820002007360204200020063602002000200229030037030820002003105b000b230041106b22012400200028020c2102200141086a200041086a2802003602002001200236020c20012000290200370300200128020821032001280200210420012802042101230041206b220024002000200336020c200020023602082000200136021c20002004360218200020053602142000200041086a360210230041106b22012400200041106a2202280200210320012000410c6a36020420012002290208370208200141046a22002802002802002003280200200028020420002802081059000b820101047f230041106b220324002003410036020c20002003410c6a410420011071200328020c2102200028020421041002210520002802002004200241187420024180fe03714108747220024108764180fe03712002411876727222022005101204402001418a8408410f1072000b2000200220046a360204200341106a240020050b2e01017f20002802002000280204220420012002105004402003418a8408410f1072000b2000200220046a3602040b2c01017f41bf8408411b10332203200010031a200341df82084103100d1a200320012002100d1a2003100e000bfe0102017e047f230041106b220324000240024020002001280204200128020849047e2001108401102c10772206103d0d01200110840121042003420037030820041004220541094f0d0220044100200320056b41106a200510501a20032903082102200020011084011078360214200020063602102000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe0383200242388884848437030842010542000b370300200341106a24000f0b41fb8408410841da8408410d104c000b41fb8408410841fc8308410e104c000b110020001013220041004a20004100486b0b0c00200020001076101420000b0a0041754202100041750b4901017f230041106b220124000240200010044104470d002001410036020c200041002001410c6a410410501a200128020c41c58eb1a204470d00104821000b200141106a240020000b0d002000102b220010161a20000b0d002000102b220010171a20000b1200416c4101410010051a2000416c10181a0b3101017f230041106b2202240020022001ad200241086a107c200020022802002002280204103310181a200241106a24000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b5701017f230041106b220224002000102c220041ba84084105100d1a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100d1a200241106a240020000b6c01047f230041106b2202240020002001107d220510792103102e2104200220031004220136020c410021002002410036020820022003360204034020002001464504402004200241046a20051070103020022802082100200228020c21010c010b0b200241106a240020040bbe0102017e037f230041106b2202240020024200370308024020001079220410042203410949044020044100200220036b41106a200310501a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d01200241106a24002001a70f0b200041fc8308410e1072000b200041fc8308410e1072000b2a01017f230041106b220124002001102e36020c20002001410c6a108101200128020c200141106a24000b990101037f230041206b220224002001280200102c210320022000100436021820024100360214200220003602100340200241086a200241106a102f200228020841017104402002200228020c22041004220041187420004180fe03714108747220004108764180fe03712000411876727236021c20032002411c6a4104100d1a2003200410031a0c010b0b20012003360200200241206a24000b1201017f102e2202200020011033103020020b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410501a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b6101017f230041106b220124002001410b6a200010830120012d000b4101460440200128000c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b41fb8408410841e282084111104c000b22002000103d45044020012000102c3602000f0b200128020041b68408410410051a0b4801017f230041106b2202240002402000103d4504402000200110360c010b2002418080802036020c20012002410c6a4104100d1a200141b684084104100d1a0b200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100d1a200241106a24000b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b2901027f418f8508410d10332201102c220241e784084104100d1a20002002360204200020013602000b2901027f419c8508411110332201102c220241e784084104100d1a20002002360204200020013602000b120041ad8508411e108201200010800110190b5901027f230041206b22012400102e210220012000100436021c20014100360218200120003602140340200141086a200141146a102f20012802084101710440200128020c200210360c010b0b2002101a1a200141206a24000b0800101c410010530b5401047f230041106b22002400101c41001053200041086a10890120002802082102200028020c107f2103410121010340200120034b45044020022001107e108c01200141016a21010c010b0b200041106a24000b930101037f230041406a22002400101c41001053200041086a108a012000200028020c22013602182000200028020836021420002001107f360224200041013602202000200041146a36021c0340200041286a2000411c6a10312000280228410147450440200028023c2000280238102e220110860120002903302001108701200110342001101a1a0c010b0b200041406b24000be40101047f230041d0006b22002400101c41001053102e2101200041106a108a012000200028021422023602202000200028021036021c20002002107f36022c2000410136022820002000411c6a3602240340200041306a200041246a103120002802304101474504402000280244210220002802402000102e36024c200041cc006a1085012001200028024c103020012000290338106a2001200210630c010b0b20002001100436023820004100360234200020013602300340200041086a200041306a102f20002802084101710440200028020c101a1a0c010b0b200041d0006a24000bd10101047f230041306b22002400101c41001053200041186a10890120002802182101200028021c2202107f2103200041003a002c20002003360228200041013602240340200041106a200041246a1088012000280210410171044020012000280214107d107a0c010b0b20024100107b200041086a108a0120002802082101200028020c2202107f2103200041003a002c200020033602282000410136022403402000200041246a1088012000280200410171044020012000280204107d107a0c010b0b20024100107b200041306a24000b890101037f230041206b22002400101c4101105310512101200041086a10890102402001450d0020002802082102200028020c107f2001490d00200020022001107e2201100436021c200041003602182000200136021403402000200041146a102f200028020041017104402000280204101a1a0c010b0b200041206a24000f0b41e9850841121009000b830101037f230041206b22002400101c4101105310512101200041086a108a0102402001450d0020002802082102200028020c107f2001490d00200041106a200220011032024020002802182201103d4504402001101a1a0c010b41b684084104101d0b2000290310101e200028021c101f200041206a24000f0b41e9850841121009000ba80101067f230041306b22002400410110534100418480084102104e2103200041086a1047200028020821042000200028020c220536021020001068200028020421012000280200210202402004103d45044020002004360214200042003703202000200136021c200020023602182000200041106a36022c2000200041146a360228200041206a2003420020022001105c0c010b20052003420020022001106d0b200041306a24000bac0101027f230041d0006b220024004101105320004100418480084102104e360214200041086a1044200028020c2101200020002802083602182000200136021c2000420037032020002000411c6a36022c2000200041146a360230200041286a2201200041186a360200200041406b20012903003703002000200041346a3602482000420037033820001068200041386a2000280214420020002802002000280204105c200041d0006a24000b3901037f230041106b22002400410110534100418480084102104e103f200041086a106842002000280208200028020c1039200041106a24000b7f02057f017e230041306b220024001055410210544100418480084102104e21014101104b210220004102360210200041106a2203104d210420002802101052200041086a10472000290308210520002002106720002001360228200020043602242000200537031820004200370310200020002802003602202003106f000b8d0101077f230041306b220024001055410210544100418480084102104e21014101104b210220004102360210200041106a2203104d210420002802101052200041086a104720002802082105200028020c1075210620002002106720002001360228200020043602242000200636021c2000200536021820004200370310200020002802003602202003106f000b9d0102077f017e230041306b22002400104a1a1055410210544100418480084102104e21034101104b210120004102360208200041086a2204104d210520002802081052104a10482106102a21022000200110672000280200210110202107200020053602242000200136022020002002360214200020063602102000420037030820002003360228200020074201883703182004106b200041306a24000bac0102077f017e230041406a220024001055410210544100418480084102104e21034101104b210120004102360218200041186a2204104d210520002802181052200041106a104420002802142000280210102c2106102a2102200041086a200110672000280208210110202107200020053602342000200136023020002002360224200020063602202000420037031820002003360238200020074201883703282004106b200041406b24000b9a0102057f027e230041406a220024001055410210544100418480084102104e21024101104b210120004102360218200041186a2203104d210420002802181052200041106a104720002903102105200041086a2001106720002802082101102021062000200436023420002001360230200020053703202000420037031820002002360238200020064201883703282003106b200041406b24000b9102020c7f017e230041406a220024001055410210544100418480084102104e21034101104b210120004102360218200041186a2204104d210520002802181052200041106a1047200028021021062000280214107521072003102c21082006102c21092007102a210a2001102c21022005102d210b200041086a20021067200028020821021020210c2000200b360234200020023602302000200a3602242000200936022020004200370318200020083602382000200c4201883703282004106b200020011067200028020021011020210c2000200536023420002001360230200020073602242000200636022020004200370318200020033602382000200c4201883703282004106b200041406b24000bfe0102047f017e230041406a22002400101c1055410110544100418480084102104e210120004101360220200041206a104d21022000280220105220002001360210102e210120002002100436021c20004100360218200020023602140340200041206a200041146a107320002802204101460440200028023421022000290328210420002802302000102e36023c2000413c6a1085012001200028023c1030102e22032004105f200120031030102e1a20012002103510300c010b0b200041086a41a080084114105e20002001360228200020002802083602242000200041106a360220200041206a2200280200280200200028020420002802081057000ba907020a7f027e230041206b22012400101c1055410110544100418480084102104e21002001410136020c2001410c6a2202104d2103200128020c105220012000360208230041106b22002400200041086a41b48008411e105e200028020c21042001200028020836020020012004360204200041106a24002001290300210b230041406a22002400102e2105200020031004360214200041003602102000200336020c0340200041186a2000410c6a1073200028021841014604402000290320210a200028022821032000200028022c220441187420044180fe03714108747220044108764180fe03712004411876727236023c2000200341187420034180fe03714108747220034108764180fe0371200341187672723602302000200a423886200a4280fe038342288684200a428080fc0783421886200a42808080f80f834208868484200a42088842808080f80f83200a421888428080fc078384200a4228884280fe0383200a4238888484843702342005200041306a4110100d1a0c010b0b200041406b24002001200b3702142001200536021c20012001411c6a3602102001200141086a36020c20022802042106200241106a21002002280200280200210320022802082104200228020c2105230041306b2201240002400240024020062802002202103a0e020102000b2001200536022820012004360224200120003602202001200036021c20012006360218230041106b22022400200241086a2106200141186a220028020c21072000280210210820002802002802002104230041406a22002400200041106a41bf83084114105e2000280210210520002802142101102e1a20012003102c10302004103a2103102e22092003ad105f200120091030200020041004360224200041003602202000200436021c0340200041286a2000411c6a106020002802284101460440200028023c2103200120002802381061200020052001200029033010622000280200210520002802042201200310630c010b0b200041086a20052001200720081064200028020c21012006200028020836020020062001360204200041406b2400200228020c210020022802082101105a1058200120001059000b2003200420051057000b200141186a200210452001200141206a3602102001200141246a36021420012001290318370308230041206b22022400200241106a200141086a220141086a2903003703002002200036021c2002200036021820022005360204200220043602002002200129030037030820022003105b000bbd0102067f017e230041206b22002400104a1a1055410210544100418480084102104e21034101104b210220004102360214200041146a104d210120002802141052104a102a21041020200041086a20021067200028020c21022000280208210520002001100436021c200041003602182000200136021403402000200041146a102f2000280200410171044020002802042101102e1a20022001102c10300c010b0b420188200320042005200210381011102d108b01200041206a24000bee0102077f017e230041306b22002400104a1a1055410210544100418480084102104e21014101104b210320004102360218200041186a2204104d21052000280218105220002001360210104a21011020210710762102102b220620012002101420002006360214200041086a2003102c10672000280208210120002005102d360224200020013602202000200742038022073703182000200041146a220136022c2000200041106a22023602282004106e108b012000200310672000200536022420002007370318200020002802003602202000200136022c200020023602282004106e108b01200041306a24000b810102057f017e230041106b22002400104a1a1055410210544100418480084102104e21014101104b21022000410236020c2000410c6a104d2103200028020c1052104a210410202000200210674201882001200420002802002003102b220110211a10112001102d210141cb8508411e10820120011080011019200041106a24000b6b02047f017e230041106b22002400101c1055410210544100418480084102104e21014101104b21022000410236020c2000410c6a104d2103200028020c10521020200020021067420188200120002802002003102b220110221a10112001102d108b01200041106a24000b7a02057f017e230041106b22022400101c1055410210544100104b21004101104f2002410236020c2002410c6a104d2103200228020c1052102e1a10202105103e210441ffff0371103720052004200041672003102b2200102b220110231a10112000102c2001102d2101101a1a2001108c01200241106a24000b7302057f017e230041106b22002400101c105541021054410041f480084117104e21014101104f2000410236020c2000410c6a104d2103200028020c1052102e1a10202105103e210441ffff0371103720052004200141672003102b2201102b10241a10112001102c101a1a200041106a24000b6902067f017e230041106b22002400101c105541031054410041e480084110104e4101104b21024102104f2000410336020c2000410c6a104d2104200028020c1052102e1a10202106103e210541ffff037110372006200520024167200441671025200041106a24000b6f02067f017e230041106b22002400101c1055410310544100418b8108410a104e410141f480084117104e21024102104f2000410336020c2000410c6a104d2104200028020c1052102e1a10202106103e210541ffff037110372006200520024167200441671026200041106a24000b900302077f017e230041406a22002400102e1a102e1a10554100105420004100360228200041286a104d2105200028022810520240410810410d001046107441ff017141014704401040210141594101410010051a4159200110031a0c010b415841b78108410b10051a415941c28108411010051a0b200041591004360224200042d9ffffff0f37021c0340200041286a2000411c6a106020002802284101474504402000290330200028023c20002802382000108a012000280200210120002802042106102c2102102a210320012006107f41016a2204107d21012002102e220210860120021087012003200210342001200210181a20062004107b0c010b0b41838508410c1082012000102e3602282005200041286a10810120002802281019200041106a108901200028021020002802142203107f41016a2204107d102e21022000200510043602302000410036022c200020053602280340200041086a200041286a102f20002802084101710440200028020c200210360c010b0b200210181a20032004107b200041406b24000b0b8f060200418080080bfb0561726773746f746f6b656e5f7061796d656e74737061796d656e745f6172677372657472696576655f66756e64735f6d756c74696275726e5f616e645f6372656174655f72657472696576655f6173796e63696e646578636f64655f6d657461646174616368696c645f73635f61646472657373736f757263655f636f6e74726163745f6164647265737373635f61646472657373696e636f7272656374206e756d626572206f662045534454207472616e736665727345474c442d303030303030ffffffd80000000000000000ffffffdd756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74737472616e736665722065786563757465207265717569726573207061796d656e744d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e73666572696e70757420746f6f206c6f6e67696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e676545474c442e6974656d73746f72616765206465636f6465206572726f7220286b65793a20455344542065787065637465642e6c656e626164206172726179206c656e677468766172206172677363616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e7473657865637574655f6f6e5f646573745f636f6e746578745f726573756c74657865637574655f6f6e5f73616d655f636f6e746578745f726573756c74696e646578206f7574206f662072616e67650041fc85080b0438ffffff", + "code": "0061736d010000000197011760000060027f7f0060017f017f60017f006000017f60027f7f017f60047f7f7f7f0060037f7f7f0060027f7e0060037f7f7f017f60047f7f7f7f017f60067e7f7f7f7f7f017f60017f017e60057f7f7e7f7f017f60057e7f7f7f7f017f60077e7f7f7f7f7f7f017f60077f7e7f7f7f7f7f0060017e006000017e60057f7f7e7f7f0060047f7f7f7e0060057f7f7f7f7f0060027e7f000294092d03656e760e626967496e74536574496e743634000803656e7609626967496e74416464000703656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000503656e76106d4275666665724765744c656e677468000203656e760f6d4275666665725365744279746573000903656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000b03656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000303656e760b7369676e616c4572726f72000103656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000303656e7612626967496e7447657443616c6c56616c7565000303656e76126d427566666572476574417267756d656e74000503656e76126d427566666572417070656e644279746573000903656e76126d616e616765645369676e616c4572726f72000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e760f6765744e756d417267756d656e7473000403656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000d03656e760a626967496e745369676e000203656e761b6d616e616765645472616e7366657256616c756545786563757465000d03656e760f636c65616e52657475726e44617461000003656e76146d427566666572436f707942797465536c696365000a03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e760a626967496e7454446976000703656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e76176d427566666572546f426967496e74556e7369676e6564000503656e76126d42756666657253746f726167654c6f6164000503656e76136d42756666657253746f7261676553746f7265000503656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000803656e760f6d616e6167656457726974654c6f67000103656e760d6d42756666657246696e697368000203656e76106d616e61676564534341646472657373000303656e760e636865636b4e6f5061796d656e74000003656e760666696e697368000103656e7616736d616c6c496e7446696e697368556e7369676e6564001103656e7614626967496e7446696e697368556e7369676e6564000303656e760a6765744761734c656674001203656e761b6d616e61676564457865637574654f6e53616d65436f6e74657874000b03656e76166d616e6167656445786563757465526561644f6e6c79000e03656e76156d616e61676564437265617465436f6e7472616374000f03656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374000f03656e76166d616e6167656455706772616465436f6e7472616374001003656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000503656e76106d616e616765644173796e6343616c6c0006037a7902040202040101010705010201030e040204040102030201030401040202060202060904030303000704060401130107080101140115060601080203020304050607010a010102040202020301050502020105010201011601030303030300000000000000000000000000000000000000000000000000000005030100030616037f01418080080b7f0041f585080b7f00418086080b0793061e066d656d6f7279020004696e6974008b010d63616c6c6261636b5f61726773008c011163616c6c6261636b5f7061796d656e7473008d011963616c6c6261636b5f7061796d656e74735f747269706c6573008e0113636c6561725f63616c6c6261636b5f696e666f008f011663616c6c6261636b5f617267735f61745f696e6465780090011963616c6c6261636b5f7061796d656e745f61745f696e6465780091010f666f72776172645f7061796d656e7400920123666f72776172645f6469726563745f657364745f7669615f7472616e73665f6578656300930119666f72776172645f6469726563745f657364745f6d756c746900940112666f72776172645f6173796e635f63616c6c0095011f666f72776172645f6173796e635f63616c6c5f68616c665f7061796d656e7400960118666f72776172645f7472616e73665f657865635f65676c6400970118666f72776172645f7472616e73665f657865635f6573647400980113666f72776172645f7472616e73665f6578656300990119666f72776172645f7472616e73665f657865635f7477696365009a012b666f72776172645f6173796e635f72657472696576655f6d756c74695f7472616e736665725f66756e6473009b0136666f727761726465725f6173796e635f73656e645f616e645f72657472696576655f6d756c74695f7472616e736665725f66756e6473009c011c63616c6c5f657865637574655f6f6e5f646573745f636f6e74657874009d012263616c6c5f657865637574655f6f6e5f646573745f636f6e746578745f7477696365009e011c63616c6c5f657865637574655f6f6e5f73616d655f636f6e74657874009f012563616c6c5f657865637574655f6f6e5f646573745f636f6e746578745f726561646f6e6c7900a0010f6465706c6f795f636f6e747261637400a101126465706c6f795f66726f6d5f736f7572636500a2010c63616c6c5f7570677261646500a3011863616c6c5f757067726164655f66726f6d5f736f7572636500a4010863616c6c4261636b00a5010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab761791601017f102e220142001000200120012000100120010b1901017f41ec850841ec850828020041016b220036020020000b0f01017f10022201200010031a20010b5801027f230041206b220124001031210220012000100436021c20014100360218200120003602140340200141086a200141146a1032200128020841017104402002200128020c102f10330c010b0b200141206a240020020b08004101410010360b6301027f230041106b220224002002410b6a200110800120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100c1a200241106a24000b3b02017f017e20002001280204220220012802084d047e2001200241016a360204200041086a20012802002802002002103542010542000b3703000bed0102027f017e230041206b22032400200320012002107a2201107722021004360214200341003602102003200236020c2003410c6a22042001106c10752102200342003703182004200341186a41082001106d200329031821052003410c6a2001106c1076210420032802142003280210470440200141e58408410e106e000b2000200436020c200020023602082000200542388620054280fe0383422886842005428080fc0783421886200542808080f80f834208868484200542088842808080f80f832005421888428080fc07838420054228884280fe03832005423888848484370300200341206a24000b1101017f102e22022000200110051a20020b0a0020001038200110390b0f01017f102e2201200010171a20010b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100c1a2001200010031a200241106a24000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210051a200141106a24000b150020002001200220032004102e220110061a20010b10004108103d450440415910070b41590b2b01027f200041f485082d0000220171200041ff017146220245044041f4850820002001723a00000b20020b8f0101037f230041206b22002400103f210102404104103d0d00415841ad8208410b10051a200020011004360208200041003602042000200136020003402000410f6a2000104020002d000f4101470d012000280010220241187420024180fe03714108747220024108764180fe0371200241187672721041450d000b41b7810841181008000b200041206a240020010b10004102103d450440415a10090b415a0b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010701a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102b41004a0b4d01027f230041106b220124000240103e2202104341014604402001200210442001290300500d0141cf8108411c1008000b4195810841221008000b20002001290308370300200141106a24000b0900200010044104760bfc0102017e027f230041106b22032400200341086a4200370300200342003703002001100441104f04402001410020034110104e20032902042102200328020021012000200328020c220441187420044180fe03714108747220044108764180fe03712004411876727236020c2000200141187420014180fe03714108747220014108764180fe0371200141187672723602082000200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe03832002423888848484370300200341106a24000f0b41fb8308411d1008000b8b0102037f017e230041106b2201240002400240024002400240103f220210430e020102000b4195810841221008000b104621024101103d450440415d100a0b415d102d21030c010b2001200210472001280208102f21022001290300200128020c102d21034200520d010b2000200336020420002002360200200141106a24000f0b41cf8108411c1008000b0a0041ad8208410b10360b6b01017f230041306b22022400200241286a4200370300200242003703202001100441104f044020014100200241206a22014110104e200241106a20011072200041086a200241186a29030037030020002002290310370300200241306a24000f0b41fb8308411d1008000b5d01027f230041106b22002400027f024002400240103c220110430e020102000b41908208411d1008000b415d42001000415d0c010b2000200110472000280208104945044041eb810841251008000b200028020c0b200041106a24000b1100415841ad8208410b10051a200010410b0d002000102e2200100b1a20000b2e01017f41b8820841171036220420002001100c1a200441cf82084103100c1a200420022003100c1a2004100d000b3b01037f1031210220002802002101034041f0850828020020014a04402000200141016a220336020020022001104a1033200321010c010b0b20020b7d01027f230041106b220124002000104a220210042100200141003b010e0240200041014b0440200241002001410e6a4102104e20004102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41d78008410d41d98308410f104b000b41d78008410d41e58408410e104b000b1a00200020012002200310704504400f0b41e8830841131008000b1f002000104a2200100441204704402001200241cd84084110104b000b20000b2601017e4100100e22004280808080105a044041d28008410541e58408410e104b000b2000a70b190041f0850828020020004c04400f0b41e3820841121008000b1400100f20004604400f0b41f5820841191008000b1900200041f085082802004c04400f0b41d2820841111008000b0b0041f08508100f3602000b0d0020001056200120021057000b0a0041764200100041760b0d002000200120022003102c000b0c01017f102e2200101e20000bfa0201057f230041106b22032400200028020421052000280200210620002903085004402000280210210220002802142104230041206b22002400200041186a41b18308410c105c200041106a2000280218200028021c20021063200041086a200028021020002802142004106420002000280208200028020c200620051062200028020421022003200028020036020020032002360204200041206a2400200328020421002003280200210220011056200220001057000b230041306b22022400200241286a41a28308410f105c200241206a2002280228200228022c200041086a22002802081063200241186a2002280220200228022420002903001060200241106a2002280218200228021c200028020c1064200228021021042002280214210010311a20002001102f1033200241086a20042000200620051062200228020c2100200341086a2201200228020836020020012000360204200241306a2400200328020c21002003280208210110581056200120001057000b6102037f017e230041106b2205240020002903002108200028020c2802002107200028020828020010312100102f210620052007102d36020c200520083703002005200636020820002005105b2001200020022003200410101a200541106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100c1a200341106a24000b1800200120021036210120001031360204200020013602000bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10051a200341106a24000b5501017f230041306b220224002002411f6a20011040200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a107242010542000b370300200241306a24000b0d0010311a20002001102f10330b160020022003106620002002360204200020013602000b0d0010311a20002001103810330b6e01017f230041206b220524000240200310670d0020022003105f20052004100436021c20054100360218200520043602140340200541086a200541146a10322005280208410171450d012002200528020c105f0c000b000b2000200236020420002001360200200541206a24000b1e0010311a20022003280200102f103320002002360204200020013602000b1e0010311a200220032802001038103320002002360204200020013602000b100020001031360204200020013602000b1201017f103122022001105d2000200210330b070020001004450bc908020f7f027e230041e0006b220824000240024020002802181067450440200029031021100c010b200028020c1011450d010b230041106b2107024020082008410020086b41037122036a22054f0d00200821012000210420030440200321020340200120042d00003a0000200441016a2104200141016a2101200241016b22020d000b0b200341016b4107490d000340200120042d00003a0000200141016a200441016a2d00003a0000200141026a200441026a2d00003a0000200141036a200441036a2d00003a0000200141046a200441046a2d00003a0000200141056a200441056a2d00003a0000200141066a200441066a2d00003a0000200141076a200441076a2d00003a0000200441086a2104200141086a22012005470d000b0b2005412820036b220e417c71220f6a21010240200020036a22024103712209450440200120054d0d0120022103034020052003280200360200200341046a2103200541046a22052001490d000b0c010b2007410036020c2007410c6a2009722103410420096b22044101710440200320022d00003a0000410121060b20044102710440200320066a200220066a2f01003b01000b200220096b21062009410374210b200728020c210c02402001200541046a4d0440200521040c010b4100200b6b411871210a03402005200c200b76200641046a2206280200220c200a7472360200200541086a2103200541046a22042105200120034b0d000b0b41002105200741003a0008200741003a0006027f200941014604404100210341002109200741086a0c010b200641056a2d00002007200641046a2d000022033a000841087421094102210d200741066a0b210a20042002410171047f200a200641046a200d6a2d00003a000020072d0006411074210520072d00080520030b41ff01712005200972724100200b6b41187174200c200b76723602000b2002200f6a210302402001200e410371220220016a22054f0d002002220404400340200120032d00003a0000200341016a2103200141016a2101200441016b22040d000b0b200241016b4107490d000340200120032d00003a0000200141016a200341016a2d00003a0000200141026a200341026a2d00003a0000200141036a200341036a2d00003a0000200141046a200341046a2d00003a0000200141056a200341056a2d00003a0000200141066a200341066a2d00003a0000200141076a200341076a2d00003a0000200341086a2103200141086a22012005470d000b0b2008220241306a200041086a290300221137030020022000290300370328200228021c21082002280218210402402011a7220010494504402002200036023c2002200241346a36025c2002200229032837035020022008360248200220043602442002200241206a36024020022002413c6a360258200241d0006a2002280220201020042008105a0c010b2002280220200228023420102004200810121a0b200241e0006a24000f0b41bd8308410e1008000b27002000290300200028021028020020002802142802002000280208200028020c103b101310300b880501077f230041106b22012400200141086a200041086a290300370300200120002903003703002000411c6a2105200028021821032000280210210420002802142100230041106b2202240020022000360208200220043602042002200336020c230041206b2200240020012802082103200041086a2204200241046a220241086a280200360200200020022902003703002000200128020c36020c2000200136021c2000200536021820002005360214230041206b2202240020031049450440200241106a20042902003703002002200336021820022000290200370308230041206b22012400200041146a2200280204210520002802002104200241086a220228020c2106200141086a200241086a2802003602002001200636021c200120033602182001200229020037030020012000280208290300370310200128020821032001280200210620012802042107230041106b220224002002200141106a220041086a36020820022000410c6a36020c20022000290300370300230041206b22002400200041106a200241086a2903003703002000200436021c20002005360218200020073602042000200636020020002002290300370308200020031059000b230041106b22012400200028020c2102200141086a200041086a2802003602002001200236020c20012000290200370300200128020821032001280200210420012802042101230041206b220024002000200336020c200020023602082000200136021c20002004360218200020053602142000200041086a360210230041106b22012400200041106a2202280200210320012000410c6a36020420012002290208370208200141046a22002802002802002003280200200028020420002802081057000b0e01017f102e22004200100020000b9a0101057f230041106b220324002003410036020c20002003410c6a41042001106d200328020c2102024002402000280204220520002802002206100422044b0d0020042005200241187420024180fe03714108747220024108764180fe03712002411876727222026a2204490d00200620052002100222021014450d010b200141d98308410f106e000b20002004360204200341106a240020020b3901017f2000280208200028020422046b2002490440200341d98308410f106e000b2000280200200420012002104e2000200220046a3602040b2c01017f41a18408411b10362203200010031a200341cf82084103100c1a200320012002100c1a2003100d000b940102027f017e230041106b220224000240024020002001280204200128020849047e2001108101102f1075220310490d012002200110810110712002280200450d0220022903082104200020011081011076360214200020033602102000200437030842010542000b370300200241106a24000f0b41dd8408410841bc8408410d104b000b41dd8408410841cb8308410e104b000b0f002000200120032002102a4100470b2101017e20002001100441084d047e20002001101537030842010542000b3703000bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b0c00200020001074101620000b0a0041754202100041750b4901017f230041106b220124000240200010044104470d002001410036020c200041002001410c6a410410701a200128020c41c58eb1a204470d00104621000b200141106a240020000b0d002000102e220010181a20000b0d002000102e220010191a20000b1200416c4101410010051a2000416c101a1a0b100041672001ad101b20004167101a1a0b5701017f230041106b220224002000102f2200419c84084105100c1a2002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100c1a200241106a240020000b6c01047f230041106b2202240020002001107a22051077210310312104200220031004220136020c410021002002410036020820022003360204034020002001464504402004200241046a2005106c103320022802082100200228020c21010c010b0b200241106a240020040b5302017f017e230041106b220124002001200010771071024020012802000440200129030822024280808080105a0d01200141106a24002002a70f0b200041cb8308410e106e000b200041e58408410e106e000b2901017f230041106b220124002001103136020c20002001410c6a107e200128020c200141106a24000b990101037f230041206b220224002001280200102f210320022000100436021820024100360214200220003602100340200241086a200241106a1032200228020841017104402002200228020c22041004220041187420004180fe03714108747220004108764180fe03712000411876727236021c20032002411c6a4104100c1a2003200410031a0c010b0b20012003360200200241206a24000b1201017f10312202200020011036103320020b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410701a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b6101017f230041106b220124002001410b6a200010800120012d000b4101460440200128000c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b41dd8408410841d282084111104b000b22002000104945044020012000102f3602000f0b200128020041988408410410051a0b4801017f230041106b220224000240200010494504402000200110390c010b2002418080802036020c20012002410c6a4104100c1a2001419884084104100c1a0b200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a4108100c1a200241106a24000b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b3501027f230041106b22012400200141086a10311065200128020c21022000200128020836020020002002360204200141106a24000b2901027f41ff8408410d10362201102f220241c984084104100c1a20002002360204200020013602000b2901027f418c8508411110362201102f220241c984084104100c1a20002002360204200020013602000b1000419d8508411e107f2000107d101c0b5901027f230041206b220124001031210220012000100436021c20014100360218200120003602140340200141086a200141146a103220012802084101710440200128020c200210390c010b0b2002101d1a200141206a24000b0800101f410010520b5401047f230041106b22002400101f41001052200041086a10870120002802082102200028020c107c2103410121010340200120034b45044020022001107b108a01200141016a21010c010b0b200041106a24000b930101037f230041406a22002400101f41001052200041086a1088012000200028020c22013602182000200028020836021420002001107c360224200041013602202000200041146a36021c0340200041286a2000411c6a10342000280228410147450440200028023c20002802381031220110830120002903302001108401200110372001101d1a0c010b0b200041406b24000be40101047f230041d0006b22002400101f4100105210312101200041106a1088012000200028021422023602202000200028021036021c20002002107c36022c2000410136022820002000411c6a3602240340200041306a200041246a103420002802304101474504402000280244210220002802402000103136024c200041cc006a1082012001200028024c10332001200029033810662001200210610c010b0b20002001100436023820004100360234200020013602300340200041086a200041306a103220002802084101710440200028020c101d1a0c010b0b200041d0006a24000bd10101047f230041306b22002400101f41001052200041186a10870120002802182101200028021c2202107c2103200041003a002c20002003360228200041013602240340200041106a200041246a1085012000280210410171044020012000280214107a10780c010b0b200241001079200041086a10880120002802082101200028020c2202107c2103200041003a002c200020033602282000410136022403402000200041246a1085012000280200410171044020012000280204107a10780c010b0b200241001079200041306a24000b890101037f230041206b22002400101f4101105210502101200041086a10870102402001450d0020002802082102200028020c107c2001490d00200020022001107b2201100436021c200041003602182000200136021403402000200041146a1032200028020041017104402000280204101d1a0c010b0b200041206a24000f0b41d9850841121008000b830101037f230041206b22002400101f4101105210502101200041086a10880102402001450d0020002802082102200028020c107c2001490d00200041106a20022001103502402000280218220110494504402001101d1a0c010b41988408410410200b20002903101021200028021c1022200041206a24000f0b41d9850841121008000baa0101067f230041306b22002400410110524100418480084102104f2103200041086a1045200028020821042000200028020c22053602102000108601200028020421012000280200210202402004104945044020002004360214200042003703202000200136021c200020023602182000200041106a36022c2000200041146a360228200041206a2003420020022001105a0c010b2003200542002002200110121a0b200041306a24000bc30101027f230041e0006b220024004101105220004100418480084102104f36021c200041106a1042200028021421012000200028021036022020002001360224200042003703282000200041246a36023420002000411c6a360238200041306a2201200041206a36020020004200370340200041d0006a200129030037030020002000413c6a360258200042003703482000200041406b36025c200041086a108601200041c8006a200028021c42002000280208200028020c105a200041e0006a24000b3b01037f230041106b22002400410110524100418480084102104f103e200041086a10860142002000280208200028020c10101a200041106a24000b7f02057f017e230041306b220024001054410210534100418480084102104f21014101104a210220004102360210200041106a2203104c210420002802101051200041086a10452000290308210520002002106520002001360228200020043602242000200537031820004200370310200020002802003602202003106a000b8d0101077f230041306b220024001054410210534100418480084102104f21014101104a210220004102360210200041106a2203104c210420002802101051200041086a104520002802082105200028020c1073210620002002106520002001360228200020043602242000200636021c2000200536021820004200370310200020002802003602202003106a000b9d0102077f017e230041306b2200240010481a1054410210534100418480084102104f21034101104a210120004102360208200041086a2204104c210520002802081051104810462106102d210220002001106520002802002101102321072000200536022420002001360220200020023602142000200636021020004200370308200020033602282000200742018837031820041068200041306a24000bac0102077f017e230041406a220024001054410210534100418480084102104f21034101104a210120004102360218200041186a2204104c210520002802181051200041106a104220002802142000280210102f2106102d2102200041086a2001106520002802082101102321072000200536023420002001360230200020023602242000200636022020004200370318200020033602382000200742018837032820041068200041406b24000b9a0102057f027e230041406a220024001054410210534100418480084102104f21024101104a210120004102360218200041186a2203104c210420002802181051200041106a104520002903102105200041086a20011065200028020821011023210620002004360234200020013602302000200537032020004200370318200020023602382000200642018837032820031068200041406b24000b9102020c7f017e230041406a220024001054410210534100418480084102104f21034101104a210120004102360218200041186a2204104c210520002802181051200041106a1045200028021021062000280214107321072003102f21082006102f21092007102d210a2001102f210220051030210b200041086a20021065200028020821021023210c2000200b360234200020023602302000200a3602242000200936022020004200370318200020083602382000200c42018837032820041068200020011065200028020021011023210c2000200536023420002001360230200020073602242000200636022020004200370318200020033602382000200c42018837032820041068200041406b24000bfe0102047f017e230041406a22002400101f1054410110534100418480084102104f210120004101360220200041206a104c210220002802201051200020013602101031210120002002100436021c20004100360218200020023602140340200041206a200041146a106f20002802204101460440200028023421022000290328210420002802302000103136023c2000413c6a1082012001200028023c1033103122032004105d20012003103310311a20012002103810330c010b0b200041086a41a080084114105c20002001360228200020002802083602242000200041106a360220200041206a2200280200280200200028020420002802081055000b8306020a7f017e230041206b22012400101f1054410110534100418480084102104f21002001410136020c2001410c6a2202104c2104200128020c105120012000360208230041106b22002400200041086a41b48008411e105c200028020c21032001200028020836020020012003360204200041106a24002001290300210a230041406a2200240010312103200020041004360214200041003602102000200436020c0340200041186a2000410c6a106f2000280218410146044020002000290328370338200020002903203703302003200041306a105b0c010b0b200041406b24002001200a3702142001200336021c20012001411c6a3602102001200141086a36020c20022802042106200241106a21012002280200280200210420022802082103200228020c2105230041306b220024000240024002402006280200220210430e020102000b2000200536022820002003360224200020013602202000200136021c20002006360218230041106b22022400200241086a2106200041186a220128020c21072001280210210820012802002802002103230041406a22012400200141106a418e83084114105c200128021021052001280214210010311a20002004102f1033200310432104103122092004ad105d200020091033200120031004360224200141003602202001200336021c0340200141286a2001411c6a105e20012802284101460440200128023c210420002001280238105f200120052000200129033010602001280200210520012802042200200410610c010b0b200141086a20052000200720081062200128020c21002006200128020836020020062000360204200141406b2400200228020c21012002280208210010581056200020011057000b2004200320051055000b200041186a200210442000200041206a3602102000200041246a36021420002000290318370308230041206b22022400200241106a200041086a220041086a2903003703002002200136021c20022001360218200220053602042002200336020020022000290300370308200220041059000bbd0102067f017e230041206b2200240010481a1054410210534100418480084102104f21034101104a210220004102360214200041146a104c2101200028021410511048102d21041023200041086a20021065200028020c21022000280208210520002001100436021c200041003602182000200136021403402000200041146a1032200028020041017104402000280204210110311a20022001102f10330c010b0b4201882003200420052002103b10131030108901200041206a24000bee0102077f017e230041306b2200240010481a1054410210534100418480084102104f21014101104a210320004102360218200041186a2204104c21052000280218105120002001360210104821011023210710742102102e220620012002101620002006360214200041086a2003102f106520002802082101200020051030360224200020013602202000200742038022073703182000200041146a220136022c2000200041106a2202360228200410691089012000200310652000200536022420002007370318200020002802003602202000200136022c2000200236022820041069108901200041306a24000b7f02057f017e230041106b2200240010481a1054410210534100418480084102104f21014101104a21022000410236020c2000410c6a104c2103200028020c10511048210410232000200210654201882001200420002802002003102e220110241a101320011030210141bb8508411e107f2001107d101c200041106a24000b6b02047f017e230041106b22002400101f1054410210534100418480084102104f21014101104a21022000410236020c2000410c6a104c2103200028020c10511023200020021065420188200120002802002003102e220110251a101320011030108901200041106a24000b7a02057f017e230041106b22022400101f1054410210534100104a21004101104d2002410236020c2002410c6a104c2103200228020c105110311a10232105106b210441ffff0371103a20052004200041672003102e2200102e220110261a10132000102f200110302101101d1a2001108a01200241106a24000b7302057f017e230041106b22002400101f105441021053410041f480084117104f21014101104d2000410236020c2000410c6a104c2103200028020c105110311a10232105106b210441ffff0371103a20052004200141672003102e2201102e10271a10132001102f101d1a200041106a24000b6902067f017e230041106b22002400101f105441031053410041e480084110104f4101104a21024102104d2000410336020c2000410c6a104c2104200028020c105110311a10232106106b210541ffff0371103a2006200520024167200441671028200041106a24000b6f02067f017e230041106b22002400101f1054410310534100418b8108410a104f410141f480084117104f21024102104d2000410336020c2000410c6a104c2104200028020c105110311a10232106106b210541ffff0371103a2006200520024167200441671029200041106a24000bd00202077f017e230041406a2200240010311a10311a10544100105320004100360228200041286a104c2105200028022810512000103c22011004360224200041003602202000200136021c0340200041286a2000411c6a105e20002802284101474504402000290330200028023c200028023820001088012000280200210120002802042106102f2102102d210320012006107c41016a2204107a2101200210312202108301200210840120032002103720012002101a1a2006200410790c010b0b41f38408410c107f200010313602282005200041286a107e2000280228101c200041106a108701200028021020002802142203107c41016a2204107a103121022000200510043602302000410036022c200020053602280340200041086a200041286a103220002802084101710440200028020c200210390c010b0b2002101a1a200320041079200041406b24000b0bff050200418080080beb0561726773746f746f6b656e5f7061796d656e74737061796d656e745f6172677372657472696576655f66756e64735f6d756c74696275726e5f616e645f6372656174655f72657472696576655f6173796e63696e646578636f64655f6d657461646174616368696c645f73635f61646472657373736f757263655f636f6e74726163745f6164647265737373635f61646472657373696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e74734d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442e6974656d73746f72616765206465636f6465206572726f7220286b65793a20455344542065787065637465642e6c656e626164206172726179206c656e6774687661722061726773696e70757420746f6f206c6f6e6763616c6c6261636b5f72617763616c6c6261636b5f6172677363616c6c6261636b5f7061796d656e7473657865637574655f6f6e5f646573745f636f6e746578745f726573756c74657865637574655f6f6e5f73616d655f636f6e746578745f726573756c74696e646578206f7574206f662072616e67650041ec85080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -563,6 +563,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -571,12 +572,14 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCreateContract", "managedDeployFromSourceContract", "managedExecuteOnDestContext", "managedExecuteOnSameContext", "managedExecuteReadOnly", + "managedGetAllTransfersCallValue", "managedGetMultiESDTCallValue", "managedMultiTransferESDTNFTExecute", "managedSCAddress", @@ -591,12 +594,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder-raw.wasm", - "size": 15210, + "size": 15527, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/composability/forwarder/output/forwarder.mxsc.json b/test/features/composability/forwarder/output/forwarder.mxsc.json index e82865138..baffd02a3 100644 --- a/test/features/composability/forwarder/output/forwarder.mxsc.json +++ b/test/features/composability/forwarder/output/forwarder.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "forwarder", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -926,6 +926,113 @@ } ] }, + { + "name": "sync_call_fallible", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "endpoint_name", + "type": "bytes" + }, + { + "name": "args", + "type": "variadic", + "multi_arg": true + } + ], + "outputs": [] + }, + { + "name": "forward_sync_fallible_accept_funds_multi_transfer", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "payment_args", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "forward_sync_reject_funds_multi_transfer", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "payment_args", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "name": "transfer_fallible", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "payments", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, + { + "docs": [ + "Receiver needs to be an endpoint with no arguments, for simplicity." + ], + "name": "transfer_execute_fallible", + "mutability": "mutable", + "inputs": [ + { + "name": "to", + "type": "Address" + }, + { + "name": "endpoint_name", + "type": "bytes" + }, + { + "name": "payments", + "type": "variadic>", + "multi_arg": true + } + ], + "outputs": [ + { + "type": "bool" + } + ] + }, { "name": "sft_issue", "mutability": "mutable", @@ -1893,6 +2000,24 @@ } ] }, + { + "identifier": "sync_call_fallible_success", + "inputs": [ + { + "name": "result", + "type": "List" + } + ] + }, + { + "identifier": "sync_call_fallible_error", + "inputs": [ + { + "name": "error_code", + "type": "u32" + } + ] + }, { "identifier": "create", "inputs": [ @@ -2178,7 +2303,7 @@ } } }, - "code": "0061736d010000000192022560000060027f7f0060017f017f60017f0060037f7f7f017f60037f7f7f006000017f60027f7f017f60047f7f7f7f0060057f7f7f7f7f0060037f7e7f0060057f7f7e7f7f0060027f7e0060047f7f7f7f017f60037f7f7f017e60067f7f7f7f7f7f0060057f7f7e7f7f017f60057f7f7f7e7f0060017f017e6000017e60077e7f7f7f7f7f7f017f60017e0060077f7e7f7f7f7f7f0060037f7f7e017f60047f7f7f7e0060077f7f7f7f7f7f7f017e60067e7f7f7f7f7f017f60017e017f600b7f7f7e7f7f7f7f7f7f7f7f00600b7f7f7f7f7f7f7f7f7e7e7f017f60027f7f017e60067f7f7e7f7f7f0060057e7f7f7f7f017f60077f7f7f7f7f7f7f0060027e7f0060047f7e7f7f0060067f7e7f7f7f7f0002ae0c3e03656e760e626967496e74536574496e743634000c03656e7609626967496e74416464000503656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000603656e760d6d427566666572417070656e64000703656e76106d4275666665724765744c656e677468000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e760f6d4275666665725365744279746573000403656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465001003656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001a03656e761b6d616e616765645472616e7366657256616c756545786563757465001003656e760d6d616e6167656443616c6c6572000303656e76106d616e61676564534341646472657373000303656e761c626967496e744765744553445445787465726e616c42616c616e6365001103656e76176d616e616765644765744261636b5472616e7366657273000103656e7609626967496e744e6577001b03656e76176d616e6167656447657445534454546f6b656e44617461001c03656e7612626967496e7447657443616c6c56616c7565000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000303656e76126d427566666572476574417267756d656e74000703656e76126d427566666572417070656e644279746573000403656e76126d616e616765645369676e616c4572726f72000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74001203656e7611676574417267756d656e744c656e677468000203656e760f6765744e756d417267756d656e7473000603656e76196d616e6167656447657443616c6c6261636b436c6f73757265000303656e760d6d42756666657246696e697368000203656e7609626967496e74537562000503656e76186d616e616765644765744f726967696e616c547848617368000303656e760f636c65616e52657475726e44617461000003656e760a6765744761734c656674001303656e76166d616e616765644372656174654173796e6343616c6c001d03656e76146d427566666572436f707942797465536c696365000d03656e7609626967496e74436d70000703656e7609626967496e744d756c000503656e760a626967496e7454446976000503656e76196d42756666657246726f6d426967496e74556e7369676e6564000703656e76176d427566666572546f426967496e74556e7369676e6564000703656e76126d42756666657253746f726167654c6f6164000703656e76136d42756666657253746f7261676553746f7265000703656e760666696e697368000103656e760f6d616e6167656457726974654c6f67000103656e76156d616e61676564437265617465436f6e7472616374001403656e760e636865636b4e6f5061796d656e74000003656e7614626967496e7446696e697368556e7369676e6564000303656e7616736d616c6c496e7446696e697368556e7369676e6564001503656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001403656e76166d616e6167656455706772616465436f6e7472616374001603656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001603656e761667657443757272656e74455344544e46544e6f6e6365000e03656e7611676574455344544c6f63616c526f6c6573001203656e7614736d616c6c496e7446696e6973685369676e6564001503656e76136d616e6167656449734553445446726f7a656e001703656e76136d616e61676564497345534454506175736564000203656e761c6d616e616765644973455344544c696d697465645472616e73666572000203656e761776616c6964617465546f6b656e4964656e746966696572000203656e7618626967496e7447657445787465726e616c42616c616e6365000103656e760f6d4275666665724765744279746573000703656e760a626967496e745369676e000203656e76136d42756666657247657442797465536c696365000d03656e76096d4275666665724571000703656e76106d616e616765644173796e6343616c6c000803ea02e8020206010202060101070201010201010a05081808010a1908080208051e031f01200b02070102060606170303060206180d00030306010603010602060107030103060208040404040404040404010202010401040204040404060404020103030300030401030305020506080f0109090b0f0f090b0b080508050521080201090502010206040101010101080809010301010101080c010103020313030301010e01030202020303030301030103030903030601010408080707050202020202070107070202020202010503010a05020701220105080102010107020602040e010305090c05020202030a060603030201080701012311050805010719000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002405030101010105030100030616037f01418080080b7f0041c195080b7f0041d095080b07da1567066d656d6f7279020004696e697400bb020973656e645f65676c6400bc02136563686f5f617267756d656e74735f73796e6300bd02196563686f5f617267756d656e74735f73796e635f747769636500be0219666f72776172645f73796e635f6163636570745f66756e647300bf0221666f72776172645f73796e635f6163636570745f66756e64735f72685f65676c6400c00228666f72776172645f73796e635f6163636570745f66756e64735f72685f73696e676c655f6573647400c10227666f72776172645f73796e635f6163636570745f66756e64735f72685f6d756c74695f6573647400c20223666f72776172645f73796e635f6163636570745f66756e64735f776974685f6665657300c30223666f72776172645f73796e635f6163636570745f66756e64735f7468656e5f7265616400c4021b666f72776172645f73796e635f72657472696576655f66756e647300c5022c666f72776172645f73796e635f72657472696576655f66756e64735f776974685f6163636570745f66756e6300c602116163636570745f66756e64735f66756e6300c70228666f72776172645f73796e635f6163636570745f66756e64735f6d756c74695f7472616e7366657200c8020f6563686f5f617267735f6173796e6300c9021a666f72776172645f6173796e635f6163636570745f66756e647300ca0227666f72776172645f6173796e635f6163636570745f66756e64735f68616c665f7061796d656e7400cb0224666f72776172645f6173796e635f6163636570745f66756e64735f776974685f6665657300cc021c666f72776172645f6173796e635f72657472696576655f66756e647300cd021a666f72776172645f6173796e635f72656a6563745f66756e647300ce021073656e645f66756e64735f747769636500cf022073656e645f6173796e635f6163636570745f6d756c74695f7472616e7366657200d0022073656e645f6173796e635f72656a6563745f6d756c74695f7472616e7366657200d10220666f72776172645f7472616e73665f657865635f6163636570745f66756e647300d2022b666f72776172645f7472616e73665f65786563755f6163636570745f66756e64735f776974685f6665657300d30226666f72776172645f7472616e73665f657865635f6163636570745f66756e64735f747769636500d4022e666f72776172645f7472616e73665f657865635f6163636570745f66756e64735f72657475726e5f76616c75657300d5021e7472616e73665f657865635f6d756c74695f6163636570745f66756e647300d6021e7472616e73665f657865635f6d756c74695f72656a6563745f66756e647300d702126368616e67654f776e65724164647265737300d8020f6465706c6f795f636f6e747261637400d902146465706c6f795f74776f5f636f6e74726163747300da02186465706c6f795f7661756c745f66726f6d5f736f7572636500db020c757067726164655661756c7400dc0219757067726164655f7661756c745f66726f6d5f736f7572636500dd021667657446756e6769626c654573647442616c616e636500de021267657443757272656e744e66744e6f6e636500df020973656e645f6573647400e0021373656e645f657364745f776974685f6665657300e1020f73656e645f657364745f747769636500e2021f73656e645f657364745f6469726563745f6d756c74695f7472616e7366657200e3021469737375655f66756e6769626c655f746f6b656e00e4020a6c6f63616c5f6d696e7400e5020a6c6f63616c5f6275726e00e602146765745f657364745f6c6f63616c5f726f6c657300e702136765745f657364745f746f6b656e5f6461746100e8020e69735f657364745f66726f7a656e00e9020e69735f657364745f70617573656400ea021869735f657364745f6c696d697465645f7472616e7366657200eb021976616c69646174655f746f6b656e5f6964656e74696669657200ec02097366745f697373756500ed020f6765745f6e66745f62616c616e636500ee02076275795f6e667400ef02096e66745f697373756500f0020a6e66745f63726561746500f102126e66745f6372656174655f636f6d7061637400f2020c6e66745f6164645f7572697300f302156e66745f7570646174655f6174747269627574657300f4021d6e66745f6465636f64655f636f6d706c65785f6174747269627574657300f502106e66745f6164645f7175616e7469747900f602086e66745f6275726e00f7021b7472616e736665725f6e66745f7669615f6173796e635f63616c6c00f802187472616e736665725f6e66745f616e645f6578656375746500f9020f6372656174655f616e645f73656e6400fa020d7365744c6f63616c526f6c657300fb020f756e7365744c6f63616c526f6c657300fc021369737375655f64796e616d69635f746f6b656e00fd021569737375655f746f6b656e5f616c6c5f726f6c657300fe02116368616e67655f746f5f64796e616d696300ff020c7570646174655f746f6b656e008003106d6f646966795f726f79616c746965730081030c7365745f6e65775f757269730082030e6d6f646966795f63726561746f72008303116d657461646174615f72656372656174650084030f6d657461646174615f7570646174650085030f6c617374497373756564546f6b656e008603106c6173744572726f724d6573736167650087030d63616c6c6261636b5f646174610088031663616c6c6261636b5f646174615f61745f696e64657800890313636c6561725f63616c6c6261636b5f64617461008a031c666f72776172645f70726f6d6973655f6163636570745f66756e6473008b031e666f72776172645f70726f6d6973655f72657472696576655f66756e6473008c0318666f72776172645f7061796d656e745f63616c6c6261636b008d0320666f72776172645f7061796d656e745f6761735f666f725f63616c6c6261636b008e032070726f6d6973655f7261775f73696e676c655f746f6b656e5f746f5f75736572008f031870726f6d6973655f7261775f73696e676c655f746f6b656e0090031a70726f6d6973655f7261775f6d756c74695f7472616e7366657200910325666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c656761637900920331666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c65676163795f72657365745f74776963650093032b666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c65676163795f747769636500940324666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c74690095032a666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c74695f747769636500960330666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c74695f74776963655f72657365740097032d666f72776172645f70726f6d6973655f72657472696576655f66756e64735f6261636b5f7472616e73666572730098031772657472696576655f66756e64735f63616c6c6261636b009903117472616e736665725f63616c6c6261636b009a03107468655f6f6e655f63616c6c6261636b009b031672657472696576655f657364745f63616c6c6261636b009c032672657472696576655f66756e64735f6261636b5f7472616e73666572735f63616c6c6261636b009d030863616c6c4261636b009e030a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01060afcac02e8021601017f103f220142001000200120012000100120010b1901017f41f8940841f8940828020041016b220036020020000b0900200020011002000b0f01017f10032201200010041a20010b5801027f230041206b220124001043210220012000100536021c20014100360218200120003602140340200141086a200141146a1044200128020841017104402002200128020c104110450c010b0b200141206a240020020b08004101410010460b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a4104106e1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410141a200241106a24000b1101017f103f22022000200110071a20020b0c002000103f2200100620000b3002017f017e200128020810412102200129030021032000200128020c103e36020c20002003370300200020023602080b0a002000104a2001104b0b0f01017f103f2201200010241a20010b5101027f230041106b22022400200220001005220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410141a2001200010041a200241106a24000b0900200020011040000b1500200020012002410b41bb830841ae8308109f030b1800200120021046210120001043360204200020013602000b17002002200310cf0120002002360204200020013602000b17002002200310d30120002002360204200020013602000b17002002200310d50120002002360204200020013602000b1801017e101e4162100c416210a80120002001105e1a101d0b1500200020012002411241d3830841c68308109f030ba00202017f017e230041e0006b22072400200741c8006a41e58308410d104e200741406b2007280248200728024c2000104f200741386a2007280240200728024420011051200741306a2007280238200728023c20021055200741286a2007280230200728023420031051200741206a2007280228200728022c20041055200741186a2007280220200728022420051056200728021c21002007280218210102402006105745044020072006100536025c20074100360258200720063602540340200741106a200741d4006a10442007280210410171450d02200741086a2001200020072802141058200728020c2100200728020821010c000b000b200720012000105920072802042100200728020021010b20012000105a200741e0006a24000b1e0010431a200220032802001041104520002002360204200020013602000b3c01017f10431041210420032d0000200410c70120032d0001200410c70120032d0002200410c70120022004104520002002360204200020013602000b070020001005450b17002002200310c80120002002360204200020013602000b2301017f104322034101410010071a20022003104520002002360204200020013602000b5402017f017e230041106b22022400101e4162100c416210a80120002001105e2100101d2002200010422200100536020c2002410036020820022000360204200241046a41878808410b10de01200241106a24000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210071a200141106a24000b4801027f230041106b220624001043210720011041210120062003103e36020c200620023703002006200136020820072006105d2000200742002004200510081a200641106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437020420002003411010141a200341106a24000b150020002001200220032004103f220110091a20010b8d0101027f230041306b22052400024020011057450440200541286a4200370300200542003703200240200110604101470d002001200541206a220610611a200541106a20061062200528021c210620052802181063450d0020002006200220032004100a1a0c020b2000200120022003200410081a0c010b20001064200220032004100a1a0b200541306a24000b0900200010054104760b0f002000410020014110106e4101730bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1300415841f68008410b10071a41582000107b0b0e01017f103f22004200100020000b0c01017f103f2200100b20000b0c01017f103f2200100c20000b2801027f103f2103200110052104200010682001106941fc9408419c9508200420022003100d20030b0b00200041fc940810391a0b0b002000419c950810391a0b4a01047f230041106b22002400103f2201103f2202100e2002106bc041004a0440106c21032000200236020c200042003703002000200336020820012000105d0b200041106a240020010b0e00200010a60141ff017141016b0b0a0041f68008410b10460bb00101077f230041106b220424002001200220034200100f220210032205100322061003220710032208100322014200100f22091003220a101020011005450440200141b48008412010071a0b200441003b010e200541002004410e6a4102106e1a200020034200523a001c200020023602002000200a36021820002009360214200020013602102000200836020c2000200736020820002006360204200020042d000e4100473a001d200441106a24000b0f002000200120032002103b4100470b080041674175100e0b1c01027f103f2201103f2202100e20002001360204200020023602000bad0102047f017e230041406a22012400027f107222021005044010432103200120021005360214200141003602102001200236020c0340200141186a2001410c6a1073200128021841014745044020012903202105200128022c210220012802281041210420012002103e36023c20012005370330200120043602382003200141306a105d0c010b0b41010c010b1074103e210341000b21022000200336020420002002360200200141406b24000b910101037f230041206b22002400107921010240410410780d00415841f68008410b10071a200020011005360208200041003602042000200136020003402000410f6a2000107a20002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe037120024118767272107b450d000b4191810841181002000b200041206a240020010b5501017f230041306b220224002002411f6a2001107a200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a106242010542000b370300200241306a24000b100041011078450440415d10110b415d0b2001017f10722201106041014604402000200110760f0b41d4800841221002000b6501017f230041306b22022400200241286a42003703002002420037032020014100200241206a22014110106e450440200241106a20011062200041086a200241186a29030037030020002002290310370300200241306a24000f0b41a18808411d1002000b4901017f0240410810780d001074106b41ff017141014704401079210041594101410010071a4159200010041a0c010b415841f68008410b10071a415941818108411010071a0b41590b2b01027f200041c095082d0000220171200041ff017146220245044041c0950820002001723a00000b20020b100041021078450440415a10120b415a0b7001037f230041106b22022400200020012802042204200128020849047f200241086a22034200370300200242003703002001280200200420024110106e1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0020002001103c41004a0b5d01027f230041106b2201240002400240024002401079220210600e020102000b41d4800841221002000b106c210220001074103e36020c20004200370300200020023602080c010b20012002107d2000200110480b200141106a24000b6001017f230041306b22022400200241286a4200370300200242003703202001200241206a220110610440200241106a20011062200041086a200241186a29030037030020002002290310370300200241306a24000f0b41a18808411d1002000b3501017f230041106b220124002001107c200129030050044020002001290308370300200141106a24000f0b41a98108411c1002000b5701027f230041106b22002400027f0240024002401079220110600e020102000b41ea8108411d1002000b10740c010b20002001107d2000280208106345044041c5810841251002000b200028020c0b200041106a24000b0d002000103f220010131a20000b2e01017f418782084117104622042000200110141a2004419e8208410310141a20042002200310141a20041015000b1200200020012002108301200120021084010b3e01017f230041106b22032400200341086a2000104420032802084101710440200328020c1041200341106a24000f0b2001200241a182084111108101000b2000200010412200100541204704402001200241af89084110108101000b20000b2d01017f104321030340200028020041bc95082802004e450440200320002001200210860110450c010b0b20030b0e002000200120021087011080010b3001017f2000280200220341bc95082802004e04402001200241a182084111108101000b2000200341016a36020020030b1200200020012002108701200120021096010b0b00200020012002108a010b2d01017f10432103037f200028020041bc95082802004e047f200305200320002001200210860110450c010b0b0b980101027f230041106b22022400027f2001108c01220341ebde0147410020031b45044041002103200141d98e08410610880121012002410c6a0c010b027f200128020041bc95082802004e044010430c010b200141d98e0841061086010b21012002200336020c41012103200241086a0b2001360200200020033602002000200228020c36020420002002280208360208200241106a24000b3001017e200041d98e084106108701101622014280808080105a044041d98e08410641808008410e108101000b2001a70b0900200010411085020b5a01027f027f41002001108c01220245200241ebde0146720d001a200128020041bc95082802004e04401043210341010c010b200141d98e084106108601210341010b21012000200336020820002002360204200020013602000b2b01017e200020012002109d02220342ffffffff0f5804402003a70f0b2001200241808008410e108101000b3801017f0240200128020041bc95082802004e0440410121020c010b200141cf8b08410710860121010b20002001360204200020023602000b0e002000200120021083011092010b0d002000103f220010251a20000b880101037f230041106b22032400200320001080012200100536020c2003410036020820032000360204200341046a20012002109401200341046a200120021094012104200341046a200120021094012105200328020c20032802084704402001200241808008410e108101000b200341106a240041ff01712005411074200441ff017141087472720b5001027f230041106b22032400200341003a000f2000280200200028020422042003410f6a4101106e04402001200241928808410f108101000b2000200441016a36020420032d000f200341106a24000b0b002000200120021096010b4001017f230041106b22032400200341086a2000109a0110ff0120032802084101710440200328020c200341106a24000f0b2001200241de8808410d108101000b4a01017e4102101745044041000f0b0240410210162200428002540440200042095a0d012000a70f0b41928c08410a41808008410e108101000b41928c08410a418e8008410d108101000b2501017e2000101622034280808080105a04402001200241808008410e108101000b2003a70b210020001080012200100541204704402001200241af89084110108101000b20000b0a0020001080011085020b1400200020014f04400f0b41b2820841121002000b190041bc950828020020004c04400f0b41b2820841121002000b1400101820004604400f0b41c4820841191002000b1900200041bc95082802004c04400f0b41a1820841111002000b0b0041bc950810183602000b7101047f230041106b22012400104322021019414e4101410010071a200120021005220436020c200141003602082001200236020403402003200446450440414e200141046a419b8008411910a101104520012802082103200128020c21040c010b0b2000414e10a201200141106a24000b5e01037f230041106b2203240020002001200210f3012104200341086a200028020020002802042205200410f40120032802084101714504402001200241928808410f10f501000b200328020c2000200420056a360204200341106a24000b190020002001100536020820004100360204200020013602000b1b002000280200101a1a20002802044504402000280208101a1a0b0b4f01017f230041206b2201240020012000100536021c20014100360218200120003602140340200141086a200141146a104420012802084101710440200128020c101a1a0c010b0b200141206a24000b2000200020012002101b200010a60141ff017104400f0b41dd820841301002000b14002000103a220041004a20004100486b41016a0b0f00200210a8012000200110a901000b0a0041764200100041760b0d002000200120022003103d000b4b01017f230041206b22062400200641106a200041086a2903003703002006200136021c200620023602182006200536020420062004360200200620002903003703082006200310ab01000b800101037f230041106b22022400200028020421032000280200210420002903085004402002200420032000280210200028021410ac012002280204210020022802002102200110a8012002200010a901000b200241086a200420032001200041086a10ad01200228020c210020022802082101106610a8012001200010a901000b7201017f230041206b22052400200541186a41ed8708410c104e200541106a2005280218200528021c20031055200541086a200528021020052802142004105120052005280208200528020c2001200210cb01200528020421012000200528020036020020002001360204200541206a24000ba40101027f230041306b22052400200541286a41de8708410f104e200541206a2005280228200528022c20042802081055200541186a2005280220200528022420042903001050200541106a2005280218200528021c200428020c1051200528021021062005280214210410431a2004200310411045200541086a200620042001200210cb01200528020c21012000200528020836020020002001360204200541306a24000b5c02037f017e230041106b2205240010432106200028020828020010412107200029030021082005200028020c280200103e36020c200520083703002005200736020820062005105d20012006200220032004105f200541106a24000bb30301017f230041106b220624002006200536020c2006200436020820062003360204230041106b2203240020002802082003200028020c220536020c2003200036020820032002360204200320013602002802002100200641046a2104230041206b22022400200010634504402002200036020c200241186a200441086a2802003602002002200429020037031020022002410c6a220136021c230041206b220024002003280204210420032802002105200041086a200241106a220241086a28020036020020002001360218200020022902003703002000200328020c36021c20002003280208290300370310200041106a2005200420002802002802002000280204200028020810aa01000b230041106b22002400200041086a200441086a2802003602002000200536020c20002004290200370300200028020021022000280204210320002802082104230041206b220024002000200536020c2000200436021c200020033602182000200136021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a200328020028020010f201000b880101017f230041106b220624002006200036020c230041206b220024002000200536021c20002004360218200020013602142000200236021020002006410c6a36020c230041106b22012400200141086a2000410c6a220028020c20002802102003200028020028020010b101200128020c210020012802082101106610a8012001200010a901000b840201027f230041e0006b22052400200541306a41ca87084114104e200541286a20052802302005280234200310ba01200541206a2005280228200528022c2004106010c9012005280224210320052802202106200520041005360244200541003602402005200436023c0340200541c8006a2005413c6a10732005280248410147450440200528025c2104200541106a2006200320052802581058200541086a200528021020052802142005290350105020052005280208200528020c200410ca0120052802042103200528020021060c010b0b200541186a200620032001200210cb01200528021c21012000200528021836020020002001360204200541e0006a24000b830101037f230041206b22052400200028020c21060240200028020822072802001063450440200520072802003602042005200636021c2005200436020c20052003360208200520002903003703102005200541046a360218200541106a200120022003200410ae010c010b2006280200200120022003200410b3010b200541206a24000b5a01037f230041106b22052400200010d7010440418d830841211040000b104321062000103e2100106c21072005200036020c200542003703002005200736020820062005105d20012006200220032004105f200541106a24000b220020002001200210b5012000418585084180850820031b4104410520031b10b5010b1501017f104322032001200210071a2000200310450b17002002200310d40120002002360204200020013602000b4b01017f230041106b22032400200341086a200128020020012802042002105820012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b4c01017f230041106b22032400200341086a20012802002001280204200210c90120012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000bce0302067f017e230041406a22072400410121080240024002400240200241ff0171220a41016b0e03010302000b41fa86082108410521090c020b41ff86082108411021090c010b418f87082108411121090b200741106a20082009104e2007200136023820072007290310370230200741246a2201200741306a2208200310be01200741186a22032001200410be01200a450440200741086a2007280218200728021c2005105120072007290308220d370218200741386a200741206a2802003602002007200d37033020032008200628020010b8010b20062d0007210320062d0009210420062d0008210520062d000c210820062d000b210920062d000a210a20062d0006210b20062d0005210c200728021c220141898508410920062d000410b4012001419285084107200c10b4012001419985084108200b10b4010240200241ff01710440200141a185084118200341017110b4010c010b200141b985084107200541017110b401200141c085084107200441017110b4010b200141c78508410e200a41017110b401200141d58508410a200941017110b401200141df85084112200841017110b401200020013602042000200728022036020820002007280218360200200741406b24000b17002002200310d10120002002360204200020013602000b6d01017e200028020420002802084f0440410d0f0b200041bf89084108109c022200100545044041000f0b0240200041bf89084108109d0222014280025404402001420d5a0d012001a70f0b41bf8908410841808008410e108101000b41bf89084108418e8008410d108101000be50101017f410121020240024002400240024002400240024002400240024002400240200141ff0171220141016b0e0c000102030405060708090a0b0c0b41fc91082102411121010c0b0b418d92082102411121010c0a0b419e92082102411121010c090b41af92082102411621010c080b41c592082102410f21010c070b41d492082102411b21010c060b41ef92082102411121010c050b418093082102411321010c040b419393082102411721010c030b41aa93082102411521010c020b41bf93082102411121010c010b41d093082102411021010b20002001360204200020023602000b2301017f104322052003200410071a20022005104520002002360204200020013602000b4b01017f230041106b22032400200341086a200128020020012802042002105520012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b5c01027f230041306b2201240010432102200120001005360214200141003602102001200036020c200141206a21000340200141186a2001410c6a107320012802184101474504402002200010c0010c010b0b200141306a240020020b20002000200128020810d4012000200129030010d3012000200128020c10d0010b6801027f230041306b2201240010642102200120001005360214200141003602102001200036020c03400240200141186a2001410c6a107320012802184101470d00200128022c210020012802281063450d0120022002200010010c010b0b200141306a240020020b1b01027f103f2200101c41a08708410a10462201200010041a20010b5201037f2002200028022046047f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030541010b450b970101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011005220341214f044041fe9308410e1002000b2001410020022003106e1a20002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b150020012802004101410010071a2000200110c6010b6001027f230041206b2202240020012802001041210320022000100536021c20024100360218200220003602140340200241086a200241146a104420022802084101710440200228020c2003104b0c010b0b20012003360200200241206a24000b2701017f230041106b22022400200220003a000f20012002410f6a410110141a200241106a24000b0d0010431a20002001104110450b17002002200310ce0120002002360204200020013602000b17002002200310d00120002002360204200020013602000b7001017f230041206b220524000240200310570d002002200310c80120052004100536021c20054100360218200520043602140340200541086a200541146a10442005280208410171450d012002200528020c10c8010c000b000b2000200236020420002001360200200541206a24000b100020001043360204200020013602000b3601027f230041106b22012400200141086a104310cc01200128020c21022000200128020836020020002002360204200141106a24000b1401017f104322022001ad10a2022000200210450b3101017f230041106b220224002002104336020c20012802002002410c6a109e022000200228020c1045200241106a24000b0d0010431a20002001104a10450b100010431a20002001280200104110450b5f01017f230041206b2204240020042003100536021c20044100360218200420033602140340200441086a200441146a1044200428020841017104402002200428020c10c8010c010b0b2000200236020420002001360200200441206a24000b1301017f10432202200110a2022000200210450b2e01017f230041106b220224002002104336020c20012002410c6a109e022000200228020c1045200241106a24000b100010431a20002001280200104a10450ba40102037f017e230041306b220124000240200028020822021057450440200029030021040c010b200028021c28020010d701450d0041f98708410e1040000b20012004370308200141206a200041186a2903003703002001200041246a36022820012002360210200120002903103703182001200028020c22033602142001200141086a36022c200141186a200028022028020020042002200310b201200141306a24000b0b002000106b41ff0171450bde0102047f027e230041406a220124000240024020002802102202105745044010d90121050c010b200028020c10d7010d010b200141106a200041086a290300220637030020012000290300370308200028021821032000280214210002402006a7220410634504402001200436021c2001200141146a36023c20012001290308370330200120003602282001200236022420012001411c6a36023820012003360220200141306a200328020020052002200010ae010c010b2001280214200328020020052002200010b3010b200141406b24000f0b41f98708410e1040000b1701017e101e220042a08d067d2000200042a08d06561b0b4e02017e027f024020002802082203105745044010d9012101200028020421020c010b200028020422021057450d0041f98708410e1040000b2000280200280200200220012003200028020c105f0b5d01017f230041206b22012400200141106a200041086a2903003703002001200041146a3602182001200029030037030820002802102100200110cd01200141086a200028020042002001280200200128020410ae01200141206a24000b180041674101410010071a20002001420010434167100a1a0b6002047f017e230041106b22022400106f10d9012001280208210320012802042104200128020010a8012105280200200520042003105e1a101d200241086a1070200228020c21012000200228020836020020002001360204200241106a24000b1200200020012002109c0220012002109d020b5e02047f017e230041106b2202240010d9012001280208210320012802042104200128020010a8012105280200200520042003105e1a101d200241086a1070200228020c21012000200228020836020020002001360204200241106a24000b2f02017e037f10d9012000280208210220002802042103200028020010a8012104280200200420032002105e1a101d0b910102047f017e230041106b22012400200028020c2103200028020821022000290300200028021010a8012104280200200420022003105e2100101d20012000104222021005220036020c410021032001410036020820012002360204104321020340200020034d4504402002200141046a10e2011045200128020c2100200128020821030c010b0b200141106a240020020b0f00200041878808410b109c0210410b3102017e037f10d9012000280208210220002802042103200028020010a8012104280200200420032002105e1a101d106a0b2000200041046a10e50120002802102000280214200028020028020010a701000b2901027f10c2011043210120002802002000280204200110a00220002802082001109102200110271a0b2501017f2000280204200041106a2201200120002802002000280208200028020c10b001000b1500200010e501200028020c200028021010e801000b0d002000200110f00110a701000b6f01047f200010e501200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22002400200010f00136020c200141106a2000410c6a10f101000b0a002000200110e801000b2501017f200041086a2000411c6a2201200120002802182000280200200028020410af01000bbc0502087f017e23004180016b2201240020002802142104200028021021072001416736021c20002802182001411c6a10c50120012000290308370320200120002903203703282000280230210520002802282102200028022c21032000280200210820012000280204220636023420012008360230024020084101460440200041346a2100024002400240200610600e020102000b2001200336026c200120023602682001200036026420012000360260200120043602502001200736024c2001200141346a36024820012001411c6a36025c2001200141206a3602582001200141286a3602542001200220032005200610b1012001280204210020012802002102200141cc006a106610a8012002200010ed010c030b200120033602602001200236025c2001200436024c2001200736024820012001411c6a3602582001200141206a3602542001200141286a36025010a8012100200141c8006a200528020020002002200310ed010c020b200141386a20061076200129033821092001200141c4006a220636025c2001200141406b220836025820012009370350200120003602782001200036027420012004360264200120073602602001200336024c2001200236024820012001411c6a3602702001200141206a36026c2001200141286a360268200141e0006a21002009500440200141086a200220032008200610ac01200128020c21022001280208210310a80121042000200528020020042003200210ed010c020b200141106a200220032005280200200141d0006a10ad0120012802142102200128021021032000106610a8012003200210ed010c010b20012003360264200120023602602001200436024c2001200736024820012001411c6a3602582001200141206a3602542001200141286a3602502001200536025c200141c8006a200528020020062002200310ed010b20014180016a24000b370020012002200320042000280200220120002802042202200120022000280208290300200028020c2903002000280210280200101f1a0b8c0402097f017e23004190016b22012400200028022c210420002802282105200141673602142000280230200141146a220910c5012001200029032037031820012000290310370320200028021c21022000280218210320002802382106200028020c21072000290300210a024020002802082208106345044020012007360254200120083602502001200a3703482001200436023820012005360234200120023602302001200336022c20012006360228200120093602442001200141186a22073602402001200141206a220836023c20012004360274200120053602702001200141d4006a220436026c2001200141d0006a22053602682001200a37036020012000413c6a22003602880120012000360284012001200236025c2001200336025820012009360280012001200736027c20012008360278200141f0006a2100200a5004402001200320022005200410ac01200128020421022001280200210310a80121042000200628020020042003200210ed010c020b200141086a200320022006280200200141e0006a10ad01200128020c2102200128020821032000106610a8012003200210ed010c010b20012002360274200120033602702001200436025c200120053602582001200141146a3602682001200141186a3602642001200141206a3602602001200636026c200141d8006a200628020020072003200210ed010b20014190016a24000b7b02067f027e230041106b22012400200028021c2102200028021821032001416736020c20002802202001410c6a10c501200028020c2104200028020821052000290300210720002903102108200028022810a8012106280200200620052004200320022003200220072008200128020c101f1a200141106a24000b0a0041aa8708412010460b3301027f230041106b22022400200028020021032002200136020420022000290208370208200241046a200328020010f201000b1a00200028020028020020012000280204200028020810a901000b5301017f230041106b220324002003410036020c20002003410c6a41042001200210a102200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1f0020012002200310032201102021022000200136020420002002453602000b160020002001104622002002200310141a20001015000b5a01037f230041106b220224002000200110f7012103200241086a200028020020002802042204200310f4012002280208410171450440200141928808410f10f801000b200228020c2000200320046a360204200241106a24000b5101017f230041106b220224002002410036020c20002002410c6a41042001109302200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b2c01017f41908908411b10462203200010041a2003419e8208410310141a20032001200210141a20031015000b8b0102047f017e230041206b2201240010432103200120001005220236020c20014100360208200120003602040340200220044d450440200141046a220210fa012100200241bf8908410810de0121052001200210fb0136021c20012005370310200120003602182003200141106a105d200128020c2102200128020821040c010b0b200141206a240020030b1000200041bf89084108109c02108d010b1000200041bf89084108109c021092010b5a01027f230041206b220124001043210220012000100536021c20014100360218200120003602140340200141086a200141146a1044200128020841017104402002200128020c1041104110450c010b0b200141206a240020020b0e01017f104322012000104520010b0900200020011021450b1b01017f20011063210220002001360204200020024101733602000b0d0020002000200110a50120000b1001017f103f220220002001102220020b1200417542021000200020004175102320000b140041754290ce001000200020004175102320000b140020001063044041de8808410d1002000b20000b4901017f230041106b220124000240200010054104470d002001410036020c200041002001410c6a4104106e1a200128020c41c58eb1a204470d00106c21000b200141106a240020000b0d002000103f220010261a20000b1d00200110634504402000200110271a0f0b200041eb880841041088020b0d00200020012002104610271a0b1200416c4101410010071a2000416c10271a0b3001017f230041106b2202240020022001ad200241086a108b02200020022802002002280204108802200241106a24000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b5301027f20002001108d0241016a2203108e021043210020022802082000104b200228020c2000108f022002290300200010900220022802102000104920022802142000109102200010271a20012003108a020bc10102017e037f230041106b220224002002420037030802402000108602220410052203410949044020044100200220036b41106a2003106e1a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d01200241106a24002001a70f0b200041808008410e10f801000b200041808008410e10f801000b1a00200010412200418b8908410510141a2001200010940220000b1c002000106345044020002001104b0f0b41eb88084104200110a0020b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810141a200241106a24000b5c01017f230041206b2202240020001005410276200110940220022000100536021c20024100360218200220003602140340200241086a200241146a104420022802084101710440200228020c2001104b0c010b0b200241206a24000bbb0202057f017e230041206b22032400200320012002108e02220110860222021005360214200341003602102003200236020c2003410c6a2202200110f60121052003410c6a200110f6011085022106200342003703182002200341186a41082001109302200329031821082003410c6a200110f60110920121072002200110f70121021043210403402002044020042003410c6a200110f6011045200241016b21020c010b0b20032802142003280210470440200141808008410e10f801000b20002004360214200020073602102000200636020c200020053602082000200842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe03832008423888848484370300200341206a24000b2f01017f20002802002000280204220420012002106e0440200341928808410f10f801000b2000200220046a3602040b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410141a200241106a24000b2a01017f230041106b220124002001104336020c20002001410c6a10c601200128020c200141106a24000b0900200120001097020b5101017f230041206b2202240020022000100536021c20024100360218200220003602140340200241086a200241146a1044200228020841017104402001200228020c10c8010c010b0b200241206a24000b1201017f10432202200020011046104520020b08002000411110460b0a0041f58908411710460b7001027f230041306b2201240010432102200120001005360214200141003602102001200036020c0340200141186a2001410c6a10732001280218410147450440200128022c21002002200128022810d4012002200129032010d3012002200010d0010c010b0b200141306a240020020b3c01017f230041106b22032400200341086a2000104420032802084101710440200328020c200341106a24000f0b2001200241a182084111108101000ba20102017e027f230041106b220424002004420037030820001005220541094f04402001200241808008410e108101000b20004100200420056b41106a2005106e1a20042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b2200200010634504402001200010413602000f0b200128020041eb8808410410071a0b1800200010634504402000101a1a0f0b41eb8808410410280b12002001200210940220022000200110141a0b3101017f20002802002000280204220520012002106e04402003200441928808410f10f501000b2000200220056a3602040b2f01017f230041106b2202240020022001200241086a108b0220002002280200200228020410071a200241106a24000b6901037f230041106b2203240020011041210420032002104222011005220536020c41002102200341003602082003200136020402402005450440410121020c010b200341046a10e20121010b200020013602082000200236020420002004360200200341106a24000b0a002000106bc041004a0b0a00200010d7014101730b0f01017f103f22012000ad100020010b2901027f41d98908410d104622011041220241ab8908410410141a20002002360204200020013602000b2801017f41f5890841171098022203200010d4012003200110d3012003200210d5012003104310290b0a0041968a08410f10460b0a0041a58a08411010460b1a01017f41dc8a08411a109802220120001096022001104310290b1200418e8b08411a109802200010950210290b4b01017f230041106b22012400200141086a200041bf89084108109c02108d0110ff01200128020841017145044041bf8908410841de8808410d108101000b200128020c200141106a24000b6701027f230041206b2202240041c18b08410e1098022203200010d50120022001100536021c20024100360218200220013602140340200241086a200241146a1044200228020841017104402003200228020c10c8010c010b0b200310431029200241206a24000b6202017f017e230041106b220424002002200310b002210220011041210110d9011064418002105b200141672002103f2201103f2202102a1a101d200441046a2001200210a3022000200428020c36020820002004290204370200200441106a24000b1a01017f1043210220004101714504402002200110c8010b20020b0d002000200141b78c0810a0030b0d002000200141c38c0810a0030b5801017f230041106b22042400200441086a41cf8c08410e104e20042004280208200428020c200310d20120042802002103200020023602102000200428020436020c2000200336020820002001370300200441106a24000b6601037f230041206b22052400200541186a41dd8c08410e104e20052802182106200528021c2207200210d401200541106a2006200720031050200541086a20052802102005280214200410ca012000200529030837020420002001360200200541206a24000b7e01037f230041206b22032400200341086a41fc8c084114104e200328020c21042003280208210520032002100536021c200341003602182003200236021403402003200341146a1044200328020041017104402004200328020410c8010c010b0b200020043602082000200536020420002001360200200341206a24000b2d01017f1043210420024101714504402004200310c8010b200041003b010420002004360200200020013602080b2b01017f10432203200110ce012003200210d0012000200336020820004110360204200041ea8f083602000b2401017f10432202200110d1012000200236020820004112360204200041cd90083602000b8d0201047f230041d0006b22022400200241106a200010c40102402002280230450440410021000c010b200241106a41cd9008411210c301450440410121000c010b109f01410021004100109e0120024100360240200241c4006a200241406b108b012002280240109c01200228024c2104200228024821052002280244210320022001100536023c2002410036023820022001360234109f01200241346a41ea9008410610820121012002280238200228023c109b01024020034101710440200241086a107e200228020c210320022802081063450d01200310a402450d012001200310dc010c010b10a902200510870210aa021089020c010b10aa02200410271a0b200241d0006a240020000ba00102017f017e230041206b220724002007200136020c20072000360208200720023602102007200336021420072004360218200720053b011c200720054110763a001e1043220020061045200741086a22012007410c6a2202200741106a200741146a200741186a2007411c6a20001054210841908a0841061098022200200110cf012000200810d3012000200210d501200010431029200741206a240020080b0900102b4100109d010b1b00102b4102109d01410041f18d0841021099014101104710dc010b8b0101047f230041406a22002400109f014101109e01410041f18d084102109901210120004101360228200041286a220241ed8d08410410890121032000280228109c012000200136020c2002101e4201882000410c6a200310b302200020002802383602202000200029033037031820002000290328370310200041106a10e10110ac02200041406b24000bc70102047f017e230041406a22002400109f014101109e01410041f18d084102109901210120004101360228200041286a220241ed8d08410410890121032000280228109c012000200136020c2002101e42038022042000410c6a22012003104210b302200020002802383602202000200029033037031820002000290328370310200041106a10e10110ac02200220042001200310b302200020002802383602202000200029033037031820002000290328370310200041106a10e10110ac02200041406b24000b960402077f027e230041a0016b220024004101109d012000410041f18d084102109901360224200041286a107c101e2107200041186a41908d084119104e2000200742018822083703382000200028021c22013602442000200028021822033602402000200041246a2205360248200020083703502000280234210220002903282107027f200028023022041063450440200020023602742000200436027020002007370368200020013602602000200336025c2000200041d0006a2206360264200020053602582000200041f4006a220236028c012000200041f0006a22043602880120002007370380012000200041cc006a22053602980120002005360294012000200136027c2000200336027820002006360290012007500440200041086a200320012004200210ac01200028020c21012000280208210310a801210220002903502000280224200220032001105e0c020b200041106a20032001200028022420004180016a10ad0120002802142101200028021021031066210210a801210420002903502002200420032001105e0c010b20082000280224200220032001105e0b2101101d20002001104222021005220136028001410021032000410036027c20002002360278104321020340200120034d4504402002200041f8006a10e20110452000280280012101200028027c21030c010b0b200241f68a0841181098022201109702200110431029200041a0016a24000b5b02037f017e230041106b22002400107f1a4101109d01410041f18d0841021099012101107f2102101e200041086a41ca8d084123104e420188200120022000280208200028020c105e1a101d106a10c101102c200041106a24000bc20302077f027e23004190016b220024004101109d012000410041f18d0841021099012205360224200041286a1075101e2108200041186a41ca8d084123104e20002802182101200028021c2102200029032821072000200041346a22033602542000200041306a22043602502000200737034820002002360244200020013602402000200842018822083703382000200041246a360258200020083703602000200336027c20002004360278200020073703702000200041dc006a22063602880120002006360284012000200236026c200020013602682000200041e0006a3602800102402007500440200041086a200120022004200310ac01200028020c21012000280208210210a801210320002903602000280224200320022001105e1a0c010b200041106a200120022005200041f0006a10ad0120002802142101200028021021021066210310a801210420002903602003200420022001105e1a0b101d106a22011060410147044041ef8808411c1040000b200041e8006a22022001107d200041386a200210482000280240108402200028024421022000290338210710432201108f02200720011090022002200110492001101a1a20004190016a24000bdb0102037f017e230041406a220024004101109d012000410041f18d08410210990136022810772101101e200041106a41ca8d084123104e200041086a20002802102000280214200041286a200110b101200028020c210120002802082102420188106610a80120022001105e1a101d200010702000280204210210432101200020021005360224200041003602202000200236021c0340200041286a2000411c6a10732000280228410147450440200028023c20002802382001108f0220002903302001109002200110490c010b0b2001101a1a200041406b24000bcc0102067f017e230041206b220024004102109d01410041f18d0841021099012102410110472101200041106a107e20002802102103200020002802142204200420011081021083021080022205360218200041086a41b78c08410c104e200028020c21012000280208210410d9012106027f200310634504402000200336021c2000200420012000411c6a200041186a10ac0120002802042103200028020021012006200210a80120012003105e0c010b20062002200520042001105e0b101d104210051a200041206a24000ba20402077f027e230041a0016b220024004101109d012000410041f18d08410210990136022c200041306a107c200041206a41b78c08410c104e20002000280224220136024420002000280220220336024020002000412c6a2205360248200010d9012208370350200028023c2102200029033021070240200028023822041063450440200020023602742000200436027020002007370368200020013602602000200336025c2000200041d0006a2206360264200020053602582000200041f4006a220236028c012000200041f0006a22043602880120002007370380012000200041cc006a22053602980120002005360294012000200136027c2000200336027820002006360290012007500440200041106a200320012004200210ac01200028021421012000280210210310a80121022000290350200028022c200220032001105e1a0c020b200041186a20032001200028022c20004180016a10ad01200028021c2101200028021821031066210210a801210420002903502002200420032001105e1a0c010b2008200028022c200220032001105e1a0b101d200041086a41ac8c08410b104e20002802082103200028020c21011043220241b78c08410c10071a20012002104510d90110a8012102200028022c200220032001105e2101101d20002001104222011005360280012000410036027c20002001360278200041f8006a41878808410b109c0241878808410b108f01ad102d200041a0016a24000b5b02047f017e230041106b22002400102b4104109d01410041f18d08410210990121014101109a01210241021016210441031047210320002001360200200041046a2201200020022004200310b402200110e001200041106a24000bfb0302067f017e23004190016b220024004103109d01410041f18d0841021099012101410141f38d08410510950121024102104721042000200136023c1072210341848e081099022105200041306a41a98d084121104e200041286a20002802302000280234200210b601200041206a2000280228200028022c200410ca012000280220210120002802242202200510c8012000200236024c200020013602482000200336024420002000413c6a360240200010d90122063703500240024002400240200310600e020102000b200041086a200120022000413c6a200310b101200028020c2101200028020821022006106610a80120022001105e1a0c020b10a80121032006200028023c200320012002105e1a0c010b200041d8006a20031076200029035821062000200041e4006a220436027c2000200041e0006a2205360278200020063703702000200041d0006a22033602880120002003360284012000200236026c2000200136026820002003360280012006500440200041106a200120022005200410ac01200028021421012000280210210210a80121032000290350200028023c200320022001105e1a0c010b200041186a20012002200028023c200041f0006a10ad01200028021c2101200028021821021066210310a801210420002903502003200420022001105e1a0b101d20004190016a24000b07004100109d010ba20102057f017e230041206b22002400102b109f014101109e01410041f18d08410210990121012000410136021c2000411c6a220341f88d08410c108501200028021c109c012000200136021c200041106a41b78c08410c104e200028021421012000280210210410f901210210d901200041086a200420012003200210b101200028020c210120002802082102106610a80120022001105e1a101d200041206a24000bc40101047f230041306b22002400102b109f014101109e01410041f18d08410210990121012000410136020c2000410c6a220341ed8d0841041089012102200028020c109c0120002001360208230041106b22012400200141086a41cf8c08410e104e20012001280208200128020c200210d201200041246a220220012903003702042002200041086a360200200141106a24002000104336021820004112360214200041958e083602102000200029022837021c2000200028022436020c200310e401000bd90401077f230041406a220024004101109d012000410041f18d08410210990136020c200041106a2201107c200041346a2000410c6a10b1022000200028023436022820002000290238370320230041106b22022400200241086a200141086a290300370300200220012903003703002001411c6a2105200128021821002001280210210320012802142104230041106b220124002001200436020c2001200336020820012000360204230041206b2200240020022802082103200041086a2204200141046a220141086a280200360200200020012902003703002000200228020c36020c2000200236021c2000200536021820002005360214230041206b2202240020031063450440200241106a20042902003703002002200336021820022000290200370308230041206b22012400200041146a2200280204210520002802002104200241086a220228020c2106200141086a200241086a2802003602002001200636021c200120033602182001200229020037030020012000280208290300370310200128020028020021022001280204210320012802082106230041106b220024002000200141106a220141086a36020820002001410c6a36020c2000200129030037030020002004200520022003200610aa01000b230041106b22012400200028020c2102200141086a200041086a2802003602002001200236020c20012000290200370300200128020021032001280204210420012802082101230041206b220024002000200236020c2000200136021c200020043602182000200536021420002000410c6a360210200041106a200310f101000b800101017f230041d0006b220024004101109d012000410041f18d084102109901360204200041086a107c2000200028021410820236021c200041c4006a200041046a10b1022000200041106a36023020002000280244360238200020002903083703282000200029024837032020002000411c6a360234200041206a10eb01000ba00101047f230041d0006b220024004102109d01410041f18d084102109901210141011047210220002001360204200041086a107c2000280214220120021081021083022102103f22032001200210a5012000200336021c200041c4006a200041046a10b1022000200041106a36023020002000280244360238200020002903083703282000200029024837032020002000411c6a360234200041206a10eb01000b840102047f017e230041306b22002400102b4104109d01410041f18d08410210990121014101109a01210241021016210441031047210320002001360208200041246a200041086a20022004200310b4022000104336021820004117360214200041f589083602102000200029022837021c2000200028022436020c2000410c6a10e401000b9b0102057f017e230041206b220024004101109d012000410041f18d08410210990136020010772102200041046a2201200010b202200028020421032000290208210510432104200020053702182000200236021420002003360204200020043602102000411736020c200041f58908360208200141046a10e50120012802102001411c6a2200200020012802002001280214200128021810b001000beb0102067f017e230041406a22002400102b4103109d01410041f18d08410210990121014101109a0121024102104721032000200136020c2000200236021020002003360214200041186a22012000410c6a220410b102200029021c21062000280218210510432203200410d1012003200210d4012003200041146a220410d501200041306a2202200336020820024119360204200241a78e083602002000200536023c20004200370320200020063703182000200436022c2000200041106a360228200141186a10e501200141086a200141286a2200200020012802242001280200200128020410af01000b7a01047f230041206b22002400102b109f014101109e01410041f18d084102109901210120004101360204200041046a220241f88d08410c10850121032000280204109c0120002001360200200041146a200010b1022000200310f9013602082000200029021837020c20002000280214360204200210e601000b7a01047f230041206b22002400102b109f014101109e01410041f18d084102109901210120004101360204200041046a220241f88d08410c10850121032000280204109c0120002001360200200041146a200010b2022000200310f9013602082000200029021837020c20002000280214360204200210e601000b5501027f230041306b220024004101109d012000410041f18d08410210990136020c200041106a2201107c200041b78c08410c104e2000200029030037032020002000410c6a360228200110d801200041306a24000bb20202047f017e230041f0006b220024004102109d01410041f18d08410210990121014101104721022000200136021c200041106a107e20002802142101200020002802103602202000200120012002108102108302108002360224200041086a41b78c08410c104e200042003703302000200028020c220236022c20002000280208220136022820002000411c6a3602402000200041246a36023c2000200041206a36023802402001105745044010d90121040c010b200028022410d701450d0041f98708410e1040000b20002004370348200041e0006a200041306a220341086a2903003703002000200041c4006a3602682000200236025420002001360250200020032903003703582000200041c8006a36026c200041d8006a200028021c20042001200210b201200041f0006a24000bee0102057f027e230041d0006b220024004101109d012000410041f18d08410210990136021c200041286a2202107c20002903282106200028023421012000200028023036022020002001108202360224101e2105200041106a41b78c08410c104e200020063703382000200542018822053703282000200029031037033020002000411c6a22013602482000200041246a22033602442000200041206a2204360240200210d601200041086a41b78c08410c104e200020063703382000200537032820002000290308370330200020013602482000200336024420002004360240200210d601200041d0006a24000b920102037f027e230041406a220024004101109d012000410041f18d08410210990136020c200041106a107c200041186a22012802001041101e200041b78c08410c104e200041286a2001290300370300200020002903103703202000200029030037033020002000410c6a360238200041206a10d801101e210410642101102d2004102d2001102c109f02200041406b24000b090041b78c0810a1030b090041c38c0810a1030be30101057f230041306b22002400102b4102109d014100419c8c08411010990121012000410141aa8f084109109901360220200110412102200041186a41f283084112104e200041106a2000280218200028021c200041206a10ba01200028021421032000280210210410d901200210a80120042003105e1a101d200041086a41eb8c084111104e200028020c21022000280208210310d901200110a80120032002105e2101101d2000200110422201100536022c2000410036022820002001360224200041246a41878808410b109c0241878808410b108401101a1a200041306a24000b6101057f230041206b22002400102b109f014101109e014100108001210220004101360214200041086a200041146a2201109001200028020c2103200028020821042000280214109c01200120022004200310af02200110a301200041206a24000b4f01047f230041106b22002400102b4101109d01200041046a2201410010800122024101200010af022000280204200120024101200010af0220002802042101101a1a2001101a1a200041106a24000b9c0102057f017e230041206b22002400102b109f014101109e01410041d68b08410e1099012102200041013602142000200041146a22041090012000280204210120002802002000280214109c01200110b002210110d90110644100105b200241672001103f2202103f2201102e1a101d20042002200110a3022000200028021c36021020002000290214370208200041086a10a301200041206a24000b8a0102067f017e230041206b22002400102b109f014102109e014100419c8c08411010990121014101108001210420004102360214200041086a200041146a2202109001200028020c2103200028020821052000280214109c01200220012005200310b60220002802142101200028021c101e1064418002105b2004416720014167102f200041206a24000b900102067f017e230041206b22002400102b109f014102109e014100419c8c0841101099012101410141d68b08410e109901210420004102360214200041086a200041146a2205109001200028020c2102200028020821032000280214109c01200520012003200210b602200028021c20002802142102101e1064418002105b20044167200241671030200041206a24000b2201017f102b4101109d01410041c98e08411010950121001066200042001067102c0b3401037f102b4101109d01410041c98e0841101095012100106620001005210210682000106941fc9408419c950820021031102d0b7d01047f230041306b22002400102b4103109d01410041f18d0841021099012101410141ec8b08410810950121024102104721032000200136020c2000200336021020002002360214200042003703182000200041106a3602242000200041146a36022020002000410c6a360228200041186a10db01200041306a24000ba80101037f230041306b220024004102109d01410041f18d08410210990121024101104721012000200236020c200041186a107520002903185045044041a98108411c1002000b200028022421022000200028022036021020012001200210222001108302210120002002103e2001108002360214200042003703182000200041146a3602242000200041106a36022020002000410c6a360228200041186a10db01200041306a24000bb40101057f230041306b22002400102b4104109d01410041f18d0841021099012101410141ec8b0841081095012102410210472103410310472104200020013602082000200336020c20002004360210200020023602142000420037031820002000410c6a3602242000200041146a22013602202000200041086a2202360228200041186a220310db01200042003703182000200041106a3602242000200136022020002002360228200310db01200041306a24000bd50102067f017e230041306b22002400102b109f014101109e01410041f18d08410210990120004101360220200041206a41f88d08410c10850121012000280220109c0110432103200020011005220436021c20004100360218200020013602140340200220044f450440200041146a220110ad022102200141bf8908410810de0121062000200110fb0136022c20002006370320200020023602282003200041206a105d200028021c2104200028021821020c010b0b200041086a10cd01200342002000280208200028020c105f200041306a24000b8f0201047f230041406a22002400107f1a4103109d014100108001210141011080012102200041021047360214200020023602102000200136020c107f20001065360218103e21032000428182848890a0c080013702202000410036021c230041106b22012400200141003a000720012000411c6a22022d000b3a000c20012002280007360208200120022d00063a0006200120022f01043b010420012002280200360200200041346a200341002000410c6a200041106a200041146a200110b901200141106a240010432201200041186a10d1012002200136020820024113360204200241ad9108360200200020002802383602302000200028023436022c2000200028023c360228200210e901000b4601027f230041106b22002400102b4102109d01410041c98e084110109501210120004101104736020c20002001360208200041086a42002000410c6a1053200041106a24000b4601027f230041106b22002400102b4102109d01410041c98e084110109501210120004101104736020c20002001360208200041086a42002000410c6a104d200041106a24000b890102047f017e230041106b22002400102b4101109d0141742101410041ec8b08410810950110322104104321020340024020010440200141ec93086a2d00002203410374419094086a290300200483500d01200041086a200310bc0120022000280208200028020c104610c8010c010b200210a401200041106a24000f0b200141016a21010c000b000bc60102087f017e230041306b22002400102b4103109d01200041106a410041c091084107109901410141ec8b08410810950141021016106d2000280228210220002802242000280220200028021c20002802182000280214200031002d2000280210200031002c102d102c1033101a1a101a1a101a1a101a1a102c1043210120002002100536021820004100360214200020023602100340200041086a200041106a104420002802084101710440200028020c2001104b0c010b0b2001101a1a200041306a24000b2b00102b4103109d01410041c091084107109901410141ec8b08410810950141021016103441004aad10330b1c00102b4101109d01410041ec8b084108109501103541004aad10330b1c00102b4101109d01410041ec8b084108109501103641004aad10330b1c00102b4101109d01410041ec8b0841081095011037410047ad10330bfa0101047f230041306b22002400107f1a4102109d01410010800121012000410110800136020420002001360200107f20001065360208103e21032000418182840836000f2000418182840836020c230041206b220124002001106436020c200141003b01182001410036021020012000410c6a22022d00063a001c200120022f00043b011a20012002280000360214200041246a200341032000200041046a2001410c6a200141106a10b901200141206a240010432201200041086a10d10120022001360208200241123602042002419b9108360200200020002802283602202000200028022436021c2000200028022c360218200210e901000b2a02017f017e102b4102109d01410041c98e08411010950121004101101621011066200020011067102c0bef0102077f027e230041306b220024004103109d01410041df9008410610950121024101101621074102104721032000107c106520002903002108200041106a106620022007106d200028020c2205103e22012001200028022410222001108302210120022007200310431043105c027f200110a4024504402005103e0c010b02402000280208220210634504401043210310432104200028022021062008500440200620024200200120032004105c0c020b200620022008200120032004105c0c010b104321021043210320002802202001420020022003100a1a0b2005103e20011080020b102c200041306a24000be10101047f230041306b22002400107f1a4102109d01410010800121012000410110800136020420002001360200107f20001065360208103e21032000418182840836000f2000418182840836020c230041206b220124002001106436020c200141003b01182001410036021020012000410c6a22022d00063a001c200120022f00043b011a20012002280000360214200041246a200341012000200041046a2001410c6a200141106a10b901200141206a24002002200041086a10b802200020002802283602202000200028022436021c2000200028022c360218200210e901000b3b00102b4107109d01410041c98e084110109501410110474102108001410310474104108001410541e590084105109301410610800110ba02102d0b920101047f230041206b22002400102b4103109d01410041c98e08411010950121014101104721022000410241e59008410510930122034110763a0012200020033b01102000200236020c20002001360208200010433602142000106436021820001043220136021c200041086a2000410c6a200041146a200041186a2000411c6a200041106a200110541a200041206a24000bfd0102047f017e230041406a22002400102b109f014102109e01410041c98e084110109501210141011016210420004102360234200041346a41f48b0841041089012000280234109c012000200136023010fc0122031057450440200041286a41968408410d104e200041206a2000280228200028022c200041306a104f200041186a2000280220200028022420041050200028021c21012000280218210220002003100536023c20004100360238200020033602340340200041106a200041346a104420002802104101710440200041086a2002200120002802141058200028020c2101200028020821020c010b0b2002200110520b200041406b24000bab0102037f017e230041306b22002400102b4103109d01410041c98e08411010950121014101101621032000410241f88b08410e10930122024110763a002e200020023b012c20002001360228200041206a41c484084117104e200041186a20002802202000280224200041286a104f200041106a2000280218200028021c20031050200041086a200028021020002802142000412c6a10562000280208200028020c1052200041306a24000bea07020e7f017e230041a0016b22002400102b109f014106109e01410041c98e08411010950121064101104721034102108001210441031047210b4104108001210c4105108001210d2000410636029001200041f0006a210220004190016a220141f99008410910870110472105200141f9900841091086012107200141f9900841091088012108027f0240200141f9900841091087011016220e42015804404100200ea741016b0d021a0c010b41f99008410941c789084112108101000b41010b21092002200141f990084109108601360210200220093a000c200220083602082002200736020420022005360200200028029001109c01200028028001210720002d007c210820002802782105200028027421092000280270210a2000200c36026c2000200b36026820002004360264200020033602602000200636025c10432204200d1045200041d0006a41e58308410d104e200041c8006a20002802502000280254200041dc006a104f200041406b2000280248200028024c200041e0006a1051200041386a20002802402000280244200041e4006a1055200041306a2000280238200028023c200041e8006a1051200041286a20002802302000280234200041ec006a1055200028022c210220002802282103104310412101200a104a2001104b20092001104b02402005106345044020052001104b0c010b41042001109402200141eb8808410410141a0b2008200110c70120072001104b20022001104502402004105745044020002004100536027820004100360274200020043602700340200041206a200041f0006a10442000280220410171450d02200041186a2003200220002802241058200028021c2102200028021821030c000b000b200041106a20032002105920002802142102200028021021030b20032002105a210e200041f0006a10662006200e106d2000200028027c10412201100536029801410021022000410036029401200020013602900120004190016a220141be8808412010a1011092012103200141be8808412010a1012104200041086a20004190016a41be8808412010a10110850210ff010240024020002802084101710440200028020c2106200041003a009f0120012000419f016a410141be8808412010a10202400240024020002d009f010e020201000b41be88084120418e8008410d10f501000b410121020b20004190016a41be8808412010a1012101200028029801200028029401470d01200a200310fe01450d0220092004107b450d0220052006107b452002200847720d0220072001107b450d02200041a0016a24000f0b41be8808412041de8808410d10f501000b41be8808412041808008410e10f501000b418291084119104c000b4e02027f017e230041106b22002400102b4103109d01410041c98e084110109501210141011016210220004102104736020c20002001360208200041086a20022000410c6a1053200041106a24000b4e02027f017e230041106b22002400102b4103109d01410041c98e084110109501210141011016210220004102104736020c20002001360208200041086a20022000410c6a104d200041106a24000b950202067f017e102b4104109d01410041f18d0841021099012100410141c98e0841101095012102410210162106410310472103230041206b2201240020012003360214200120023602102001200637030820012000360218230041206b22002400200041186a200141086a220241086a2903003703002000200229030037031020022802102103200041086a10cd0120002802082104200028020c2105230041106b220124002001200041106a220041086a36020820012000410c6a36020c20012000290300370300230041206b22002400200041106a200141086a2903003703002000200241146a220236021c200020023602182000200536020420002004360200200020012903003703082000200310ab01000bd10202067f027e230041f0006b22002400102b109f014105109e01410041f18d0841021099012101410141c98e08411010950121024102101621074103104721044104108001210520004105360220200041206a41f09008410910890121032000280220109c012000200436021c2000200236021820002001360214101e2106200041086a200510cc01200020073703302000200336022c200020063703202000200028020822013602282000200041146a36024020002000411c6a36023c2000200041186a360238024020011057450d0042002106200028021c10d701450d0041f98708410e1040000b20002006370348200041e0006a200041306a220241086a2903003703002000200041c4006a3602682000200336025420002001360250200020022903003703582000200041c8006a36026c200041d8006a200028021420062001200310ae01200041f0006a24000bed0102097f017e230041306b22002400102b4108109d01410041f18d0841021099012103410141c98e08411010950121014102104721024103108001210441041047210541051080012106410641e59008410510930121074107108001210820002002360214200020013602102000200336020c2000200110412002103e2004200520062007200810ba0222093703182000200041146a22023602242000200041106a220336022020002000410c6a2204360228200041186a10db01418c8a0841041098022201200410d1012001200310cf012001200910d3012001200210d501200110431029200041306a24000b0b00410e41a6860810a2030b0b00411041b4860810a2030be202010d7f230041306b22012400107f1a4104109d0141001080012102410110800121091097012104410341868c08410c109801210a107f103e210520011065360208200141246a2107230041306b2200240041fe85084101200441ff017141056b220641ff01712204410349220b1b210c41012103200441024d0440200641027441fc0771220341f091086a2802002108200341e491086a28020021030b2000200c410f4100200b1b104e2000200536022820002000290300370220200041146a2205200041206a2206200210b701200041086a22022005200910b701200028020c2003200810b501200441014b0440200041286a200041106a2802003602002000200029020837032020022006200a10b8010b2007200028021036020820072000290208370200200041306a24002001410c6a2202200141086a10b802200120012802283602202001200128022436021c2001200128022c360218200210e901000ba103010d7f230041306b22012400107f1a4104109d01410010800121054101108001210c1097012104410341868c08410c1098012106107f103e210720011065360208200141246a210b230041306b22002400418d8608210241c7860821084116210941c4860821034103210a02400240024002400240200441ff0171220441016b0e080303020003020001040b4104210a4193860821020c020b4100210a4101210341002109410121080c020b4190860821020b41dd860841c78608200441056b41ff017141034922031b2108411d411620031b2109200221030b200020082009104e2000200736022820002000290300370220200041146a2202200041206a2207200510b701200041086a22052002200c10b701200028020c2003200a10b501200441056b41ff017141014b0440200041286a200041106a2802003602002000200029020837032020052007200610b8010b200b2000280210360208200b2000290208370200200041306a24002001410c6a2206200141086a10b802200120012802283602202001200128022436021c2001200128022c360218200610e901000b0b00410f4197860810a3030b0b00410d41f1850810a3030b920102027f027e230041306b22002400102b4103109d01410041ec8b08410810950121014101101621024102101621032000200136022c200041206a41a384084113104e200041186a200028022020002802242000412c6a104f200041106a2000280218200028021c20021050200041086a20002802102000280214200310502000280208200028020c1052200041306a24000b990202047f017e230041406a22002400102b109f014102109e01410041ec8b084108109501210141011016210420004102360234200041346a41e48b0841081089012000280234109c012000200136023010fc012103200041286a41b68408410e104e200041206a2000280228200028022c200041306a104f200041186a2000280220200028022420041050200028021c21012000280218210202402003105745044020002003100536023c20004100360238200020033602340340200041106a200041346a10442000280210410171450d02200041086a2002200120002802141058200028020c2101200028020821020c000b000b200020022001105920002802042101200028020021020b200220011052200041406b24000b7602027f017e230041206b22002400102b4102109d01410041ec8b08410810950121014101101621022000200136021c200041106a41ef84084111104e200041086a200028021020002802142000411c6a104f20002000280208200028020c20021050200028020020002802041052200041206a24000b0b00411441db840810a4030b0b0041124184840810a4030b4e01027f230041106b22002400102b4100109d01200041086a10a902220110860210850210ff012000280208410171450440200141de8808410d10f801000b200028020c109f02200041106a24000b1200102b4100109d0110aa02108602101a1a0b960102097f017e230041306b22002400102b4100109d01200041086a10a702200041186a210320002802082104200028020c108d022105410121020340200220054b450440200320042002109202200028022c200028022820002903182000280224200028022010432201104b2001108f0220011090022001104920011091022001101a1a200241016a21020c010b0b200041306a24000bc40102047f017e230041306b22002400102b4101109d01410041c8900841051098012101200041106a10a70202402001450d00200028021021022000280214108d022001490d00200041186a20022001109202200028022c21012000280228200029031820002802242000280220101a1a109f02102d102c2000200110053602202000410036021c200020013602180340200041086a200041186a104420002802084101710440200028020c101a1a0c010b0b200041306a24000f0b41ec930841121002000b6d01067f230041106b22012400102b4100109d01200141086a10a70220012802082104200128020c2205108d0221024101210003402003200020024b7245044020042000108e02108902200020024f2103200020002002496a21000c010b0b20054100108a02200141106a24000bcb0402097f017e230041d0016b220024004101109d012000410041f18d084102109901360224200041286a107c101e2109200041186a41b78c08410c104e2000200942018822093703382000200028021c22013602442000200028021822023602402000200041246a22053602482000416736025441674101410010071a20004200370358200020093703602000280234210320002903282109024020002802302204106345044020002003360294012000200436029001200020093703880120004201370274200020013602702000200236026c2000200041d4006a2206360284012000200041d8006a2207360280012000200041e0006a220836027c20002005360268200042013703b001200020004194016a22043602ac01200020004190016a22053602a801200020093703a0012000200041cc006a22033602c801200020033602c4012000200136029c012000200236029801200020063602c001200020073602bc01200020083602b801200041b0016a21032009500440200041086a200220012005200410ac01200028020c21012000280208210210a80121042003200028022420042002200110ed010c020b200041106a200220012000280224200041a0016a10ad0120002802142101200028021021022003106610a8012002200110ed010c010b200020013602b401200020023602b00120004201370298012000200041246a3602ac012000200041d4006a3602a8012000200041d8006a3602a4012000200041e0006a3602a00120004198016a200028022420032002200110ed010b200041d0016a24000b0b0041f58908411710a5030bd80602077f017e230041c0016b220024004101109d012000410041f18d08410210990136022c200041206a10712000280220210420002802242103101e210710432105200041186a41014100104e2000200536025420004111360250200041b38f0836024c20002007420188220737033820002003360234200020043602302000200028021c220136024420002000280218220236024020002000412c6a3602482000416736025c2005200041dc006a10c50120004200370360200020073703682000200336027420002004360270024020044101710440200041d8006a2104024002400240200310600e020102000b200020013602ac01200020023602a801200020043602a401200020043602a0012000411136029001200041b38f0836028c012000200041f4006a360288012000200041dc006a36029c012000200041e0006a360298012000200041e8006a360294012000200220012000412c6a200310b10120002802042101200028020021022000418c016a106610a8012002200110ed010c030b200020013602a0012000200236029c012000411136028c01200041b38f08360288012000200041dc006a360298012000200041e0006a360294012000200041e8006a3602900110a801210320004188016a200028022c20032002200110ed010c020b200041f8006a2003107620002903782107200020004184016a220536029c01200020004180016a2206360298012000200737039001200020043602b801200020043602b401200041113602a401200041b38f083602a0012000200136028c0120002002360288012000200041dc006a3602b0012000200041e0006a3602ac012000200041e8006a3602a801200041a0016a21032007500440200041086a200220012006200510ac01200028020c21012000280208210210a80121042003200028022c20042002200110ed010c020b200041106a20022001200028022c20004190016a10ad0120002802142101200028021021022003106610a8012002200110ed010c010b200020013602a401200020023602a0012000411136028c01200041b38f083602880120002000412c6a36029c012000200041dc006a360298012000200041e0006a360294012000200041e8006a3602900120004188016a200028022c20032002200110ed010b200041c0016a24000b980102027f027e230041d0006b220024004101109d012000410041f18d084102109901360214200041086a107120002903082103101e210210432101200041014100104e200020013602302000411136022c200041b38f083602282000200242038022023703202000200237033820002003370318200020002903003703402000200041146a360248200041186a10ec01200041d0006a24000b900102037f027e230041d0006b220024004103109d01410041f18d08410210990121014101101621034102101621042000200136020c200041106a2201107c10432102200041014100104e200020023602402000411636023c200041fa8f0836023820002004370330200020033703202000200029030037032820002000410c6a360248200110ee01200041d0006a24000bd50102057f027e230041e0006b22002400109f014104109e01410041f18d08410210990121014101108001210241021016210541031016210620004104360210200041106a220341ed8d08410410890121042000280210109c012000200136020c200041d0006a107c2000200210cc0120002802002101200041386a41e90741ea0710a60210b702200041186a200041d8006a290300370300200020063703302000200436022c20002001360228200020053703202000200029035037031020002000410c6a360248200310ee01200041e0006a24000bb50202067f037e230041d0006b22002400102b109f014103109e01410041f18d08410210990121024101108001210441021016210720004103360218200041186a41989008411210850121012000280218109c0120002002360208104321022000200110052203360214200041003602102000200136020c0340200320054b04402000410c6a220110ad022103200141bf8908410810de0121062000200110fb0136022420002003360220200020063703182002200041186a105d20002802142103200028021021050c010b0b101e21062000200410cc0120002903002108200041286a41d10f41d20f10a60210b702200020083703402000200236021c20004101360218200020073703202000200620077d42097e420a803703382000200041086a360248200041186a10ec01200041d0006a24000bb90102047f017e230041306b22002400102b4104109d01410041f18d08410210990121014101109a01210241021016210441031047210320002001360214200041246a200041146a20022004200310b4022000200028022c36022020002000290224370218200041086a200041186a10df012000200028020c22013602282000200028020822023602240240200110604101460d00200210a5020d0041aa9008411e104c000b200041246a2001109b0210ae02200041306a24000bb70202057f017e230041406a22002400102b4104109d01410041f18d08410210990121024101109a0121014102101621054103104721032000200236021c200041346a2000411c6a2001104120052003103e10b4022000200028023c36023020002000290234370228200041106a200041286a10dd0120002000280214220236022420002000280210220436022002400240200210604101470440200410a502450d010b200041206a2002109b0210ae02200041346a2000411c6a20012005200310b4022000200028023c36023020002000290234370228200041086a200041286a10dd012000200028020c2201360238200020002802082203360234200110604101470440200310a502450d020b200041346a2001109b0210ae02200041406b24000f0b41aa9008411e104c000b41aa9008411e104c000bb70202057f017e230041406a22002400102b4104109d01410041f18d08410210990121024101109a0121014102101621054103104721032000200236021c200041346a2000411c6a2001104120052003103e10b4022000200028023c36023020002000290234370228200041106a200041286a10df0120002000280214220236022420002000280210220436022002400240200210604101470440200410a502450d010b200041206a2002109b0210ae02200041346a2000411c6a20012005200310b4022000200028023c36023020002000290234370228200041086a200041286a10df012000200028020c2201360238200020002802082203360234200110604101470440200310a502450d020b200041346a2001109b0210ae02200041406b24000f0b41aa9008411e104c000b41aa9008411e104c000be10202067f017e230041206b22002400102b109f014101109e01410041f18d084102109901210120004101360210200041106a220341a18f08410910850121022000280210109c012000200136020020032000200210b5022000200028021836020c20002000290210370204200041046a10e301220110c101220310a402044041c38a0841191098022205200310d0012005104310290b200110bf0110ab0210432103200020021005220136020c20004100360208200020023602040340200120044d450440200041046a220110fa012102200141bf8908410810de012106200110fb011a2002106321011066210402402001450440200420022006106721010c010b103f21012004106841fc9408200110380b2000200136021c20002002360218200020063703102003200041106a10c001200028020c2101200028020821040c010b0b41b58a08410e10980222012003109602200110431029200041206a24000b910101047f230041206b22002400102b109f014101109e01410041f18d084102109901210120004101360214200041146a220241a18f08410910850121032000280214109c01200020013602042002200041046a2201200310b502200210e00120022001200310b5022000200028021c36021020002000290214370208200041086a10e30110bf0110ab02200041206a24000ba30102057f017e230041106b22002400102b109f014101109e01410041f18d084102109901210320004101360204200041046a220141a18f08410910850121022000280204109c012000200336020020012000200210b502200110e00120012000200210b502200028020c21022000280208210320002802042101106f10d90110a80121042001280200200420032002105e1a101d106a10bf0110ab02200041106a24000b0b0041c48f08412610a5030ba30102087f017e230041306b22002400200041186a220110a001200028021c2000280220109b012001107c20002903182108200028022021022000200028022436021420022008200041146a10a802200041086a10a702200028020c21032000280208109a022105200028021421061043210720002002360224200020053602202000200736022c200020063602282000200837031820032001108c02200041306a24000bea0302097f017e230041f0006b22002400200041d8006a220110a001200028025c2000280260109b01109f014100109e0120004100360258200141d98e08410610890121012000280258109c0141e68908410f10980221022000200110053602602000410036025c200020013602580340200041186a200041d8006a1044200028021841017104402002200028021c10c8010c010b0b200210431029200041106a10712000280214210102402000280210410171044020002001100536022c2000410036022820002001360224200041d4006a2102200041386a21010340200041306a200041246a107320002802304101470d02200041d0006a200141086a2903002209370300200020012903003703482009a722034200200210a802200010a70220002802042104200028020041b38f081099022106200028025421071043210820002003360264200020063602602000200836026c20002007360268200042003703582004200041d8006a108c020c000b000b20002001360230106c4200200041306a10a802200041086a10a702200028020c2101200028020841b38f081099022103106c2104200028023021051043210620002004360264200020033602602000200636026c20002005360268200042003703582001200041d8006a108c020b200041f0006a24000b920101057f230041106b22002400200041046a220110a0012001419490084104108301419490084104108f012102200141909008410410910121032000280208200028020c109b01109f014100109e0120004100360200200041d98e08410610890121042000280200109c0141a88b0841191098022201200210ce012001200310d001200120041095021029200041106a24000b5901047f230041106b22002400200010a00120002802042000280208109b0120001075200028020810412102200028020c103e210341a88b0841191098022201200210d4012001200310d001200110431029200041106a24000bf10202097f027e230041e0006b22002400200041c8006a220410a001200028024c2000280250109b012000106a220110c10122023602102002106410fe01450440106c22024200200041106a10a802200041086a10a702200028020c21032000280208109a022106200028021021071043210820002002360254200020063602502000200836025c200020073602582000420037034820032004108c020b20002001100536021c2000410036021820002001360214200041c4006a2102200041286a21010340200041206a200041146a10732000280220410147450440200041406b2203200141086a290300220937030020002001290300220a3703382009a7200a200210a802200010a702200028020421052000280200109a02210720032802002103200029033821092000280244103e21081043210420002003360254200020073602502000200436025c20002008360258200020093703482005200041c8006a108c020c010b0b200041e0006a24000bb20c02087f017e230041b0016b22002400024010c2012204108602220110570d00200020011041220110053602940120004100360290012000200136028c012000418c016a2201419b8008411910a10121022001419b8008411910f30121031043210103402003044020012000418c016a419b8008411910a1011045200341016b21030c010b0b0240024002402000280294012000280290014604402004108902200041246a200210c4012000280244450d042000418c016a2203200210c40120002802ac01450d0402400240200341958e08411210c301450440200341f58908411710c3010d01200341a78e08411910c301450d02200041d4006a2202200110a201109f01200241f18d0841021082012101200241c98e084110108301108d012103200241c08e08410910910121022000280258200028025c109b01200020013602482000200336024c2000200236025020004180016a200041c8006a10b10220004200370368200020002802800136027820002000290284013703602000200041d0006a3602742000200041cc006a360270200041e0006a10eb01000b109f014100109e012000410036028001200041e0006a2103230041106b22022400027f20004180016a2204108c01220541ebde0147410020051b45044041002105200441d98e084106108a0121042002410c6a0c010b027f200428020041bc95082802004e044010430c010b200441d98e0841061086010b21042002200536020c41012105200241086a0b2004360200200320053602002003200228020c36020420032002280208360208200241106a2400200028028001109c01200028026821042000280264210220002802602105200110052101109f0141002001109b0102402005410171044041e68e084105104610fd0121012000200241187420024180fe03714108747220024108764180fe037120024118767272360260200120034104104610452001200410450c010b41df8e084107104610fd012201200210041a0b200110a4010c060b200110052101109f0141002001109b01200041e0006a2202107c20002903602108200028026821012000200028026c360280012001200820004180016a10a802200041086a10a702200028020c21032000280208109a0221052000280280012106104321072000200136026c2000200536026820002007360274200020063602702000200837036020032002108c020c050b2000418c016a2203200210c40120002802ac01450d04200341ad9108411310c3010440109f014100109e0120004100360254200041e0006a200041d4006a108e012000280254109c012000280268210320002802602000200110053602880120004100360284012000200136028001109f0120004180016a41ea900841061082012104200028028401200028028801109b01200041106a107e2000280210210141017104402000280214210220011063450d05200210a402450d052004200210dc010c050b10a902200110840210870210aa021089020c050b2000418c016a2203200210c40120002802ac01450d042003419b9108411210c3010440109f014100109e0120004100360254200041e0006a200041d4006a108b012000280254109c01200028026821022000280264210320002802602000200110053602880120004100360284012000200136028001109f0120004180016a41ea900841061082012105200028028401200028028801109b014101710440200041186a107e200028021c210120002802181063450d04200110a402450d042005200110dc010c040b10a902200310870210aa021089020c050b2002200110b902450d042000418c016a2203200210c40120002802ac01450d04200341c79108411510c3010440109f014100109e012000410036028001200041e0006a20004180016a108e01200028028001109c01200028026821022000280260200110052101109f0141002001109b0110aa02210141017104402001200210271a0c060b20011089020c050b2000418c016a2203200210c40120002802ac01450d042002200110b902450d042003200210c40120002802ac01450d042003200210c40120002802ac010d010c040b419b8008411941808008410e10f501000b41eb8e0841361002000b10aa02200210271a0c010b10aa02200310271a0b200041b0016a24000b9e0101027f230041306b22062400027f2001500440200641106a2005410d104e200641086a200628021020062802142000104f20062802082107200628020c0c010b200641286a20042003104e200641206a2006280228200628022c2000104f200641186a200628022020062802242001105020062802182107200628021c0b210020062007200020021051200628020020062802041052200641306a24000b3001017f230041106b22032400200341086a2002410c104e2000200329030837020420002001360200200341106a24000b840102047f017e230041206b22012400102b109f014101109e01410041f18d084102109901210220014101360210200141106a220341f88d08410c1085012001280210109c012001200236020c20012000410c104e2001290300210510f9012102200120053702182001200236021420012001410c6a360210200310da01200141206a24000bfa0202077f017e230041306b22032400102b109f014102109e01410041c0910841071099012104410141c98e08411010950121052003410236021c2003411c6a220641dc910841051085012102200328021c109c012003200536021820032004360214200320021005360224200341003602202003200236021c200341086a2107230041406a22022400200241286a20012000104e200241206a2002280228200228022c200341186a104f200241186a20022802202002280224200341146a10ba01200228021c210420022802182105200241386a200641086a280200360200200220062902003703300340200241306a10bb0141ff01712208450d002008410d4604402007200436020420072005360200200241406b240005200241106a200810bc01200241086a200520042002280210200228021410bd01200228020c2104200228020821050c010b0b2003290308210910432102200320093702282003200236022420034115360220200341c7910836021c200610e701000b7801047f230041106b22032400102b4101109d01410041ec8b0841081095012104230041106b22022400200241086a20012000104e20022002280208200228020c200410b60120022802042104200341086a2205200228020036020020052004360204200241106a24002003280208200328020c10ea01000b950302067f027e230041e0006b22022400102b109f014106109e01410041ec8b08410810950121044101101621084102108001210641031016210941041080012107410541f88b08410e109301210320024106360254200241d4006a41f48b0841041089012002280254109c01200220034110763a0052200220033b015010fc012105200241c8006a20012000104e200241406b2002280248200228024c200410b601200241386a2002280240200228024420081050200241306a2002280238200228023c20061058200241286a2002280230200228023420091050200241206a2002280228200228022c20071058200241186a20022802202002280224200241d0006a1056200228021c21032002280218210402402005105745044020022005100536025c20024100360258200220053602540340200241106a200241d4006a10442002280210410171450d02200241086a2004200320022802141058200228020c2103200228020821040c000b000b200220042003105920022802042103200228020021040b200420031052200241e0006a24000bae0102047f027e230041406a22022400102b4104109d01410041f18d08410210990121034101109a0121044102101621064103104721052002200336020c101e2107200241106a22032002410c6a20042006200510b40220022902142106200228021021041043210520022004360238200220053602302002200136022c2002200036022820024280ade20437032020022006370318200220074280dac4097d370310200310ef01200241406b24000b0bdb140600418080080b34696e70757420746f6f206c6f6e67696e76616c69642076616c756573657269616c697a6572206465636f6465206572726f723a200041d480080bd606696e636f7272656374206e756d626572206f662045534454207472616e736665727345474c442d303030303030ffffffd80000000000000000ffffffdd756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747363616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e656761746976657472616e736665722065786563757465207265717569726573207061796d656e74455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e46544372656174654368616e67654f776e657241646472657373455344544d65746144617461557064617465455344544e4654416464555249455344544d6f64696679526f79616c74696573455344545365744e657755524973455344544e465455706461746541747472696275746573455344544d657461446174615265637265617465455344544d6f6469667943726561746f7266616c73657472756563616e467265657a6563616e5769706563616e506175736563616e5472616e736665724e4654437265617465526f6c6563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c6573757064617465546f6b656e4944726567697374657244796e616d69634e46545346544d4554416368616e6765546f44796e616d69637365745370656369616c526f6c65756e5365745370656369616c526f6c65464e477265676973746572416e64536574416c6c526f6c65737265676973746572416e64536574416c6c526f6c657344796e616d6963697373756569737375654e6f6e46756e6769626c65697373756553656d6946756e6769626c6543425f434c4f535552450041b387080b01010041c787080bc50c02ffff4d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e7366657273796e6320726573756c74696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a204553445420657870656374656445474c4473696e676c652045534454207061796d656e742065787065637465642e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e6774687661722061726773696e707574206f7574206f662072616e676563616c6c6261636b5f6461746163616c6c6261636b5f726573756c7472657472696576655f66756e64735f63616c6c6261636b73656e646372656174656c617374497373756564546f6b656e6c6173744572726f724d65737361676562616c616e6365735f61667465726261636b5f7472616e73666572735f65676c645f6576656e746261636b5f7472616e73666572735f6d756c74695f6576656e746163636570745f66756e64735f73796e635f726573756c746563686f5f617267756d656e74735f73796e635f726573756c746173796e635f63616c6c5f6576656e745f63616c6c6261636b6261636b5f7472616e73666572736f70745f617267736f757263655f616464726573736e65775f75726973746f6b656e5f6964757269736e65775f617474726962757465736e756d5f646563696d616c73746f6b656e5f747970656368696c645f73635f6164647265737363616c6c5f636f756e74736163636570745f66756e647372656a6563745f66756e64736563686f5f617267756d656e747372657472696576655f66756e64736765745f6f776e65725f6164647265737372657472696576655f66756e64735f6d756c74696163636570745f66756e64735f6563686f5f7061796d656e7472657472696576655f66756e64735f776974685f7472616e736665725f6578656372657472696576655f72656365697665645f66756e64735f696d6d6564696174656c7961726773746f746f6b656e7061796d656e745f617267736163636570745f66756e64735f66756e636563686f5f617267735f63616c6c6261636b73656e645f66756e64735f74776963655f63616c6c6261636b63625f616d6f756e74746f6b656e5f6964656e746966696572726573756c74737563636573736572726f726e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e74726163747472616e73666572736e65775f6f776e65727472616e736665725f63616c6c6261636b72657472696576655f66756e64735f6261636b5f7472616e73666572735f63616c6c6261636b7468655f6f6e655f63616c6c6261636b72657472696576655f657364745f63616c6c6261636b6172673261726731746f6b656e5f7061796d656e745f617267734f6e6c79206f6e652045534454207061796d656e74206578706563746564696e6465786e66745f69737375655f63616c6c6261636b6e66745f6964636f6c6f7263616c6c6572617267756d656e747361747472735f6172676f7269675f6174747220213d206465636f6465645f617474727366745f69737375655f63616c6c6261636b657364745f69737375655f63616c6c6261636b616464726573736368616e67655f726f6c65735f63616c6c6261636b726f6c65730000000d030200100302001303020003000000030000000400000045534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e46545570646174654174747269627574657345534454526f6c654e465441646455524945534454526f6c654e4654526563726561746545534454526f6c654d6f64696679526f79616c7469657345534454526f6c654d6f6469667943726561746f7245534454526f6c655365744e6577555249455344545472616e73666572526f6c650102030405060708090a0b0c696e646578206f7574206f662072616e676570616e6963206f6363757272656400419894080b5a0100000000000000020000000000000004000000000000000800000000000000100000000000000020000000000000004000000000000000800000000000000000020000000000000001000000000000000400000000000000080041f894080b0438ffffff", + "code": "0061736d0100000001a3022760000060027f7f0060017f017f60017f0060037f7f7f017f6000017f60027f7f017f60037f7f7f0060047f7f7f7f0060057f7f7f7f7f0060027f7e0060057f7f7e7f7f017f60017f017e60047f7f7f7f017f60037f7f7f017e60037f7e7f0060067f7f7f7f7f7f0060067e7f7f7f7f7f017f60057f7f7f7e7f006000017e60077e7f7f7f7f7f7f017f60017e0060077f7e7f7f7f7f7f0060037f7f7e017f60047f7f7f7e0060077f7f7f7f7f7f7f017e60067f7e7f7f7f7f0060057f7f7e7f7f0060017e017f600b7f7f7e7f7f7f7f7f7f7f7f0060047f7f7e7f00600b7f7f7f7f7f7f7f7f7e7e7f017f60027f7f017e60067f7f7f7e7f7f0060077f7f7e7f7e7f7f0060057e7f7f7f7f017f60077f7f7f7f7f7f7f0060027e7f0060047f7e7f7f0002c10e4603656e760e626967496e74536574496e743634000a03656e7609626967496e74416464000703656e760b7369676e616c4572726f72000103656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000603656e76106d4275666665724765744c656e677468000203656e7619626967496e74476574556e7369676e6564417267756d656e74000103656e760f6d4275666665725365744279746573000403656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000b03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874001103656e762a6d616e61676564457865637574654f6e44657374436f6e74657874576974684572726f7252657475726e001103656e760d6d616e6167656443616c6c6572000303656e76106d616e61676564534341646472657373000303656e761c626967496e744765744553445445787465726e616c42616c616e6365001203656e76176d616e616765644765744261636b5472616e7366657273000103656e7609626967496e744e6577001c03656e76176d616e6167656447657445534454546f6b656e44617461001d03656e76176d616e6167656447657445534454546f6b656e54797065001e03656e760d626967496e744973496e743634000203656e760e626967496e74476574496e743634000c03656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000303656e7612626967496e7447657443616c6c56616c7565000303656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000303656e76126d427566666572476574417267756d656e74000603656e76126d427566666572417070656e644279746573000403656e76126d616e616765645369676e616c4572726f72000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000c03656e7611676574417267756d656e744c656e677468000203656e760f6765744e756d417267756d656e7473000503656e76196d616e6167656447657443616c6c6261636b436c6f73757265000303656e760d6d42756666657246696e697368000203656e7609626967496e74537562000703656e761b6d616e616765645472616e7366657256616c756545786563757465000b03656e762c6d616e616765644d756c74695472616e73666572455344544e4654457865637574655769746852657475726e000b03656e76186d616e616765644765744f726967696e616c547848617368000303656e760a6765744761734c656674001303656e760f636c65616e52657475726e44617461000003656e76166d616e616765644372656174654173796e6343616c6c001f03656e76146d427566666572436f707942797465536c696365000d03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000c03656e7609626967496e74436d70000603656e7609626967496e744d756c000703656e760a626967496e7454446976000703656e76196d42756666657246726f6d426967496e74556e7369676e6564000603656e76176d427566666572546f426967496e74556e7369676e6564000603656e76126d42756666657253746f726167654c6f6164000603656e76136d42756666657253746f7261676553746f7265000603656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000a03656e760666696e697368000103656e760f6d616e6167656457726974654c6f67000103656e76156d616e61676564437265617465436f6e7472616374001403656e760e636865636b4e6f5061796d656e74000003656e7614626967496e7446696e697368556e7369676e6564000303656e7616736d616c6c496e7446696e697368556e7369676e6564001503656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001403656e76166d616e6167656455706772616465436f6e7472616374001603656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001603656e761667657443757272656e74455344544e46544e6f6e6365000e03656e7611676574455344544c6f63616c526f6c6573000c03656e7614736d616c6c496e7446696e6973685369676e6564001503656e76136d616e6167656449734553445446726f7a656e001703656e76136d616e61676564497345534454506175736564000203656e761c6d616e616765644973455344544c696d697465645472616e73666572000203656e761776616c6964617465546f6b656e4964656e746966696572000203656e7618626967496e7447657445787465726e616c42616c616e6365000103656e760f6d4275666665724765744279746573000603656e760a626967496e745369676e000203656e76136d42756666657247657442797465536c696365000d03656e76096d4275666665724571000603656e76106d616e616765644173796e6343616c6c000803f302f1020205010202050101060201010201010f07081808010f1908080208072021220301231a0505170303050205180d00030305010503020105020501060301030502020804040404020404040102040404010104020404040404050402010303030003040103030702070508100109091b101b100b09080708070724080201090507020102050401080101080101080901030101010101010a080313020306010301030e0202010301020303030303010103030309030501010e0104080806060702020202020601060602020202020103010702060125010708010201010602050204030107090a07020202030f0505030303030201080601012612070108070106190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a07030101010105030100030616037f01418080080b7f00418996080b7f00419096080b0783176c066d656d6f7279020004696e697400c7020973656e645f65676c6400c802136563686f5f617267756d656e74735f73796e6300c902196563686f5f617267756d656e74735f73796e635f747769636500ca0219666f72776172645f73796e635f6163636570745f66756e647300cb0221666f72776172645f73796e635f6163636570745f66756e64735f72685f65676c6400cc0228666f72776172645f73796e635f6163636570745f66756e64735f72685f73696e676c655f6573647400cd0227666f72776172645f73796e635f6163636570745f66756e64735f72685f6d756c74695f6573647400ce0223666f72776172645f73796e635f6163636570745f66756e64735f776974685f6665657300cf0223666f72776172645f73796e635f6163636570745f66756e64735f7468656e5f7265616400d0021b666f72776172645f73796e635f72657472696576655f66756e647300d1022c666f72776172645f73796e635f72657472696576655f66756e64735f776974685f6163636570745f66756e6300d202116163636570745f66756e64735f66756e6300d30228666f72776172645f73796e635f6163636570745f66756e64735f6d756c74695f7472616e7366657200d4020f6563686f5f617267735f6173796e6300d5021a666f72776172645f6173796e635f6163636570745f66756e647300d60227666f72776172645f6173796e635f6163636570745f66756e64735f68616c665f7061796d656e7400d70224666f72776172645f6173796e635f6163636570745f66756e64735f776974685f6665657300d8021c666f72776172645f6173796e635f72657472696576655f66756e647300d9021a666f72776172645f6173796e635f72656a6563745f66756e647300da021073656e645f66756e64735f747769636500db022073656e645f6173796e635f6163636570745f6d756c74695f7472616e7366657200dc022073656e645f6173796e635f72656a6563745f6d756c74695f7472616e7366657200dd0220666f72776172645f7472616e73665f657865635f6163636570745f66756e647300de022b666f72776172645f7472616e73665f65786563755f6163636570745f66756e64735f776974685f6665657300df0226666f72776172645f7472616e73665f657865635f6163636570745f66756e64735f747769636500e0022e666f72776172645f7472616e73665f657865635f6163636570745f66756e64735f72657475726e5f76616c75657300e1021e7472616e73665f657865635f6d756c74695f6163636570745f66756e647300e2021e7472616e73665f657865635f6d756c74695f72656a6563745f66756e647300e302126368616e67654f776e65724164647265737300e4020f6465706c6f795f636f6e747261637400e502146465706c6f795f74776f5f636f6e74726163747300e602186465706c6f795f7661756c745f66726f6d5f736f7572636500e7020c757067726164655661756c7400e80219757067726164655f7661756c745f66726f6d5f736f7572636500e9021667657446756e6769626c654573647442616c616e636500ea021267657443757272656e744e66744e6f6e636500eb020973656e645f6573647400ec021373656e645f657364745f776974685f6665657300ed020f73656e645f657364745f747769636500ee021f73656e645f657364745f6469726563745f6d756c74695f7472616e7366657200ef021469737375655f66756e6769626c655f746f6b656e00f0020a6c6f63616c5f6d696e7400f1020a6c6f63616c5f6275726e00f202146765745f657364745f6c6f63616c5f726f6c657300f302136765745f657364745f746f6b656e5f6461746100f4020e69735f657364745f66726f7a656e00f5020e69735f657364745f70617573656400f6021869735f657364745f6c696d697465645f7472616e7366657200f7021976616c69646174655f746f6b656e5f6964656e74696669657200f8021273796e635f63616c6c5f66616c6c69626c6500f90231666f72776172645f73796e635f66616c6c69626c655f6163636570745f66756e64735f6d756c74695f7472616e7366657200fa0228666f72776172645f73796e635f72656a6563745f66756e64735f6d756c74695f7472616e7366657200fb02117472616e736665725f66616c6c69626c6500fc02197472616e736665725f657865637574655f66616c6c69626c6500fd02097366745f697373756500fe020f6765745f6e66745f62616c616e636500ff02076275795f6e6674008003096e66745f69737375650081030a6e66745f637265617465008203126e66745f6372656174655f636f6d706163740083030c6e66745f6164645f75726973008403156e66745f7570646174655f617474726962757465730085031d6e66745f6465636f64655f636f6d706c65785f61747472696275746573008603106e66745f6164645f7175616e74697479008703086e66745f6275726e0088031b7472616e736665725f6e66745f7669615f6173796e635f63616c6c008903187472616e736665725f6e66745f616e645f65786563757465008a030f6372656174655f616e645f73656e64008b030d7365744c6f63616c526f6c6573008c030f756e7365744c6f63616c526f6c6573008d031369737375655f64796e616d69635f746f6b656e008e031569737375655f746f6b656e5f616c6c5f726f6c6573008f03116368616e67655f746f5f64796e616d69630090030c7570646174655f746f6b656e009103106d6f646966795f726f79616c746965730092030c7365745f6e65775f757269730093030e6d6f646966795f63726561746f72009403116d657461646174615f72656372656174650095030f6d657461646174615f7570646174650096030f6c617374497373756564546f6b656e009703106c6173744572726f724d6573736167650098030d63616c6c6261636b5f646174610099031663616c6c6261636b5f646174615f61745f696e646578009a0313636c6561725f63616c6c6261636b5f64617461009b031c666f72776172645f70726f6d6973655f6163636570745f66756e6473009c031e666f72776172645f70726f6d6973655f72657472696576655f66756e6473009d0318666f72776172645f7061796d656e745f63616c6c6261636b009e0320666f72776172645f7061796d656e745f6761735f666f725f63616c6c6261636b009f032070726f6d6973655f7261775f73696e676c655f746f6b656e5f746f5f7573657200a0031870726f6d6973655f7261775f73696e676c655f746f6b656e00a1031a70726f6d6973655f7261775f6d756c74695f7472616e7366657200a20325666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c656761637900a30331666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c65676163795f72657365745f747769636500a4032b666f72776172645f73796e635f72657472696576655f66756e64735f62745f6c65676163795f747769636500a50324666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c746900a6032a666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c74695f747769636500a70330666f72776172645f73796e635f72657472696576655f66756e64735f62745f6d756c74695f74776963655f726573657400a8032d666f72776172645f70726f6d6973655f72657472696576655f66756e64735f6261636b5f7472616e736665727300a9031772657472696576655f66756e64735f63616c6c6261636b00aa03117472616e736665725f63616c6c6261636b00ab03107468655f6f6e655f63616c6c6261636b00ac031672657472696576655f657364745f63616c6c6261636b00ad032672657472696576655f66756e64735f6261636b5f7472616e73666572735f63616c6c6261636b00ae030863616c6c4261636b00af030a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01060adfba02f1021601017f1047220142001000200120012000100120010b1901017f41c0950841c0950828020041016b220036020020000b0900200020011002000b0f01017f10032201200010041a20010b5801027f230041206b22012400104b210220012000100536021c20014100360218200120003602140340200141086a200141146a104c200128020841017104402002200128020c1049104d0c010b0b200141206a240020020b080041014100104e0b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410721a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410181a200241106a24000b1101017f104722022000200110071a20020b0c00200010472200100620000b3002017f017e200128020810492102200129030021032000200128020c104636020c20002003370300200020023602080b0a0020001052200110530b0f01017f104722012000102b1a20010b5101027f230041106b22022400200220001005220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410181a2001200010041a200241106a24000b0900200020011048000b1500200020012002410b41ab8308419e830810b0030b180020012002104e21012000104b360204200020013602000b17002002200310d70120002002360204200020013602000b17002002200310dc0120002002360204200020013602000b17002002200310d60120002002360204200020013602000b1801017e10234162100c416210ae012000200110671a10240b1500200020012002411241c3830841b6830810b0030ba00202017f017e230041e0006b22072400200741c8006a41d58308410d1056200741406b2007280248200728024c20001057200741386a2007280240200728024420011059200741306a2007280238200728023c2002105d200741286a2007280230200728023420031059200741206a2007280228200728022c2004105d200741186a200728022020072802242005105e200728021c21002007280218210102402006105f45044020072006100536025c20074100360258200720063602540340200741106a200741d4006a104c2007280210410171450d02200741086a2001200020072802141060200728020c2100200728020821010c000b000b200720012000106120072802042100200728020021010b200120001062200741e0006a24000b1e00104b1a200220032802001049104d20002002360204200020013602000b3c01017f104b1049210420032d0000200410d00120032d0001200410d00120032d0002200410d00120022004104d20002002360204200020013602000b070020001005450b17002002200310d10120002002360204200020013602000b2301017f104b22034101410010071a20022003104d20002002360204200020013602000b5402017f017e230041106b2202240010234162100c416210ae012000200110672100102420022000104a2200100536020c2002410036020820022000360204200241046a41f78708410b10e701200241106a24000b1200200020014200200220032004200510640b4801027f230041106b22072400104b210820011049210120072003104636020c20072002370300200720013602082008200710662000200820042005200610081a200741106a24000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210071a200141106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437020420002003411010181a200341106a24000b1500200020012002200320041047220110091a20010b280020002001200220032004200510472203100a2202200320021b360204200020024100473602000b0c01017f10472200100b20000b0c01017f10472200100c20000b2801027f104721032001100521042000106c2001106d41c4950841e49508200420022003100d20030b0b00200041c4950810411a0b0b00200041e4950810411a0b4a01047f230041106b220024001047220110472202100e2002106fc041004a0440107021032000200236020c20004200370300200020033602082001200010660b200041106a240020010b0e00200010ac0141ff017141016b0b0a00418d8208410b104e0bf101010a7f230041106b220424002001200220034200100f220810032206100322091003220a1003220b100322054200100f220c1003220d10102001200220034175101141751012220141004a044041751013a721070b20051005450440200541d58008412010071a0b200441003b010e41002102200020061005410246047f200641002004410e6a410210721a20042d000e4100470541000b3a001d200020083602002000200d3602182000200c360214200020053602102000200b36020c2000200a36020820002009360204200041084108200741ff01712200200041084f1b200141004c1b3a001c200441106a24000b0f00200020012003200210434100470b080041674175100e0b1c01027f1047220110472202100e20002001360204200020023602000bad0102047f017e230041406a22012400027f1076220210050440104b2103200120021005360214200141003602102001200236020c0340200141186a2001410c6a1077200128021841014745044020012903202105200128022c210220012802281049210420012002104636023c20012005370330200120043602382003200141306a10660c010b0b41010c010b10781046210341000b21022000200336020420002002360200200141406b24000b920101037f230041206b22002400107e210102404104107d0d004158418d8208410b10071a200020011005360208200041003602042000200136020003402000410f6a2000107f20002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe037120024118767272108001450d000b4197810841181002000b200041206a240020010b5601017f230041306b220224002002411f6a2001107f200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a10e30142010542000b370300200241306a24000b10004101107d450440415d10150b415d0b2001017f10762201107a410146044020002001107b0f0b41f5800841221002000b0900200010054104760b6d01017f230041306b22022400200241286a4200370300200242003703202001100541104f044020014100200241206a2201411010cc01200241106a200110e301200041086a200241186a29030037030020002002290310370300200241306a24000f0b41b28808411d1002000b10004108107d450440415910140b41590b2b01027f2000418896082d0000220171200041ff01714622024504404188960820002001723a00000b20020b10004102107d450440415a10160b415a0b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010721a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0020002001104441004a0b5e01027f230041106b220124000240024002400240107e2202107a0e020102000b41f5800841221002000b1070210220001078104636020c20004200370300200020023602080c010b200120021082012000200110500b200141106a24000b6201017f230041306b22022400200241286a4200370300200242003703202001200241206a220110e2010440200241106a200110e301200041086a200241186a29030037030020002002290310370300200241306a24000f0b41b28808411d1002000b3601017f230041106b220124002001108101200129030050044020002001290308370300200141106a24000f0b41af8108411c1002000b5f01027f230041106b22002400027f024002400240107c2201107a0e020102000b41f08108411d1002000b415d42001000415d0c010b20002001108201200028020810850145044041cb810841251002000b200028020c0b200041106a24000b14004158418d8208410b10071a415820001080010b0d0020001047220010171a20000b2e01017f419882084117104e22042000200110181a200441af8208410310181a20042002200310181a20041019000b3001017f20002802002203418496082802004e04402001200241b282084111108701000b2000200341016a36020020030b0e002000200120021088011086010b120020002001200210880120012002109d010b3e01017f230041106b22032400200341086a2000104c20032802084101710440200328020c1049200341106a24000f0b2001200241b282084111108701000b0900200010491091020b2d01017f104b210303402000280200418496082802004e4504402003200020012002108901104d0c010b0b20030b1200200020012002108b0120012002108f010b2000200010492200100541204704402001200241c089084110108701000b20000b5a01027f027f41002001109101220245200241ebde0146720d001a2001280200418496082802004e0440104b210341010c010b200141a48f084106108901210341010b21012000200336020820002002360204200020013602000b3001017e200041a48f084106108801101a22014280808080105a044041a48f08410641808008410e108701000b2001a70b0b002000200120021093010b2d01017f104b2103037f2000280200418496082802004e047f2003052003200020012002108901104d0c010b0b0b2b01017e20002001200210fd01220342ffffffff0f5804402003a70f0b2001200241808008410e108701000b980101027f230041106b22022400027f2001109101220341ebde0147410020031b45044041002103200141a48f084106108a0121012002410c6a0c010b027f2001280200418496082802004e0440104b0c010b200141a48f0841061089010b21012002200336020c41012103200241086a0b2001360200200020033602002000200228020c36020420002002280208360208200241106a24000b3801017f02402001280200418496082802004e0440410121020c010b200141928c08410710890121010b20002001360204200020023602000b0e00200020012002108b011098010b0d00200010472200102c1a20000b210020001086012200100541204704402001200241c089084110108701000b20000b880101037f230041106b22032400200320001086012200100536020c2003410036020820032000360204200341046a20012002109b01200341046a20012002109b012104200341046a20012002109b012105200328020c20032802084704402001200241808008410e108701000b200341106a240041ff01712005411074200441ff017141087472720b5901027f230041106b22032400200341003a000f2000280204220420002802084604402001200241908808410f108701000b200028020020042003410f6a410110cc012000200441016a36020420032d000f200341106a24000b0b00200020012002109d010b4001017f230041106b22032400200341086a200010a001108b0220032802084101710440200328020c200341106a24000f0b2001200241ef8808410d108701000b4a01017e4102101b45044041000f0b02404102101a2200428002540440200042095a0d012000a70f0b41d58c08410a41808008410e108701000b41d58c08410a418e8008410d108701000b2501017e2000101a22034280808080105a04402001200241808008410e108701000b2003a70b0a0020001086011091020b1400200020014f04400f0b41c3820841121002000b19004184960828020020004c04400f0b41c3820841121002000b1400101c20004604400f0b41d5820841191002000b19002000418496082802004c04400f0b41b2820841111002000b0b0041849608101c3602000b7101047f230041106b22012400104b2202101d414e4101410010071a200120021005220436020c200141003602082001200236020403402003200446450440414e200141046a419b8008411910a701104d20012802082103200128020c21040c010b0b2000414e10a801200141106a24000b5e01037f230041106b2203240020002001200210ff012104200341086a200028020020002802042205200410800220032802084101714504402001200241908808410f108102000b200328020c2000200420056a360204200341106a24000b190020002001100536020820004100360204200020013602000b4f01017f230041206b2201240020012000100536021c20014100360218200120003602140340200141086a200141146a104c20012802084101710440200128020c101e1a0c010b0b200141206a24000b1b002000280200101e1a20002802044504402000280208101e1a0b0b2000200020012002101f200010ac0141ff017104400f0b41ee820841301002000b140020001042220041004a20004100486b41016a0b0f00200210ae012000200110af01000b0a0041764200100041760b0d0020002001200220031045000b4b01017f230041206b22062400200641106a200041086a2903003703002006200136021c200620023602182006200536020420062004360200200620002903003703082006200310b101000b800101037f230041106b22022400200028020421032000280200210420002903085004402002200420032000280210200028021410b2012002280204210020022802002102200110ae012002200010af01000b200241086a200420032001200041086a10b301200228020c210020022802082101106a10ae012001200010af01000b7201017f230041206b22052400200541186a41dd8708410c1056200541106a2005280218200528021c2003105d200541086a200528021020052802142004105920052005280208200528020c2001200210d301200528020421012000200528020036020020002001360204200541206a24000ba40101027f230041306b22052400200541286a41ce8708410f1056200541206a2005280228200528022c2004280208105d200541186a2005280220200528022420042903001058200541106a2005280218200528021c200428020c10592005280210210620052802142104104b1a200420031049104d200541086a200620042001200210d301200528020c21012000200528020836020020002001360204200541306a24000b4402027f017e200028020c2802002105200028020828020021062000290300220750044020012006200520022003200410630f0b200120062007200520022003200410640bb40301017f230041106b220624002006200536020c2006200436020820062003360204230041106b2203240020002802082003200028020c220536020c2003200036020820032002360204200320013602002802002100200641046a2104230041206b2202240020001085014504402002200036020c200241186a200441086a2802003602002002200429020037031020022002410c6a220136021c230041206b220024002003280204210420032802002105200041086a200241106a220241086a28020036020020002001360218200020022902003703002000200328020c36021c20002003280208290300370310200041106a2005200420002802002802002000280204200028020810b001000b230041106b22002400200041086a200441086a2802003602002000200536020c20002004290200370300200028020021022000280204210320002802082104230041206b220024002000200536020c2000200436021c200020033602182000200136021420002000410c6a360210230041106b22012400200041106a220028020021032001200236020420012000290208370208200141046a200328020028020010fc01000b840101037f230041206b22052400200028020c2106024020002802082207280200108501450440200520072802003602042005200636021c2005200436020c20052003360208200520002903003703102005200541046a360218200541106a200120022003200410b4010c010b2001200628020020022003200410201a0b200541206a24000b880101017f230041106b220624002006200036020c230041206b220024002000200536021c20002004360218200020013602142000200236021020002006410c6a36020c230041106b22012400200141086a2000410c6a220028020c20002802102003200028020028020010b901200128020c210020012802082101106a10ae012001200010af01000b21002000105f044041b4800841211048000b2001200020022003200410214100470b840201027f230041e0006b22052400200541306a41ba870841141056200541286a20052802302005280234200310c001200541206a2005280228200528022c2004107a10cf012005280224210320052802202106200520041005360244200541003602402005200436023c0340200541c8006a2005413c6a10772005280248410147450440200528025c2104200541106a2006200320052802581060200541086a200528021020052802142005290350105820052005280208200528020c200410d20120052802042103200528020021060c010b0b200541186a200620032001200210d301200528021c21012000200528021836020020002001360204200541e0006a24000b220020002001200210bb01200041f5840841f0840820031b4104410520031b10bb010b1501017f104b22032001200210071a20002003104d0b17002002200310d80120002002360204200020013602000b4b01017f230041106b22032400200341086a200128020020012802042002106020012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b4c01017f230041106b22032400200341086a20012802002001280204200210cf0120012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000bce0302067f017e230041406a22072400410121080240024002400240200241ff0171220a41016b0e03010302000b41ea86082108410521090c020b41ef86082108411021090c010b41ff86082108411121090b200741106a2008200910562007200136023820072007290310370230200741246a2201200741306a2208200310c501200741186a22032001200410c501200a450440200741086a2007280218200728021c2005105920072007290308220d370218200741386a200741206a2802003602002007200d37033020032008200628020010be010b20062d0007210320062d0009210420062d0008210520062d000c210820062d000b210920062d000a210a20062d0006210b20062d0005210c200728021c220141f98408410920062d000410ba012001418285084107200c10ba012001418985084108200b10ba010240200241ff017104402001419185084118200341017110ba010c010b200141a985084107200541017110ba01200141b085084107200441017110ba010b200141b78508410e200a41017110ba01200141c58508410a200941017110ba01200141cf85084112200841017110ba01200020013602042000200728022036020820002007280218360200200741406b24000b17002002200310da0120002002360204200020013602000b6d01017e200028020420002802084f0440410d0f0b200041d08908410810a6022200100545044041000f0b0240200041d08908410810fd0122014280025404402001420d5a0d012001a70f0b41d08908410841808008410e108701000b41d089084108418e8008410d108701000be50101017f410121020240024002400240024002400240024002400240024002400240200141ff0171220141016b0e0c000102030405060708090a0b0c0b41c492082102411121010c0b0b41d592082102411121010c0a0b41e692082102411121010c090b41f792082102411621010c080b418d93082102410f21010c070b419c93082102411b21010c060b41b793082102411121010c050b41c893082102411321010c040b41db93082102411721010c030b41f293082102411521010c020b418794082102411121010c010b419894082102411021010b20002001360204200020023602000b2301017f104b22052003200410071a20022005104d20002002360204200020013602000b0e01017f104722004200100020000b4b01017f230041106b22032400200341086a200128020020012802042002105d20012003290308370200200041086a200141086a28020036020020002001290200370200200341106a24000b5c01027f230041306b22012400104b2102200120001005360214200141003602102001200036020c200141206a21000340200141186a2001410c6a107720012802184101474504402002200010c7010c010b0b200141306a240020020b20002000200128020810d8012000200129030010dc012000200128020c10db010b6a01027f230041306b2201240010c4012102200120001005360214200141003602102001200036020c03400240200141186a2001410c6a107720012802184101470d00200128022c21002001280228108501450d0120022002200010010c010b0b200141306a240020020b1b01027f10472200102241908708410a104e2201200010041a20010b5201037f2002200028022046047f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030541010b450b970101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011005220341214f044041c69408410e1002000b200141002002200310cc0120002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b1a00200020012002200310724504400f0b419f880841131002000b150020012802004101410010071a2000200110ce010b6001027f230041206b2202240020012802001049210320022000100536021c20024100360218200220003602140340200241086a200241146a104c20022802084101710440200228020c200310530c010b0b20012003360200200241206a24000b17002002200310d90120002002360204200020013602000b2701017f230041106b22022400200220003a000f20012002410f6a410110181a200241106a24000b0d00104b1a200020011049104d0b17002002200310db0120002002360204200020013602000b7001017f230041206b2205240002402003105f0d002002200310d10120052004100536021c20054100360218200520043602140340200541086a200541146a104c2005280208410171450d012002200528020c10d1010c000b000b2000200236020420002001360200200541206a24000b10002000104b360204200020013602000b3601027f230041106b22012400200141086a104b10d401200128020c21022000200128020836020020002002360204200141106a24000b1000104b1a200020012802001052104d0b3101017f230041106b220224002002104b36020c20012802002002410c6a10a8022000200228020c104d200241106a24000b2e01017f230041106b220224002002104b36020c20012002410c6a10a8022000200228020c104d200241106a24000b1401017f104b22022001ad10ab0220002002104d0b1000104b1a200020012802001049104d0b0d00104b1a200020011052104d0b1301017f104b2202200110ab0220002002104d0b5f01017f230041206b2204240020042003100536021c20044100360218200420033602140340200441086a200441146a104c200428020841017104402002200428020c10d1010c010b0b2000200236020420002001360200200441206a24000bdf0102047f027e230041406a220124000240024020002802102202105f45044010df0121050c010b200028020c10e0010d010b200141106a200041086a290300220637030020012000290300370308200028021821032000280214210002402006a722041085014504402001200436021c2001200141146a36023c20012001290308370330200120003602282001200236022420012001411c6a36023820012003360220200141306a200328020020052002200010b4010c010b2003280200200128021420052002200010201a0b200141406b24000f0b41e98708410e1048000b1701017e1023220042a08d067d2000200042a08d06561b0b0b002000106f41ff0171450be40102057f017e230041306b22012400024002400240024020002802082203105f45044010df012106200028020421020c010b20002802042202105f0d010b200028020c2104200028020021002002105f0d01200141286a42003703002001420037032002402002107a4101470d002002200141206a220510e2011a200141106a200510e301200128021c21052001280218108501450d002000280200200520062003200410201a0c030b2000280200200220062003200410081a0c020b41e98708410e1048000b10c40121022000280200200220062003200410201a0b200141306a24000b2001017f20001005220241104f0440200041002001411010cc010b2002410f4b0bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b8f08020f7f017e230041d0006b2209240002402000280208105f450440200029030021100c010b200028021c28020010e001450d0041e98708410e1048000b230041106b2107024020092009410020096b41037122026a22054f0d00200921012000210420020440200221030340200120042d00003a0000200441016a2104200141016a2101200341016b22030d000b0b200241016b4107490d000340200120042d00003a0000200141016a200441016a2d00003a0000200141026a200441026a2d00003a0000200141036a200441036a2d00003a0000200141046a200441046a2d00003a0000200141056a200441056a2d00003a0000200141066a200441066a2d00003a0000200141076a200441076a2d00003a0000200441086a2104200141086a22012005470d000b0b2005412820026b220e417c71220f6a21010240200020026a22034103712208450440200120054d0d0120032102034020052002280200360200200241046a2102200541046a22052001490d000b0c010b2007410036020c2007410c6a2008722102410420086b22044101710440200220032d00003a0000410121060b20044102710440200220066a200320066a2f01003b01000b200320086b21062008410374210b200728020c210c02402001200541046a4d0440200521040c010b4100200b6b411871210a03402005200c200b76200641046a2206280200220c200a7472360200200541086a2102200541046a22042105200120024b0d000b0b41002105200741003a0008200741003a0006027f200841014604404100210241002108200741086a0c010b200641056a2d00002007200641046a2d000022023a000841087421084102210d200741066a0b210a20042003410171047f200a200641046a200d6a2d00003a000020072d0006411074210520072d00080520020b41ff01712005200872724100200b6b41187174200c200b76723602000b2003200f6a210202402001200e410371220320016a22054f0d002003220404400340200120022d00003a0000200241016a2102200141016a2101200441016b22040d000b0b200341016b4107490d000340200120022d00003a0000200141016a200241016a2d00003a0000200141026a200241026a2d00003a0000200141036a200241036a2d00003a0000200141046a200241046a2d00003a0000200141056a200241056a2d00003a0000200141066a200241066a2d00003a0000200141076a200241076a2d00003a0000200241086a2102200141086a22012005470d000b0b200922032010370328200341406b200041186a2903003703002003200341246a3602482003200328020c2209360234200320032802082204360230200320002903103703382003200341286a36024c200341386a200328022028020020102004200910b601200341d0006a24000b2f01017f230041106b22022400200241086a10d5012000200142002002280208200228020c10201a200241106a24000b7101017f230041306b2201240020014200370310200141206a200041086a2903003703002001200041146a360228200120002903003703182001200141106a36022c20002802102100200141086a10d501200141186a200028020042002001280208200128020c10b401200141306a24000b120020002001200210a6022001200210fd010b910102047f017e230041106b22012400200028020c2103200028020821022000290300200028021010ae01210428020020042002200310672100102420012000104a22021005220036020c410021032001410036020820012002360204104b21020340200020034d4504402002200141046a10e901104d200128020c2100200128020821030c010b0b200141106a240020020b0f00200041f78708410b10a60210490b6002047f017e230041106b22022400107310df012001280208210320012802042104200128020010ae01210528020020052004200310671a1024200241086a1074200228020c21012000200228020836020020002001360204200241106a24000b2f02017e037f10df012000280208210220002802042103200028020010ae01210428020020042003200210671a10240b5e02047f017e230041106b2202240010df012001280208210320012802042104200128020010ae01210528020020052004200310671a1024200241086a1074200228020c21012000200228020836020020002001360204200241106a24000b3102017e037f10df012000280208210220002802042103200028020010ae01210428020020042003200210671a1024106e0b2000200041046a10ef0120002802102000280214200028020028020010ad01000b2901027f10c901104b210120002802002000280204200110a90220002802082001109b022001102e1a0b6f01047f200010ef01200028020c21022000280210210320002802142104230041206b220124002001200236020c2001200436021c200120033602182001200041186a36021420012001410c6a360210230041106b22002400200010fa0136020c200141106a2000410c6a10fb01000b2501017f2000280204200041106a2201200120002802002000280208200028020c10b701000b2501017f200041086a2000411c6a2201200120002802182000280200200028020410b501000b0a002000200110f401000b0d002000200110fa0110ad01000b1500200010ef01200028020c200028021010f401000b7b02067f027e230041106b22012400200028021c2102200028021821032001416736020c20002802202001410c6a10cd01200028020c2104200028020821052000290300210720002903102108200028022810ae012106280200200620052004200320022003200220072008200128020c10251a200141106a24000b8d0402097f017e23004190016b22012400200028022c210420002802282105200141673602142000280230200141146a220910cd012001200029032037031820012000290310370320200028021c21022000280218210320002802382106200028020c21072000290300210a02402000280208220810850145044020012007360254200120083602502001200a3703482001200436023820012005360234200120023602302001200336022c20012006360228200120093602442001200141186a22073602402001200141206a220836023c20012004360274200120053602702001200141d4006a220436026c2001200141d0006a22053602682001200a37036020012000413c6a22003602880120012000360284012001200236025c2001200336025820012009360280012001200736027c20012008360278200141f0006a2100200a5004402001200320022005200410b201200128020421022001280200210310ae0121042000200628020020042003200210f8010c020b200141086a200320022006280200200141e0006a10b301200128020c2102200128020821032000106a10ae012003200210f8010c010b20012002360274200120033602702001200436025c200120053602582001200141146a3602682001200141186a3602642001200141206a3602602001200636026c200141d8006a200628020020072003200210f8010b20014190016a24000b370020012002200320042000280200220120002802042202200120022000280208290300200028020c290300200028021028020010251a0bbc0502087f017e23004180016b2201240020002802142104200028021021072001416736021c20002802182001411c6a10cd0120012000290308370320200120002903203703282000280230210520002802282102200028022c21032000280200210820012000280204220636023420012008360230024020084101460440200041346a21000240024002402006107a0e020102000b2001200336026c200120023602682001200036026420012000360260200120043602502001200736024c2001200141346a36024820012001411c6a36025c2001200141206a3602582001200141286a3602542001200220032005200610b9012001280204210020012802002102200141cc006a106a10ae012002200010f8010c030b200120033602602001200236025c2001200436024c2001200736024820012001411c6a3602582001200141206a3602542001200141286a36025010ae012100200141c8006a200528020020002002200310f8010c020b200141386a2006107b200129033821092001200141c4006a220636025c2001200141406b220836025820012009370350200120003602782001200036027420012004360264200120073602602001200336024c2001200236024820012001411c6a3602702001200141206a36026c2001200141286a360268200141e0006a21002009500440200141086a200220032008200610b201200128020c21022001280208210310ae0121042000200528020020042003200210f8010c020b200141106a200220032005280200200141d0006a10b30120012802142102200128021021032000106a10ae012003200210f8010c010b20012003360264200120023602602001200436024c2001200736024820012001411c6a3602582001200141206a3602542001200141286a3602502001200536025c200141c8006a200528020020062002200310f8010b20014180016a24000b0a00419a87084120104e0b3301027f230041106b22022400200028020021032002200136020420022000290208370208200241046a200328020010fc01000b1a00200028020028020020012000280204200028020810af01000b3c02017f017e230041106b220324002003200010fe01200328020041014604402003290308200341106a24000f0b2001200241828808410e108701000b2101017e20002001100541084d047e20002001102737030842010542000b3703000b5301017f230041106b220324002003410036020c20002003410c6a41042001200210aa02200328020c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3701037f200110052205200249200220036a20054b724504402001200220031003220610264521040b20002006360204200020043602000b160020002001104e22002002200310181a20001019000b5a01037f230041106b22022400200020011083022103200241086a20002802002000280204220420031080022002280208410171450440200141908808410f108402000b200228020c2000200320046a360204200241106a24000b5101017f230041106b220224002002410036020c20002002410c6a41042001109d02200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b2c01017f41a18908411b104e2203200010041a200341af8208410310181a20032001200210181a20031019000b8b0102047f017e230041206b22012400104b2103200120001005220236020c20014100360208200120003602040340200220044d450440200141046a22021086022100200241d08908410810e70121052001200210870236021c20012005370310200120003602182003200141106a1066200128020c2102200128020821040c010b0b200141206a240020030b1000200041d08908410810a602108c010b1000200041d08908410810a6021098010b5a01027f230041206b22012400104b210220012000100536021c20014100360218200120003602140340200141086a200141146a104c200128020841017104402002200128020c10491049104d0c010b0b200141206a240020020b0e01017f104b22012000104d20010b0900200020011028450b1c01017f2001108501210220002001360204200020024101733602000b0d0020002000200110ab0120000b1001017f1047220220002001102920020b1200417542021000200020004175102a20000b140041754290ce001000200020004175102a20000b15002000108501044041ef8808410d1002000b20000b4901017f230041106b220124000240200010054104470d002001410036020c200041002001410c6a410410721a200128020c41c58eb1a204470d00107021000b200141106a240020000b0d00200010472200102d1a20000b1a0020002001108501047f41fc88084104104e0520010b102e1a0b1200416c4101410010071a2000416c102e1a0b100041672001ad102f20004167102e1a0b5301027f2000200110970241016a2203109802104b2100200228020820001053200228020c200010990220022903002000109a0220022802102000105120022802142000109b022000102e1a200120031095020b5702017f017e230041106b220124002001200010920210fe01024020012802000440200129030822024280808080105a0d01200141106a24002002a70f0b200041828808410e108402000b200041808008410e108402000b1a00200010492200419c8908410510181a20012000109e0220000b1d0020001085014504402000200110530f0b41fc88084104200110a9020b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810181a200241106a24000b5c01017f230041206b22022400200010054102762001109e0220022000100536021c20024100360218200220003602140340200241086a200241146a104c20022802084101710440200228020c200110530c010b0b200241206a24000bbb0202057f017e230041206b22032400200320012002109802220110920222021005360214200341003602102003200236020c2003410c6a2202200110820221052003410c6a20011082021091022106200342003703182002200341186a41082001109d02200329031821082003410c6a20011082021098012107200220011083022102104b210403402002044020042003410c6a2001108202104d200241016b21020c010b0b20032802142003280210470440200141808008410e108402000b20002004360214200020073602102000200636020c200020053602082000200842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe03832008423888848484370300200341206a24000b3b01017f2000280208200028020422046b2002490440200341908808410f108402000b200028020020042001200210cc012000200220046a3602040b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410181a200241106a24000b2a01017f230041106b220124002001104b36020c20002001410c6a10ce01200128020c200141106a24000b09002001200010a1020b5101017f230041206b2202240020022000100536021c20024100360218200220003602140340200241086a200241146a104c200228020841017104402001200228020c10d1010c010b0b200241206a24000b1201017f104b220220002001104e104d20020b080020004111104e0b0a0041868a084117104e0b7001027f230041306b22012400104b2102200120001005360214200141003602102001200036020c0340200141186a2001410c6a10772001280218410147450440200128022c21002002200128022810d8012002200129032010dc012002200010db010c010b0b200141306a240020020b3c01017f230041106b22032400200341086a2000104c20032802084101710440200328020c200341106a24000f0b2001200241b282084111108701000b190020001085014504402000101e1a0f0b41fc8808410410300b230020001085014504402001200010493602000f0b200128020041fc8808410410071a0b120020012002109e0220022000200110181a0b3d01017f2000280208200028020422056b20024904402003200441908808410f108102000b200028020020052001200210cc012000200220056a3602040bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10071a200341106a24000b6901037f230041106b2203240020011049210420032002104a22011005220536020c41002102200341003602082003200136020402402005450440410121020c010b200341046a10e90121010b200020013602082000200236020420002004360200200341106a24000b0a002000106fc041004a0b0a00200010e0014101730b0f01017f104722012000ad100020010b2901027f41ea8908410d104e22011049220241bc8908410410181a20002002360204200020013602000b2801017f41868a08411710a2022203200010d8012003200110dc012003200210d6012003104b10310b0a0041a78a08410f104e0b0a0041b68a084110104e0b1a01017f41ed8a08411a10a2022201200010a0022001104b10310b1b01027f41878b08411810a202104b22022000ad10ab02200210310b3501027f230041106b22012400419f8b08411a10a2022001104b36020c20002001410c6a10ce01200128020c1031200141106a24000b120041d18b08411a10a2022000109f0210310b4b01017f230041106b22012400200141086a200041d08908410810a602108c01108b02200128020841017145044041d08908410841ef8808410d108701000b200128020c200141106a24000b6701027f230041206b2202240041848c08410e10a2022203200010d60120022001100536021c20024100360218200220013602140340200241086a200241146a104c200228020841017104402003200228020c10d1010c010b0b2003104b1031200241206a24000b6302017f017e230041106b220424002002200310bb02210220011049210110df0110c4014180021065200141672002104722011047220210321a1024200441046a2001200210ac022000200428020c36020820002004290204370200200441106a24000b1a01017f104b210220004101714504402002200110d1010b20020b0d002000200141fa8c0810b1030b0d002000200141868d0810b1030b5801017f230041106b22042400200441086a41928d08410e105620042004280208200428020c200310dd0120042802002103200020023602102000200428020436020c2000200336020820002001370300200441106a24000b6601037f230041206b22052400200541186a41a08d08410e105620052802182106200528021c2207200210d801200541106a2006200720031058200541086a20052802102005280214200410d2012000200529030837020420002001360200200541206a24000b7e01037f230041206b22032400200341086a41bf8d0841141056200328020c21042003280208210520032002100536021c200341003602182003200236021403402003200341146a104c200328020041017104402004200328020410d1010c010b0b200020043602082000200536020420002001360200200341206a24000b150020004101710440200110b5020f0b104b10b6020b2d01017f104b210420024101714504402004200310d1010b200041003b010420002004360200200020013602080b2b01017f104b2203200110d9012003200210db012000200336020820004110360204200041b590083602000b2401017f104b2202200110da0120002002360208200041123602042000419891083602000b8f0201047f230041d0006b22022400200241106a200010cb0102402002280230450440410021000c010b200241106a41989108411210ca01450440410121000c010b10a50141002100410010a40120024100360240200241c4006a200241406b109501200228024010a201200228024c2104200228024821052002280244210320022001100536023c200241003602382002200136023410a501200241346a41b591084106108e0121012002280238200228023c10a101024020034101710440200241086a108301200228020c21032002280208108501450d01200310ad02450d012001200310e5010c010b10b202200510930210b3021094020c010b10b3022004102e1a0b200241d0006a240020000ba00102017f017e230041206b220724002007200136020c20072000360208200720023602102007200336021420072004360218200720053b011c200720054110763a001e104b22002006104d200741086a22012007410c6a2202200741106a200741146a200741186a2007411c6a2000105c210841a18a08410610a2022200200110d7012000200810dc012000200210d6012000104b1031200741206a240020080b09001033410010a3010b1b001033410210a301410041b88e0841021099014101104f10e5010b8b0101047f230041406a2200240010a501410110a401410041b88e084102109901210120004101360228200041286a220241ba8e0841041092012103200028022810a2012000200136020c200210234201882000410c6a200310be02200020002802383602202000200029033037031820002000290328370310200041106a10e80110b702200041406b24000bc70102047f017e230041406a2200240010a501410110a401410041b88e084102109901210120004101360228200041286a220241ba8e0841041092012103200028022810a2012000200136020c2002102342038022042000410c6a22012003104a10be02200020002802383602202000200029033037031820002000290328370310200041106a10e80110b702200220042001200310be02200020002802383602202000200029033037031820002000290328370310200041106a10e80110b702200041406b24000b980402077f027e230041a0016b22002400410110a3012000410041b88e084102109901360224200041286a10810110232107200041186a41d38d08411910562000200742018822083703382000200028021c22013602442000200028021822033602402000200041246a2205360248200020083703502000280234210220002903282107027f20002802302204108501450440200020023602742000200436027020002007370368200020013602602000200336025c2000200041d0006a2206360264200020053602582000200041f4006a220236028c012000200041f0006a22043602880120002007370380012000200041cc006a22053602980120002005360294012000200136027c2000200336027820002006360290012007500440200041086a200320012004200210b201200028020c21012000280208210310ae0121022000290350200028022420022003200110670c020b200041106a20032001200028022420004180016a10b3012000280214210120002802102103106a210210ae0121042000290350200220042003200110670c010b2008200028022420022003200110670b2101102420002001104a22021005220136028001410021032000410036027c20002002360278104b21020340200120034d4504402002200041f8006a10e901104d2000280280012101200028027c21030c010b0b200241b98b08411810a202220110a1022001104b1031200041a0016a24000b5d02037f017e230041106b220024001084011a410110a301410041b88e084102109901210110840121021023200041086a418d8e0841231056420188200120022000280208200028020c10671a1024106e10c8011034200041106a24000bc30302077f027e23004190016b22002400410110a3012000410041b88e0841021099012205360224200041286a107910232108200041186a418d8e084123105620002802182101200028021c2102200029032821072000200041346a22033602542000200041306a22043602502000200737034820002002360244200020013602402000200842018822083703382000200041246a360258200020083703602000200336027c20002004360278200020073703702000200041dc006a22063602880120002006360284012000200236026c200020013602682000200041e0006a3602800102402007500440200041086a200120022004200310b201200028020c21012000280208210210ae0121032000290360200028022420032002200110671a0c010b200041106a200120022005200041f0006a10b3012000280214210120002802102102106a210310ae0121042000290360200320042002200110671a0b1024106e2201107a410147044041808908411c1048000b200041e8006a22022001108201200041386a2002105020002802401090022000280244210220002903382107104b220110990220072001109a022002200110512001101e1a20004190016a24000bdb0102037f017e230041406a22002400410110a3012000410041b88e084102109901360228107c21011023200041106a418d8e0841231056200041086a20002802102000280214200041286a200110b901200028020c210120002802082102420188106a10ae012002200110671a10242000107420002802042102104b2101200020021005360224200041003602202000200236021c0340200041286a2000411c6a10772000280228410147450440200028023c2000280238200110990220002903302001109a02200110510c010b0b2001101e1a200041406b24000bce0102067f017e230041206b22002400410210a301410041b88e08410210990121024101104f2101200041106a1083012000280210210320002000280214220420042001108d02108f02108c022205360218200041086a41fa8c08410c1056200028020c21012000280208210410df012106027f20031085014504402000200336021c2000200420012000411c6a200041186a10b20120002802042103200028020021012006200210ae012001200310670c010b2006200220052004200110670b1024104a10051a200041206a24000ba40402077f027e230041a0016b22002400410110a3012000410041b88e08410210990136022c200041306a108101200041206a41fa8c08410c105620002000280224220136024420002000280220220336024020002000412c6a2205360248200010df012208370350200028023c210220002903302107024020002802382204108501450440200020023602742000200436027020002007370368200020013602602000200336025c2000200041d0006a2206360264200020053602582000200041f4006a220236028c012000200041f0006a22043602880120002007370380012000200041cc006a22053602980120002005360294012000200136027c2000200336027820002006360290012007500440200041106a200320012004200210b201200028021421012000280210210310ae0121022000290350200028022c20022003200110671a0c020b200041186a20032001200028022c20004180016a10b301200028021c210120002802182103106a210210ae0121042000290350200220042003200110671a0c010b2008200028022c20022003200110671a0b1024200041086a41ef8c08410b105620002802082103200028020c2101104b220241fa8c08410c10071a20012002104d10df0110ae012102200028022c20022003200110672101102420002001104a22011005360280012000410036027c20002001360278200041f8006a41f78708410b10a60241f78708410b109401ad1035200041a0016a24000b5b02047f017e230041106b220024001033410410a301410041b88e0841021099012101410110a00121024102101a21044103104f210320002001360200200041046a2201200020022004200310bf02200110eb01200041106a24000bfb0302067f017e23004190016b22002400410310a301410041b88e0841021099012101410141ca8e084105109c0121024102104f21042000200136023c1076210341cf8e0810a3022105200041306a41ec8d0841211056200041286a20002802302000280234200210bc01200041206a2000280228200028022c200410d2012000280220210120002802242202200510d1012000200236024c200020013602482000200336024420002000413c6a360240200010df01220637035002400240024002402003107a0e020102000b200041086a200120022000413c6a200310b901200028020c2101200028020821022006106a10ae012002200110671a0c020b10ae0121032006200028023c20032001200210671a0c010b200041d8006a2003107b200029035821062000200041e4006a220436027c2000200041e0006a2205360278200020063703702000200041d0006a22033602880120002003360284012000200236026c2000200136026820002003360280012006500440200041106a200120022005200410b201200028021421012000280210210210ae0121032000290350200028023c20032002200110671a0c010b200041186a20012002200028023c200041f0006a10b301200028021c210120002802182102106a210310ae0121042000290350200320042002200110671a0b102420004190016a24000b0700410010a3010ba20102057f017e230041206b22002400103310a501410110a401410041b88e08410210990121012000410136021c2000411c6a220341be8e08410c108d01200028021c10a2012000200136021c200041106a41fa8c08410c10562000280214210120002802102104108502210210df01200041086a200420012003200210b901200028020c210120002802082102106a10ae012002200110671a1024200041206a24000bc40101047f230041306b22002400103310a501410110a401410041b88e08410210990121012000410136020c2000410c6a220341ba8e0841041092012102200028020c10a20120002001360208230041106b22012400200141086a41928d08410e105620012001280208200128020c200210dd01200041246a220220012903003702042002200041086a360200200141106a24002000104b36021820004112360214200041e08e083602102000200029022837021c2000200028022436020c200310ee01000bdb0401077f230041406a22002400410110a3012000410041b88e08410210990136020c200041106a2201108101200041346a2000410c6a10bc022000200028023436022820002000290238370320230041106b22022400200241086a200141086a290300370300200220012903003703002001411c6a2105200128021821002001280210210320012802142104230041106b220124002001200436020c2001200336020820012000360204230041206b2200240020022802082103200041086a2204200141046a220141086a280200360200200020012902003703002000200228020c36020c2000200236021c2000200536021820002005360214230041206b220224002003108501450440200241106a20042902003703002002200336021820022000290200370308230041206b22012400200041146a2200280204210520002802002104200241086a220228020c2106200141086a200241086a2802003602002001200636021c200120033602182001200229020037030020012000280208290300370310200128020028020021022001280204210320012802082106230041106b220024002000200141106a220141086a36020820002001410c6a36020c2000200129030037030020002004200520022003200610b001000b230041106b22012400200028020c2102200141086a200041086a2802003602002001200236020c20012000290200370300200128020021032001280204210420012802082101230041206b220024002000200236020c2000200136021c200020043602182000200536021420002000410c6a360210200041106a200310fb01000b810101017f230041d0006b22002400410110a3012000410041b88e084102109901360204200041086a10810120002000280214108e0236021c200041c4006a200041046a10bc022000200041106a36023020002000280244360238200020002903083703282000200029024837032020002000411c6a360234200041206a10f201000ba10101047f230041d0006b22002400410210a301410041b88e08410210990121014101104f210220002001360204200041086a108101200028021422012002108d02108f022102104722032001200210ab012000200336021c200041c4006a200041046a10bc022000200041106a36023020002000280244360238200020002903083703282000200029024837032020002000411c6a360234200041206a10f201000b840102047f017e230041306b220024001033410410a301410041b88e0841021099012101410110a00121024102101a21044103104f210320002001360208200041246a200041086a20022004200310bf022000104b36021820004117360214200041868a083602102000200029022837021c2000200028022436020c2000410c6a10ee01000b9b0102057f017e230041206b22002400410110a3012000410041b88e084102109901360200107c2102200041046a2201200010bd022000280204210320002902082105104b2104200020053702182000200236021420002003360204200020043602102000411736020c200041868a08360208200141046a10ef0120012802102001411c6a2200200020012802002001280214200128021810b701000beb0102067f017e230041406a220024001033410310a301410041b88e0841021099012101410110a00121024102104f21032000200136020c2000200236021020002003360214200041186a22012000410c6a220410bc02200029021c210620002802182105104b2203200410da012003200210d8012003200041146a220410d601200041306a2202200336020820024119360204200241f28e083602002000200536023c20004200370320200020063703182000200436022c2000200041106a360228200141186a10ef01200141086a200141286a2200200020012802242001280200200128020410b501000b7a01047f230041206b22002400103310a501410110a401410041b88e084102109901210120004101360204200041046a220241be8e08410c108d012103200028020410a20120002001360200200041146a200010bc02200020031085023602082000200029021837020c20002000280214360204200210f101000b7a01047f230041206b22002400103310a501410110a401410041b88e084102109901210120004101360204200041046a220241be8e08410c108d012103200028020410a20120002001360200200041146a200010bd02200020031085023602082000200029021837020c20002000280214360204200210f101000b5601027f230041306b22002400410110a3012000410041b88e08410210990136020c200041106a2201108101200041fa8c08410c10562000200029030037032020002000410c6a360228200110de01200041306a24000baa0202067f017e230041f0006b22002400410210a301410041b88e08410210990121044101104f21022000200436021c200041106a10830120002802142101200020002802103602202000200120012002108d02108f02108c022203360224200041086a41fa8c08410c1056200028020c2101024020002802082202105f45044010df0121060c010b200310e001450d0041e98708410e1048000b20004200370330200020023602282000200136022c20002000411c6a3602402000200041246a220336023c2000200041206a220536023820002006370348200042003703582000200041c4006a360268200020013602542000200236025020002003360264200020053602602000200041c8006a36026c200041d8006a200420062002200110b601200041f0006a24000bef0102057f027e230041d0006b22002400410110a3012000410041b88e08410210990136021c200041286a220210810120002903282106200028023421012000200028023036022020002001108e0236022410232105200041106a41fa8c08410c1056200020063703382000200542018822053703282000200029031037033020002000411c6a22013602482000200041246a22033602442000200041206a2204360240200210e401200041086a41fa8c08410c1056200020063703382000200537032820002000290308370330200020013602482000200336024420002004360240200210e401200041d0006a24000b940102037f027e230041406a22002400410110a3012000410041b88e08410210990136020c200041106a108101200041186a220128020010491023200041fa8c08410c1056200041286a2001290300370300200020002903103703202000200029030037033020002000410c6a360238200041206a10de011023210410c40121011035200410352001103410a702200041406b24000b090041fa8c0810b2030b090041868d0810b2030be30101057f230041306b220024001033410210a301410041df8c08411010990121012000410141f58f084109109901360220200110492102200041186a41e2830841121056200041106a2000280218200028021c200041206a10c001200028021421032000280210210410df01200210ae012004200310671a1024200041086a41ae8d0841111056200028020c21022000280208210310df01200110ae012003200210672101102420002001104a2201100536022c2000410036022820002001360224200041246a41f78708410b10a60241f78708410b108f01101e1a200041306a24000b6101057f230041206b22002400103310a501410110a4014100108601210220004101360214200041086a200041146a2201109601200028020c210320002802082104200028021410a201200120022004200310ba02200110aa01200041206a24000b4f01047f230041106b220024001033410110a301200041046a2201410010860122024101200010ba022000280204200120024101200010ba0220002802042101101e1a2001101e1a200041106a24000b9d0102057f017e230041206b22002400103310a501410110a401410041998c08410e1099012102200041013602142000200041146a2204109601200028020421012000280200200028021410a201200110bb02210110df0110c40141001065200241672001104722021047220110361a102420042002200110ac022000200028021c36021020002000290214370208200041086a10aa01200041206a24000b8b0102067f017e230041206b22002400103310a501410210a401410041df8c08411010990121014101108601210420004102360214200041086a200041146a2202109601200028020c210320002802082105200028021410a201200220012005200310c20220002802142101200028021c102310c401418002106520044167200141671037200041206a24000b910102067f017e230041206b22002400103310a501410210a401410041df8c0841101099012101410141998c08410e109901210420004102360214200041086a200041146a2205109601200028020c210220002802082103200028021410a201200520012003200210c202200028021c20002802142102102310c401418002106520044167200241671038200041206a24000b2201017f1033410110a301410041948f084110109c012100106a20004200106b10340b3401037f1033410110a301410041948f084110109c012100106a200010052102106c2000106d41c4950841e495082002103910350b7d01047f230041306b220024001033410310a301410041b88e0841021099012101410141af8c084108109c0121024102104f21032000200136020c2000200336021020002002360214200042003703182000200041106a3602242000200041146a36022020002000410c6a360228200041186a10e601200041306a24000ba80101037f230041306b22002400410210a301410041b88e08410210990121024101104f21012000200236020c200041186a107920002903185045044041af8108411c1002000b200028022421022000200028022036021020012001200210292001108f0221012000200210462001108c02360214200042003703182000200041146a3602242000200041106a36022020002000410c6a360228200041186a10e601200041306a24000bb40101057f230041306b220024001033410410a301410041b88e0841021099012101410141af8c084108109c0121024102104f21034103104f2104200020013602082000200336020c20002004360210200020023602142000420037031820002000410c6a3602242000200041146a22013602202000200041086a2202360228200041186a220310e601200042003703182000200041106a3602242000200136022020002002360228200310e601200041306a24000bd60102067f017e230041306b22002400103310a501410110a401410041b88e08410210990120004101360220200041206a41be8e08410c108d012101200028022010a201104b2103200020011005220436021c20004100360218200020013602140340200220044f450440200041146a220110b8022102200141d08908410810e70121062000200110870236022c20002006370320200020023602282003200041206a1066200028021c2104200028021821020c010b0b200041086a10d501200342002000280208200028020c10081a200041306a24000b910201047f230041406a220024001084011a410310a301410010860121014101108601210220004102104f360214200020023602102000200136020c10840120001069360218104621032000428182848890a0c080013702202000410036021c230041106b22012400200141003a000720012000411c6a22022d000b3a000c20012002280007360208200120022d00063a0006200120022f01043b010420012002280200360200200041346a200341002000410c6a200041106a200041146a200110bf01200141106a2400104b2201200041186a10da012002200136020820024113360204200241f89108360200200020002802383602302000200028023436022c2000200028023c360228200210f001000b4601027f230041106b220024001033410210a301410041948f084110109c01210120004101104f36020c20002001360208200041086a42002000410c6a105b200041106a24000b4601027f230041106b220024001033410210a301410041948f084110109c01210120004101104f36020c20002001360208200041086a42002000410c6a1055200041106a24000b890102047f017e230041106b220024001033410110a30141742101410041af8c084108109c01103a2104104b21020340024020010440200141b494086a2d0000220341037441d894086a290300200483500d01200041086a200310c20120022000280208200028020c104e10d1010c010b200210a901200041106a24000f0b200141016a21010c000b000bc60102087f017e230041306b220024001033410310a301200041106a4100418b92084107109901410141af8c084108109c014102101a10712000280228210220002802242000280220200028021c20002802182000280214200031002d2000280210200031002c10351034103b101e1a101e1a101e1a101e1a1034104b210120002002100536021820004100360214200020023602100340200041086a200041106a104c20002802084101710440200028020c200110530c010b0b2001101e1a200041306a24000b2b001033410310a3014100418b92084107109901410141af8c084108109c014102101a103c41004aad103b0b1c001033410110a301410041af8c084108109c01103d41004aad103b0b1c001033410110a301410041af8c084108109c01103e41004aad103b0b1c001033410110a301410041af8c084108109c01103f410047ad103b0ba60102047f017e230041206b22002400103310a501410210a401410041b88e0841021099012102410110860121012000410236021c2000411c6a41ba8e0841041092012103200028021c10a20110232104200041106a200110d40120002802102101200041086a2004420188200210ae0120012003106820002802082101200028020c21021024024020014101710440200210b5020c010b2002104a10b6020b200041206a24000bc20102057f017e230041206b22002400103310a501410110a401410041b88e08410210990121012000410136021c2000411c6a220341be8e08410c108d01200028021c10a2012000200136021c200041106a41fa8c08410c10562000280214210120002802102104108502210210df012105200041086a200420012003200210b901200028020c21012000280208210220002005106a10ae01200220011068200028020421022000280200210110242001200210c102200145ad103b200041206a24000bbc0102047f017e230041206b22002400103310a501410110a401410041b88e08410210990121012000410136021c2000411c6a220341be8e08410c108d012102200028021c10a2012000200136021c10232104200041106a41868d08410c1056200041086a200028021020002802142003200210850210b901200028020c21012000280208210220002004420188106a10ae01200220011068200028020421022000280200210110242001200210c102200145ad103b200041206a24000b6701037f230041106b22002400103310a501410110a401410041b88e08410210990121022000410136020c2000410c6a41b08e084108108d01200028020c10a201108502200010d501200242002000280200200028020410b801410173ad103b200041106a24000ba80102057f017e230041106b22002400103310a501410210a401410041b88e0841021099012103410110860121022000410236020c2000410c6a41b08e084108108d01200028020c10a2011023210510850221012000200210d40120002802042102024020002802002204105f450440200542018821050c010b420021052001105f450d0041e98708410e1048000b2001200320052004200210b801410173ad103b200041106a24000bfd0101047f230041306b220024001084011a410210a30141001086012101200041011086013602042000200136020010840120001069360208104621032000418182840836000f2000418182840836020c230041206b22012400200110c40136020c200141003b01182001410036021020012000410c6a22022d00063a001c200120022f00043b011a20012002280000360214200041246a200341032000200041046a2001410c6a200141106a10bf01200141206a2400104b2201200041086a10da012002200136020820024112360204200241e69108360200200020002802283602202000200028022436021c2000200028022c360218200210f001000b2a02017f017e1033410210a301410041948f084110109c0121004101101a2101106a20002001106b10340bf50102077f027e230041306b22002400410310a301410041aa91084106109c0121024101101a21074102104f21032000108101106920002903002108200041106a106a200220071071200028020c2205104622012001200028022410292001108f0221012002200720034200104b104b1064027f200110ad02450440200510460c010b024020002802082202108501450440104b2103104b210420002802202106200850044020062002200142002003200410630c020b200620022008200142002003200410640c010b104b2102104b21032000280220200142002002200310201a0b200510462001108c020b1034200041306a24000be40101047f230041306b220024001084011a410210a30141001086012101200041011086013602042000200136020010840120001069360208104621032000418182840836000f2000418182840836020c230041206b22012400200110c40136020c200141003b01182001410036021020012000410c6a22022d00063a001c200120022f00043b011a20012002280000360214200041246a200341012000200041046a2001410c6a200141106a10bf01200141206a24002002200041086a10c402200020002802283602202000200028022436021c2000200028022c360218200210f001000b3b001033410710a301410041948f084110109c014101104f41021086014103104f4104108601410541b091084105109a01410610860110c60210350b930101047f230041206b220024001033410310a301410041948f084110109c0121014101104f21022000410241b091084105109a0122034110763a0012200020033b01102000200236020c200020013602082000104b360214200010c4013602182000104b220136021c200041086a2000410c6a200041146a200041186a2000411c6a200041106a2001105c1a200041206a24000bfd0102047f017e230041406a22002400103310a501410210a401410041948f084110109c0121014101101a210420004102360234200041346a41b78c084104109201200028023410a201200020013602301088022203105f450440200041286a41868408410d1056200041206a2000280228200028022c200041306a1057200041186a2000280220200028022420041058200028021c21012000280218210220002003100536023c20004100360238200020033602340340200041106a200041346a104c20002802104101710440200041086a2002200120002802141060200028020c2101200028020821020c010b0b20022001105a0b200041406b24000bab0102037f017e230041306b220024001033410310a301410041948f084110109c0121014101101a21032000410241bb8c08410e109a0122024110763a002e200020023b012c20002001360228200041206a41b4840841171056200041186a20002802202000280224200041286a1057200041106a2000280218200028021c20031058200041086a200028021020002802142000412c6a105e2000280208200028020c105a200041306a24000bee07020e7f017e230041a0016b22002400103310a501410610a401410041948f084110109c0121064101104f2103410210860121044103104f210b4104108601210c4105108601210d2000410636029001200041f0006a210220004190016a220141c491084109108801104f2105200141c4910841091089012107200141c491084109108a012108027f0240200141c491084109108801101a220e42015804404100200ea741016b0d021a0c010b41c49108410941d889084112108701000b41010b21092002200141c491084109108901360210200220093a000c20022008360208200220073602042002200536020020002802900110a201200028028001210720002d007c210820002802782105200028027421092000280270210a2000200c36026c2000200b36026820002004360264200020033602602000200636025c104b2204200d104d200041d0006a41d58308410d1056200041c8006a20002802502000280254200041dc006a1057200041406b2000280248200028024c200041e0006a1059200041386a20002802402000280244200041e4006a105d200041306a2000280238200028023c200041e8006a1059200041286a20002802302000280234200041ec006a105d200028022c210220002802282103104b10492101200a105220011053200920011053024020051085014504402005200110530c010b41042001109e02200141fc8808410410181a0b2008200110d00120072001105320022001104d02402004105f45044020002004100536027820004100360274200020043602700340200041206a200041f0006a104c2000280220410171450d02200041186a2003200220002802241060200028021c2102200028021821030c000b000b200041106a20032002106120002802142102200028021021030b200320021062210e200041f0006a106a2006200e10712000200028027c10492201100536029801410021022000410036029401200020013602900120004190016a220141cf8808412010a7011098012103200141cf8808412010a7012104200041086a20004190016a41cf8808412010a701109102108b020240024020002802084101710440200028020c2106200041003a009f0120012000419f016a410141cf8808412010aa0202400240024020002d009f010e020201000b41cf88084120418e8008410d108102000b410121020b20004190016a41cf8808412010a7012101200028029801200028029401470d01200a2003108a02450d0220092004108001450d0220052006108001452002200847720d0220072001108001450d02200041a0016a24000f0b41cf8808412041ef8808410d108102000b41cf8808412041808008410e108102000b41cd910841191054000b4e02027f017e230041106b220024001033410310a301410041948f084110109c0121014101101a210220004102104f36020c20002001360208200041086a20022000410c6a105b200041106a24000b4e02027f017e230041106b220024001033410310a301410041948f084110109c0121014101101a210220004102104f36020c20002001360208200041086a20022000410c6a1055200041106a24000b950202067f017e1033410410a301410041b88e0841021099012100410141948f084110109c0121024102101a21064103104f2103230041206b2201240020012003360214200120023602102001200637030820012000360218230041206b22002400200041186a200141086a220241086a2903003703002000200229030037031020022802102103200041086a10d50120002802082104200028020c2105230041106b220124002001200041106a220041086a36020820012000410c6a36020c20012000290300370300230041206b22002400200041106a200141086a2903003703002000200241146a220236021c200020023602182000200536020420002004360200200020012903003703082000200310b101000bc80202067f037e230041f0006b22002400103310a501410510a401410041b88e0841021099012105410141948f084110109c0121014102101a21074103104f21024104108601210320004105360220200041206a41bb910841091092012104200028022010a2012000200236021c200020013602182000200536021410232108200041086a200310d40120082106024020002802082201105f450d0042002106200210e001450d0041e98708410e1048000b200020073703302000200436022c20002001360228200020083703202000200041146a36024020002000411c6a220236023c2000200041186a220336023820002006370348200020073703582000200041c4006a360268200020043602542000200136025020002002360264200020033602602000200041c8006a36026c200041d8006a200520062001200410b401200041f0006a24000bed0102097f017e230041306b220024001033410810a301410041b88e0841021099012103410141948f084110109c0121014102104f2102410310860121044104104f210541051086012106410641b091084105109a0121074107108601210820002002360214200020013602102000200336020c200020011049200210462004200520062007200810c60222093703182000200041146a22023602242000200041106a220336022020002000410c6a2204360228200041186a10e601419d8a08410410a2022201200410da012001200310d7012001200910dc012001200210d6012001104b1031200041306a24000b0b00410e4196860810b3030b0b00411041a4860810b3030be402010d7f230041306b220124001084011a410410a3014100108601210241011086012109109e012104410341c98c08410c109f01210a1084011046210520011069360208200141246a2107230041306b2200240041ee85084101200441ff017141056b220641ff01712204410349220b1b210c41012103200441024d0440200641027441fc0771220341b892086a2802002108200341ac92086a28020021030b2000200c410f4100200b1b10562000200536022820002000290300370220200041146a2205200041206a2206200210bd01200041086a22022005200910bd01200028020c2003200810bb01200441014b0440200041286a200041106a2802003602002000200029020837032020022006200a10be010b2007200028021036020820072000290208370200200041306a24002001410c6a2202200141086a10c402200120012802283602202001200128022436021c2001200128022c360218200210f001000ba303010d7f230041306b220124001084011a410410a301410010860121054101108601210c109e012104410341c98c08410c109f0121061084011046210720011069360208200141246a210b230041306b2200240041fd8508210241b7860821084116210941b4860821034103210a02400240024002400240200441ff0171220441016b0e080303020003020001040b4104210a4183860821020c020b4100210a4101210341002109410121080c020b4180860821020b41cd860841b78608200441056b41ff017141034922031b2108411d411620031b2109200221030b20002008200910562000200736022820002000290300370220200041146a2202200041206a2207200510bd01200041086a22052002200c10bd01200028020c2003200a10bb01200441056b41ff017141014b0440200041286a200041106a2802003602002000200029020837032020052007200610be010b200b2000280210360208200b2000290208370200200041306a24002001410c6a2206200141086a10c402200120012802283602202001200128022436021c2001200128022c360218200610f001000b0b00410f4187860810b4030b0b00410d41e1850810b4030b920102027f027e230041306b220024001033410310a301410041af8c084108109c0121014101101a21024102101a21032000200136022c200041206a4193840841131056200041186a200028022020002802242000412c6a1057200041106a2000280218200028021c20021058200041086a20002802102000280214200310582000280208200028020c105a200041306a24000b990202047f017e230041406a22002400103310a501410210a401410041af8c084108109c0121014101101a210420004102360234200041346a41a78c084108109201200028023410a201200020013602301088022103200041286a41a68408410e1056200041206a2000280228200028022c200041306a1057200041186a2000280220200028022420041058200028021c21012000280218210202402003105f45044020002003100536023c20004100360238200020033602340340200041106a200041346a104c2000280210410171450d02200041086a2002200120002802141060200028020c2101200028020821020c000b000b200020022001106120002802042101200028020021020b20022001105a200041406b24000b7602027f017e230041206b220024001033410210a301410041af8c084108109c0121014101101a21022000200136021c200041106a41df840841111056200041086a200028021020002802142000411c6a105720002000280208200028020c2002105820002802002000280204105a200041206a24000b0b00411441cb840810b5030b0b00411241f4830810b5030b4e01027f230041106b220024001033410010a301200041086a10b2022201109202109102108b022000280208410171450440200141ef8808410d108402000b200028020c10a702200041106a24000b12001033410010a30110b302109202101e1a0b960102097f017e230041306b220024001033410010a301200041086a10b002200041186a210320002802082104200028020c1097022105410121020340200220054b450440200320042002109c02200028022c2000280228200029031820002802242000280220104b2201105320011099022001109a02200110512001109b022001101e1a200241016a21020c010b0b200041306a24000bc40102047f017e230041306b220024001033410110a3014100419391084105109f012101200041106a10b00202402001450d002000280210210220002802141097022001490d00200041186a20022001109c02200028022c21012000280228200029031820002802242000280220101e1a10a702103510342000200110053602202000410036021c200020013602180340200041086a200041186a104c20002802084101710440200028020c101e1a0c010b0b200041306a24000f0b41b4940841121002000b6d01067f230041106b220124001033410010a301200141086a10b00220012802082104200128020c220510970221024101210003402003200020024b7245044020042000109802109402200020024f2103200020002002496a21000c010b0b20054100109502200141106a24000bcd0402097f017e230041d0016b22002400410110a3012000410041b88e084102109901360224200041286a10810110232109200041186a41fa8c08410c10562000200942018822093703382000200028021c22013602442000200028021822023602402000200041246a22053602482000416736025441674101410010071a2000420037035820002009370360200028023421032000290328210902402000280230220410850145044020002003360294012000200436029001200020093703880120004201370274200020013602702000200236026c2000200041d4006a2206360284012000200041d8006a2207360280012000200041e0006a220836027c20002005360268200042013703b001200020004194016a22043602ac01200020004190016a22053602a801200020093703a0012000200041cc006a22033602c801200020033602c4012000200136029c012000200236029801200020063602c001200020073602bc01200020083602b801200041b0016a21032009500440200041086a200220012005200410b201200028020c21012000280208210210ae0121042003200028022420042002200110f8010c020b200041106a200220012000280224200041a0016a10b30120002802142101200028021021022003106a10ae012002200110f8010c010b200020013602b401200020023602b00120004201370298012000200041246a3602ac012000200041d4006a3602a8012000200041d8006a3602a4012000200041e0006a3602a00120004198016a200028022420032002200110f8010b200041d0016a24000b0b0041868a08411710b6030bd80602077f017e230041c0016b22002400410110a3012000410041b88e08410210990136022c200041206a1075200028022021042000280224210310232107104b2105200041186a4101410010562000200536025420004111360250200041fe8f0836024c20002007420188220737033820002003360234200020043602302000200028021c220136024420002000280218220236024020002000412c6a3602482000416736025c2005200041dc006a10cd0120004200370360200020073703682000200336027420002004360270024020044101710440200041d8006a21040240024002402003107a0e020102000b200020013602ac01200020023602a801200020043602a401200020043602a0012000411136029001200041fe8f0836028c012000200041f4006a360288012000200041dc006a36029c012000200041e0006a360298012000200041e8006a360294012000200220012000412c6a200310b90120002802042101200028020021022000418c016a106a10ae012002200110f8010c030b200020013602a0012000200236029c012000411136028c01200041fe8f08360288012000200041dc006a360298012000200041e0006a360294012000200041e8006a3602900110ae01210320004188016a200028022c20032002200110f8010c020b200041f8006a2003107b20002903782107200020004184016a220536029c01200020004180016a2206360298012000200737039001200020043602b801200020043602b401200041113602a401200041fe8f083602a0012000200136028c0120002002360288012000200041dc006a3602b0012000200041e0006a3602ac012000200041e8006a3602a801200041a0016a21032007500440200041086a200220012006200510b201200028020c21012000280208210210ae0121042003200028022c20042002200110f8010c020b200041106a20022001200028022c20004190016a10b30120002802142101200028021021022003106a10ae012002200110f8010c010b200020013602a401200020023602a0012000411136028c01200041fe8f083602880120002000412c6a36029c012000200041dc006a360298012000200041e0006a360294012000200041e8006a3602900120004188016a200028022c20032002200110f8010b200041c0016a24000b980102027f027e230041d0006b22002400410110a3012000410041b88e084102109901360214200041086a10752000290308210310232102104b21012000410141001056200020013602302000411136022c200041fe8f083602282000200242038022023703202000200237033820002003370318200020002903003703402000200041146a360248200041186a10f901200041d0006a24000b910102037f027e230041d0006b22002400410310a301410041b88e08410210990121014101101a21034102101a21042000200136020c200041106a2201108101104b21022000410141001056200020023602402000411636023c200041c5900836023820002004370330200020033703202000200029030037032820002000410c6a360248200110f701200041d0006a24000bd60102057f027e230041e0006b2200240010a501410410a401410041b88e0841021099012101410110860121024102101a21054103101a210620004104360210200041106a220341ba8e0841041092012104200028021010a2012000200136020c200041d0006a1081012000200210d40120002802002101200041386a41e90741ea0710af0210c302200041186a200041d8006a290300370300200020063703302000200436022c20002001360228200020053703202000200029035037031020002000410c6a360248200310f701200041e0006a24000bb50202067f037e230041d0006b22002400103310a501410310a401410041b88e0841021099012102410110860121044102101a210720004103360218200041186a41e390084112108d012101200028021810a20120002002360208104b21022000200110052203360214200041003602102000200136020c0340200320054b04402000410c6a220110b8022103200141d08908410810e70121062000200110870236022420002003360220200020063703182002200041186a106620002802142103200028021021050c010b0b102321062000200410d40120002903002108200041286a41d10f41d20f10af0210c302200020083703402000200236021c20004101360218200020073703202000200620077d42097e420a803703382000200041086a360248200041186a10f901200041d0006a24000bb90102047f017e230041306b220024001033410410a301410041b88e0841021099012101410110a00121024102101a21044103104f210320002001360214200041246a200041146a20022004200310bf022000200028022c36022020002000290224370218200041086a200041186a10ec012000200028020c220136022820002000280208220236022402402001107a4101460d00200210ae020d0041f59008411e1054000b200041246a200110a50210b902200041306a24000bb70202057f017e230041406a220024001033410410a301410041b88e0841021099012102410110a00121014102101a21054103104f21032000200236021c200041346a2000411c6a2001104920052003104610bf022000200028023c36023020002000290234370228200041106a200041286a10ea01200020002802142202360224200020002802102204360220024002402002107a4101470440200410ae02450d010b200041206a200210a50210b902200041346a2000411c6a20012005200310bf022000200028023c36023020002000290234370228200041086a200041286a10ea012000200028020c22013602382000200028020822033602342001107a4101470440200310ae02450d020b200041346a200110a50210b902200041406b24000f0b41f59008411e1054000b41f59008411e1054000bb70202057f017e230041406a220024001033410410a301410041b88e0841021099012102410110a00121014102101a21054103104f21032000200236021c200041346a2000411c6a2001104920052003104610bf022000200028023c36023020002000290234370228200041106a200041286a10ec01200020002802142202360224200020002802102204360220024002402002107a4101470440200410ae02450d010b200041206a200210a50210b902200041346a2000411c6a20012005200310bf022000200028023c36023020002000290234370228200041086a200041286a10ec012000200028020c22013602382000200028020822033602342001107a4101470440200310ae02450d020b200041346a200110a50210b902200041406b24000f0b41f59008411e1054000b41f59008411e1054000be20202067f017e230041206b22002400103310a501410110a401410041b88e084102109901210120004101360210200041106a220341ec8f084109108d012102200028021010a2012000200136020020032000200210c0022000200028021836020c20002000290210370204200041046a10ed01220110c801220310ad02044041d48a08411910a2022205200310db012005104b10310b200110c60110b402104b2103200020021005220136020c20004100360208200020023602040340200120044d450440200041046a22011086022102200141d08908410810e701210620011087021a20021085012101106a210402402001450440200420022006106b21010c010b104721012004106c41c49508200110400b2000200136021c20002002360218200020063703102003200041106a10c701200028020c2101200028020821040c010b0b41c68a08410e10a2022201200310a0022001104b1031200041206a24000b910101047f230041206b22002400103310a501410110a401410041b88e084102109901210120004101360214200041146a220241ec8f084109108d012103200028021410a201200020013602042002200041046a2201200310c002200210eb0120022001200310c0022000200028021c36021020002000290214370208200041086a10ed0110c60110b402200041206a24000ba30102057f017e230041106b22002400103310a501410110a401410041b88e084102109901210320004101360204200041046a220141ec8f084109108d012102200028020410a2012000200336020020012000200210c002200110eb0120012000200210c002200028020c21022000280208210320002802042101107310df0110ae012104200128020020042003200210671a1024106e10c60110b402200041106a24000b0b00418f9008412610b6030ba40102087f017e230041306b22002400200041186a220110a601200028021c200028022010a101200110810120002903182108200028022021022000200028022436021420022008200041146a10b102200041086a10b002200028020c2103200028020810a402210520002802142106104b210720002002360224200020053602202000200736022c200020063602282000200837031820032001109602200041306a24000bea0302097f017e230041f0006b22002400200041d8006a220110a601200028025c200028026010a10110a501410010a40120004100360258200141a48f0841061092012101200028025810a20141f78908410f10a20221022000200110053602602000410036025c200020013602580340200041186a200041d8006a104c200028021841017104402002200028021c10d1010c010b0b2002104b1031200041106a10752000280214210102402000280210410171044020002001100536022c2000410036022820002001360224200041d4006a2102200041386a21010340200041306a200041246a107720002802304101470d02200041d0006a200141086a2903002209370300200020012903003703482009a722034200200210b102200010b00220002802042104200028020041fe8f0810a302210620002802542107104b210820002003360264200020063602602000200836026c20002007360268200042003703582004200041d8006a1096020c000b000b2000200136023010704200200041306a10b102200041086a10b002200028020c2101200028020841fe8f0810a30221031070210420002802302105104b210620002004360264200020033602602000200636026c20002005360268200042003703582001200041d8006a1096020b200041f0006a24000b920101057f230041106b22002400200041046a220110a601200141df90084104108b0141df900841041094012102200141db9008410410970121032000280208200028020c10a10110a501410010a40120004100360200200041a48f0841061092012104200028020010a20141eb8b08411910a2022201200210d9012001200310db0120012004109f021031200041106a24000b5901047f230041106b22002400200010a6012000280204200028020810a10120001079200028020810492102200028020c1046210341eb8b08411910a2022201200210d8012001200310db012001104b1031200041106a24000bf20202097f027e230041e0006b22002400200041c8006a220410a601200028024c200028025010a1012000106e220110c8012202360210200210c401108a02450440107022024200200041106a10b102200041086a10b002200028020c2103200028020810a402210620002802102107104b210820002002360254200020063602502000200836025c2000200736025820004200370348200320041096020b20002001100536021c2000410036021820002001360214200041c4006a2102200041286a21010340200041206a200041146a10772000280220410147450440200041406b2203200141086a290300220937030020002001290300220a3703382009a7200a200210b102200010b00220002802042105200028020010a40221072003280200210320002903382109200028024410462108104b210420002003360254200020073602502000200436025c20002008360258200020093703482005200041c8006a1096020c010b0b200041e0006a24000bb70c02087f017e230041b0016b22002400024010c90122041092022201105f0d00200020011049220110053602940120004100360290012000200136028c012000418c016a2201419b8008411910a70121022001419b8008411910ff012103104b210103402003044020012000418c016a419b8008411910a701104d200341016b21030c010b0b0240024002402000280294012000280290014604402004109402200041246a200210cb012000280244450d042000418c016a2203200210cb0120002802ac01450d0402400240200341e08e08411210ca01450440200341868a08411710ca010d01200341f28e08411910ca01450d02200041d4006a2202200110a80110a501200241b88e084102108e012101200241948f084110108b01108c0121032002418b8f08410910970121022000280258200028025c10a101200020013602482000200336024c2000200236025020004180016a200041c8006a10bc0220004200370368200020002802800136027820002000290284013703602000200041d0006a3602742000200041cc006a360270200041e0006a10f201000b10a501410010a4012000410036028001200041e0006a2103230041106b22022400027f20004180016a2204109101220541ebde0147410020051b45044041002105200441a48f08410610930121042002410c6a0c010b027f2004280200418496082802004e0440104b0c010b200441a48f0841061089010b21042002200536020c41012105200241086a0b2004360200200320053602002003200228020c36020420032002280208360208200241106a240020002802800110a20120002802682104200028026421022000280260210520011005210110a5014100200110a10102402005410171044041b18f084105104e10890221012000200241187420024180fe03714108747220024108764180fe037120024118767272360260200120034104104e104d20012004104d0c010b41aa8f084107104e1089022201200210041a0b200110a9010c060b20011005210110a5014100200110a101200041e0006a220210810120002903602108200028026821012000200028026c360280012001200820004180016a10b102200041086a10b002200028020c2103200028020810a40221052000280280012106104b21072000200136026c20002005360268200020073602742000200636027020002008370360200320021096020c050b2000418c016a2203200210cb0120002802ac01450d04200341f89108411310ca01044010a501410010a40120004100360254200041e0006a200041d4006a109001200028025410a201200028026821032000280260200020011005360288012000410036028401200020013602800110a50120004180016a41b591084106108e01210420002802840120002802880110a101200041106a108301200028021021014101710440200028021421022001108501450d05200210ad02450d052004200210e5010c050b10b202200110900210930210b3021094020c050b2000418c016a2203200210cb0120002802ac01450d04200341e69108411210ca01044010a501410010a40120004100360254200041e0006a200041d4006a109501200028025410a20120002802682102200028026421032000280260200020011005360288012000410036028401200020013602800110a50120004180016a41b591084106108e01210520002802840120002802880110a1014101710440200041186a108301200028021c21012000280218108501450d04200110ad02450d042005200110e5010c040b10b202200310930210b3021094020c050b2002200110c502450d042000418c016a2203200210cb0120002802ac01450d04200341929208411510ca01044010a501410010a4012000410036028001200041e0006a20004180016a10900120002802800110a20120002802682102200028026020011005210110a5014100200110a10110b3022101410171044020012002102e1a0c060b20011094020c050b2000418c016a2203200210cb0120002802ac01450d042002200110c502450d042003200210cb0120002802ac01450d042003200210cb0120002802ac010d010c040b419b8008411941808008410e108102000b41b68f0841361002000b10b3022002102e1a0c010b10b3022003102e1a0b200041b0016a24000b9e0101027f230041306b22062400027f2001500440200641106a2005410d1056200641086a200628021020062802142000105720062802082107200628020c0c010b200641286a200420031056200641206a2006280228200628022c20001057200641186a200628022020062802242001105820062802182107200628021c0b21002006200720002002105920062802002006280204105a200641306a24000b3001017f230041106b22032400200341086a2002410c10562000200329030837020420002001360200200341106a24000b840102047f017e230041206b22012400103310a501410110a401410041b88e084102109901210220014101360210200141106a220341be8e08410c108d01200128021010a2012001200236020c20012000410c1056200129030021051085022102200120053702182001200236021420012001410c6a360210200310e101200141206a24000bfa0202077f017e230041306b22032400103310a501410210a4014100418b920841071099012104410141948f084110109c0121052003410236021c2003411c6a220641a792084105108d012102200328021c10a2012003200536021820032004360214200320021005360224200341003602202003200236021c200341086a2107230041406a22022400200241286a200120001056200241206a2002280228200228022c200341186a1057200241186a20022802202002280224200341146a10c001200228021c210420022802182105200241386a200641086a280200360200200220062902003703300340200241306a10c10141ff01712208450d002008410d4604402007200436020420072005360200200241406b240005200241106a200810c201200241086a200520042002280210200228021410c301200228020c2104200228020821050c010b0b20032903082109104b210220032009370228200320023602242003411536022020034192920836021c200610f501000b7801047f230041106b220324001033410110a301410041af8c084108109c012104230041106b22022400200241086a20012000105620022002280208200228020c200410bc0120022802042104200341086a2205200228020036020020052004360204200241106a24002003280208200328020c10f301000b950302067f027e230041e0006b22022400103310a501410610a401410041af8c084108109c0121044101101a2108410210860121064103101a210941041086012107410541bb8c08410e109a01210320024106360254200241d4006a41b78c084104109201200228025410a201200220034110763a0052200220033b01501088022105200241c8006a200120001056200241406b2002280248200228024c200410bc01200241386a2002280240200228024420081058200241306a2002280238200228023c20061060200241286a2002280230200228023420091058200241206a2002280228200228022c20071060200241186a20022802202002280224200241d0006a105e200228021c21032002280218210402402005105f45044020022005100536025c20024100360258200220053602540340200241106a200241d4006a104c2002280210410171450d02200241086a2004200320022802141060200228020c2103200228020821040c000b000b200220042003106120022802042103200228020021040b20042003105a200241e0006a24000bae0102047f027e230041406a220224001033410410a301410041b88e0841021099012103410110a00121044102101a21064103104f21052002200336020c10232107200241106a22032002410c6a20042006200510bf022002290214210620022802102104104b210520022004360238200220053602302002200136022c2002200036022820024280ade20437032020022006370318200220074280dac4097d370310200310f601200241406b24000b0ba3150600418080080b55696e70757420746f6f206c6f6e67696e76616c69642076616c756573657269616c697a6572206465636f6465206572726f723a207472616e736665722065786563757465207265717569726573207061796d656e740041f580080ba506696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747363616e6e6f74207375627472616374206265636175736520726573756c7420776f756c64206265206e65676174697665455344544c6f63616c4275726e455344544e46544275726e455344544c6f63616c4d696e74455344544e46544164645175616e74697479455344544e46544372656174654368616e67654f776e657241646472657373455344544d65746144617461557064617465455344544e4654416464555249455344544d6f64696679526f79616c74696573455344545365744e657755524973455344544e465455706461746541747472696275746573455344544d657461446174615265637265617465455344544d6f6469667943726561746f7266616c73657472756563616e467265657a6563616e5769706563616e506175736563616e5472616e736665724e4654437265617465526f6c6563616e4d696e7463616e4275726e63616e4368616e67654f776e657263616e5570677261646563616e4164645370656369616c526f6c6573757064617465546f6b656e4944726567697374657244796e616d69634e46545346544d4554416368616e6765546f44796e616d69637365745370656369616c526f6c65756e5365745370656369616c526f6c65464e477265676973746572416e64536574416c6c526f6c65737265676973746572416e64536574416c6c526f6c657344796e616d6963697373756569737375654e6f6e46756e6769626c65697373756553656d6946756e6769626c6543425f434c4f535552450041a387080b01010041b787080b9d0d02ffff4d756c7469455344544e46545472616e73666572455344544e46545472616e73666572455344545472616e73666572656d707479207472616e7366657273796e6320726573756c7476616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e67656572726f72206465636f64696e67204553445420617474726962757465733a204553445420657870656374656445474c4473696e676c652045534454207061796d656e742065787065637465642e6974656d73746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e6774687661722061726773696e707574206f7574206f662072616e676563616c6c6261636b5f6461746163616c6c6261636b5f726573756c7472657472696576655f66756e64735f63616c6c6261636b73656e646372656174656c617374497373756564546f6b656e6c6173744572726f724d65737361676562616c616e6365735f61667465726261636b5f7472616e73666572735f65676c645f6576656e746261636b5f7472616e73666572735f6d756c74695f6576656e7473796e635f63616c6c5f66616c6c69626c655f6572726f7273796e635f63616c6c5f66616c6c69626c655f737563636573736163636570745f66756e64735f73796e635f726573756c746563686f5f617267756d656e74735f73796e635f726573756c746173796e635f63616c6c5f6576656e745f63616c6c6261636b6261636b5f7472616e73666572736f70745f617267736f757263655f616464726573736e65775f75726973746f6b656e5f6964757269736e65775f617474726962757465736e756d5f646563696d616c73746f6b656e5f747970656368696c645f73635f6164647265737363616c6c5f636f756e74736163636570745f66756e647372656a6563745f66756e64736563686f5f617267756d656e747372657472696576655f66756e64736765745f6f776e65725f6164647265737372657472696576655f66756e64735f6d756c74696163636570745f66756e64735f6563686f5f7061796d656e7472657472696576655f66756e64735f776974685f7472616e736665725f6578656372657472696576655f72656365697665645f66756e64735f696d6d6564696174656c797061796d656e7473746f617267737061796d656e745f61726773746f6b656e6163636570745f66756e64735f66756e636563686f5f617267735f63616c6c6261636b73656e645f66756e64735f74776963655f63616c6c6261636b63625f616d6f756e74746f6b656e5f6964656e746966696572726573756c74737563636573736572726f726e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e74726163747472616e73666572736e65775f6f776e65727472616e736665725f63616c6c6261636b72657472696576655f66756e64735f6261636b5f7472616e73666572735f63616c6c6261636b7468655f6f6e655f63616c6c6261636b72657472696576655f657364745f63616c6c6261636b6172673261726731746f6b656e5f7061796d656e745f617267734f6e6c79206f6e652045534454207061796d656e74206578706563746564696e6465786e66745f69737375655f63616c6c6261636b6e66745f6964636f6c6f7263616c6c6572617267756d656e747361747472735f6172676f7269675f6174747220213d206465636f6465645f617474727366745f69737375655f63616c6c6261636b657364745f69737375655f63616c6c6261636b616464726573736368616e67655f726f6c65735f63616c6c6261636b726f6c6573fd020200000302000303020003000000030000000400000045534454526f6c654c6f63616c4d696e7445534454526f6c654c6f63616c4275726e45534454526f6c654e465443726561746545534454526f6c654e46544164645175616e7469747945534454526f6c654e46544275726e45534454526f6c654e46545570646174654174747269627574657345534454526f6c654e465441646455524945534454526f6c654e4654526563726561746545534454526f6c654d6f64696679526f79616c7469657345534454526f6c654d6f6469667943726561746f7245534454526f6c655365744e6577555249455344545472616e73666572526f6c650102030405060708090a0b0c696e646578206f7574206f662072616e676570616e6963206f636375727265640041e094080b5a0100000000000000020000000000000004000000000000000800000000000000100000000000000020000000000000004000000000000000800000000000000000020000000000000001000000000000000400000000000000080041c095080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -2187,7 +2312,9 @@ "bigIntGetCallValue", "bigIntGetESDTExternalBalance", "bigIntGetExternalBalance", + "bigIntGetInt64", "bigIntGetUnsignedArgument", + "bigIntIsInt64", "bigIntMul", "bigIntNew", "bigIntSetInt64", @@ -2208,6 +2335,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", @@ -2217,21 +2345,26 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCaller", "managedCreateAsyncCall", "managedCreateContract", "managedDeployFromSourceContract", "managedExecuteOnDestContext", + "managedExecuteOnDestContextWithErrorReturn", + "managedGetAllTransfersCallValue", "managedGetBackTransfers", "managedGetCallbackClosure", "managedGetESDTTokenData", + "managedGetESDTTokenType", "managedGetMultiESDTCallValue", "managedGetOriginalTxHash", "managedIsESDTFrozen", "managedIsESDTLimitedTransfer", "managedIsESDTPaused", "managedMultiTransferESDTNFTExecute", + "managedMultiTransferESDTNFTExecuteWithReturn", "managedSCAddress", "managedSignalError", "managedTransferValueExecute", @@ -2246,12 +2379,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/forwarder.wasm", - "size": 46230, + "size": 48535, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/proxy-test-first/output/proxy-test-first.mxsc.json b/test/features/composability/proxy-test-first/output/proxy-test-first.mxsc.json index 7dc95834a..310c783c0 100644 --- a/test/features/composability/proxy-test-first/output/proxy-test-first.mxsc.json +++ b/test/features/composability/proxy-test-first/output/proxy-test-first.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "proxy-test-first", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -95,12 +95,9 @@ "hasCallback": true, "types": {} }, - "code": "0061736d01000000016d1260000060017f006000017f60027f7f017f60017f017f60027f7f0060037f7f7f017f60047f7f7f7f0060017f017e60047f7f7f7f017f60057f7f7f7f7f0060027f7e006000017e60077e7f7f7f7f7f7f017f60017e0060077f7e7f7f7f7f7f0060037f7f7f0060037f7e7f0002fc051f03656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000303656e760e626967496e74536574496e743634000b03656e760f6d4275666665725365744279746573000603656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000103656e76106d4275666665724765744c656e677468000403656e760b7369676e616c4572726f72000503656e7612626967496e7447657443616c6c56616c7565000103656e76096d4275666665724571000303656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000803656e760f6765744e756d417267756d656e7473000203656e76186d616e616765644765744f726967696e616c547848617368000103656e76126d427566666572476574417267756d656e74000303656e76126d42756666657253746f726167654c6f6164000303656e76146d427566666572436f707942797465536c696365000903656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76136d42756666657253746f7261676553746f7265000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000803656e760e636865636b4e6f5061796d656e74000003656e760a6765744761734c656674000c03656e76156d616e61676564437265617465436f6e7472616374000d03656e760f636c65616e52657475726e44617461000003656e76156d427566666572546f426967496e745369676e6564000303656e760d626967496e744973496e743634000403656e760e626967496e74476574496e743634000803656e7614736d616c6c496e7446696e6973685369676e6564000e03656e76166d616e6167656455706772616465436f6e7472616374000f03656e76136d42756666657247657442797465536c696365000903656e76106d616e616765644173796e6343616c6c0007033231040202000204090703060206060401010100001007020605110507010a040404050505020a05020101000000000000000005030100040616037f01418080080b7f004189850c0b7f004190850c0b07de010b066d656d6f7279020004696e69740048146465706c6f795365636f6e64436f6e7472616374004915757067726164655365636f6e64436f6e7472616374004a16666f7277617264546f4f74686572436f6e7472616374004b22666f7277617264546f4f74686572436f6e74726163745769746843616c6c6261636b004c146d6573736167654f74686572436f6e7472616374004d206d6573736167654f74686572436f6e74726163745769746843616c6c6261636b004e0863616c6c4261636b004f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aab20310f01017f10002201200010011a20010b0e01017f102122004202100220000b1901017f41d8840841d8840828020041016b220036020020000b2701017f230041106b22002400200041013b010e41672000410e6a410210031a200041106a24000bec0101037f230041106b2200240041021024450440415a10040b02400240027f024002400240415a10054104760e020102000b41be8008411d1006000b415d410110240d011a415d1007415d0c010b200041086a420037030020004200370300415a41002000411010250d0220002802002101200028020c2102415841878208410b10031a4158200141187420014180fe03714108747220014108764180fe037120014118767272100841004c0d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200041106a24000f0b4199800841251006000b41ea8108411d1006000b2b01027f20004188850c2d0000220171200041ff01714622024504404188850c20002001723a00000b20020b0f002000200120032002101d4100470b2e01017f41db80084117102722042000200110091a200441f28008410310091a20042002200310091a2004100a000b1101017f102122022000200110031a20020b2a01017e200020012002102b101322034280808080105a04402001200241ad8208410e1026000b2003a70b08004101410010270b0c00200020012002102b102c0b2f01017f200028020022034184850c2802004e04402001200241f5800841111026000b2000200341016a36020020030b0d00200010212200100e1a20000b120020004504400f0b4186810841121006000b19004184850c28020020004c04400f0b4186810841121006000b1400100c20004604400f0b4198810841191006000b19004184850c28020041004e04400f0b41f5800841111006000b0b004184850c100c3602000b130041764200100220004176200120021033000b0d002000200120022003101e000b1b01027f10212200100d41b18108410a10272201200010011a20010b5201037f2002200028022046047f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030541010b450b3901027f230041106b220224001029210320022001ad200241086a103720032002280200200228020410031a200020031038200241106a24000ba30202037f027e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882206200142288822074280fe0383848484370000200041082001423f87a741ff017122032006a746220420032001423088a741ff01714671220520046a2005410020032007a741ff0171461b22046a2004410020032001422088a741ff0171461b22046a2004410020032001a72204411876461b22056a200541002003200441107641ff0171461b22056a200541002003200441087641ff0171461b22036a200341002001501b6a2203200220034107716a2c00004100482001420053732003410047716b22036b3602042000200220036a3602000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410091a200241106a24000b1f0020022003102721022000102936020820002002360204200020013602000bc30101057f230041206b220124001034410141001027210220002802002103200028020422052002104420022003200510091a2000280208220010054102762002104420012000100536021820014100360214200120003602100340200141086a200141106a1040200128020841017104402001200128020c22031005220041187420004180fe03714108747220004108764180fe03712000411876727236021c20022001411c6a410410091a2002200310011a0c010b0b200210121a200141206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081033000b0d00200010212200100f1a20000b3a01037f2000103e2101200028020421021000210320002802002002200120031010044041db8108410f103f000b2000200120026a36020420030b6e01027f230041106b220124002001410036020c2000280200200028020422022001410c6a41041025044041db8108410f103f000b2000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f418080084119102722022000200110091a2002100a000b6201027f230041106b220224002002410b6a2001104120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410251a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b0a0041b58408412010270b9d0102027f017e230041106b220524002005200141da83084109103920052802082201410110362005290200210710291a10212206200210111a200120061038102922022003280204200328020810031a20012002103810291a20012004101f10382000200136020820002007370200027f200328020022014504404100210120050c010b200541013602002005410c6a0b2001360200200541106a24000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410091a200241106a24000b4601027f41828408410e10272201103c22001005412047044041928208411b10272200200110011a200041f28008410310091a200041bb8208411010091a2000100a000b20000b0f0041828408410e1027200010121a0b6201017f41e0840c41e0840c280200220141036a3602004180850c2d00001a2001418080044f0440419e840841171006000b2000410336020820004103360200200141e284086a41033a0000200141e084086a22014183063b0000200020013602040b2b01017f10144101102f4100102c22001005412047044041c78308411341bb820841101026000b200010460bdf0202047f017e230041206b2200240010231a4101102f4100102c2101102321021029220341fb001036101521041022200442a08d067d2004200442a08d06561b2002200141672003102122011021220210161a10172001101f210310292101200020021005360214200041003602102000200236020c034020002000410c6a10402000280200410171044020012000280204101f10380c010b0b200020011005360214200041003602102000200136020c2000411b6a2000410c6a10410240024020002d001b0440200028001c220141187420014180fe03714108747220014108764180fe037120014118767272417510181a4175101941004c0d014175101a22044280808080087d42ffffffff6f580d022003104620044220864280808080107c422087101b200041206a24000f0b41bb8108410b41f5800841111026000b41bb8108410b41c6810841151026000b41bb8108410b41e3830841121026000b3202047f017e10231a4101102f4100102c21001023210110451029220341c80310361015102220012000416720034167101c0ba20102057f017e230041206b2200240010231a4100102f1023210220001045360200230041106b22012400200141046a200041da820841051039200128020c220341d600103620012902042105200041146a2204200336020820042005370200200141106a2400200020023602082000200029021837020c20002000280214360204200041046a2200280204200041106a20002802002000280208200028020c103b000bc70102057f017e230041206b2200240010231a4100102f1023210420001045360200230041106b22022400200241046a200041cb8208410f1039200228020c220341d600103620022902042105200041046a2201200336020820012005370200200241106a2400200028020421022000290208210510292103200020053702182000200436021420002002360204200020033602102000410b36020c200041df8208360208200141046a103a20012802102001411c6a200128020020012802142001280218103b000b5001047f230041206b2200240010144100102f2000104536020410202102200041146a22031047200041086a2201200041046a20022003104210432001280200280200200128020420012802081032000b800101037f230041306b2200240010144100102f20001045360208102021022000410c6a22011047200041246a200041086a20022001104210432000102936021820004110360214200041ea82083602102000200029022837021c2000200028022436020c200141046a103a2001280200280200200128021020012802141032000ba40502077f017e230041d0006b22002400024010342203103c22011005450d0020002001101f220110053602102000410036020c20002001360208200041086a2201103d21022001103e2101102921040340200104402004200041086a103d1038200141016b21010c010b0b024002402000280210200028020c460440416c4101410010031a2003416c10121a200041c8006a22034200370300200041406b22054200370300200041386a220642003703002000420037033020021005220141214f0d0120024100200041306a2202200110251a200041206a2003290300370300200041186a2005290300370300200041106a200629030037030020002001360228200020002903303703082001450d03200041086a220141df8208410b1035450440200141ea8208411010350440103110302000410036022c41002101027f41002000412c6a220341fa8208410c1028220545200541ebde0146720d001a20032802004184850c2802004e04401029210141010c010b200341fa8208410c102a210141010b2103200220013602082002200536020420022003360200200028022c102e200410051031102d42d5aa0121070c040b4191830841361006000b103110302000410036022c200041306a2101027f2000412c6a220241868308410b1028220341ebde0147410020031b450440200241868308410b102b100b210741000c010b027f20022802004184850c2802004e044010290c010b200241868308410b102a0bad210741010b2102200120073703082001200336020420012002360200200028022c102e200029033821072000280230200410051031102d410171450d020c030b41ad8208410e103f000b41908408410e1006000b41f58308410d102720002007200041306a103720002802002000280204102710121a0b200041d0006a24000b0be9040200418080080bd50473657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f5355524573796e6320726573756c74617267756d656e74206f7574206f662072616e6765696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e676545474c442d30303030303073746f72616765206465636f6465206572726f7220286b65793a20696e70757420746f6f206c6f6e67626164206172726179206c656e6774687061794d6557697468526573756c747061794d6570617943616c6c6261636b6d6573736167655f63616c6c6261636b5f63616c6c5f726573756c7463616c6c5f726573756c746e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e74726163746f746865725f636f6e74726163745f616464726d6573736167654d65696e707574206f7574206f662072616e676563616c6c6261636b5f696e666f6f746865725f636f6e747261637470616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f72fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe0041d884080b0438ffffff", + "code": "0061736d010000000167116000006000017f60017f0060027f7f017f60027f7f0060037f7f7f017f60017f017f60047f7f7f7f0060017f017e60047f7f7f7f017f60027f7e0060057f7f7f7f7f006000017e60077e7f7f7f7f7f7f017f60017e0060077f7e7f7f7f7f7f0060037f7f7f0002df051d03656e760a6d4275666665724e6577000103656e760d6d427566666572417070656e64000303656e760e626967496e74536574496e743634000a03656e760f6d4275666665725365744279746573000503656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000203656e76106d4275666665724765744c656e677468000603656e760b7369676e616c4572726f72000403656e76096d4275666665724571000303656e76126d427566666572417070656e644279746573000503656e76126d616e616765645369676e616c4572726f72000203656e7619736d616c6c496e744765745369676e6564417267756d656e74000803656e760f6765744e756d417267756d656e7473000103656e76186d616e616765644765744f726967696e616c547848617368000203656e76126d427566666572476574417267756d656e74000303656e76126d42756666657253746f726167654c6f6164000303656e76146d427566666572436f707942797465536c696365000903656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76136d42756666657253746f7261676553746f7265000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000803656e760e636865636b4e6f5061796d656e74000003656e760a6765744761734c656674000c03656e76156d616e61676564437265617465436f6e7472616374000d03656e760f636c65616e52657475726e44617461000003656e76176d427566666572546f536d616c6c496e745369676e6564000803656e7614736d616c6c496e7446696e6973685369676e6564000e03656e76166d616e6167656455706772616465436f6e7472616374000f03656e76196d42756666657246726f6d536d616c6c496e745369676e6564000a03656e76136d42756666657247657442797465536c696365000903656e76106d616e616765644173796e6343616c6c000703313006010100010707030501050506020202000010070105040407020b09060606040404010b04010202000000000000000005030100040616037f01418080080b7f0041a5850c0b7f0041b0850c0b07de010b066d656d6f7279020004696e69740045146465706c6f795365636f6e64436f6e7472616374004615757067726164655365636f6e64436f6e7472616374004716666f7277617264546f4f74686572436f6e7472616374004822666f7277617264546f4f74686572436f6e74726163745769746843616c6c6261636b0049146d6573736167654f74686572436f6e7472616374004a206d6573736167654f74686572436f6e74726163745769746843616c6c6261636b004b0863616c6c4261636b004c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ac51e300f01017f10002201200010011a20010b0e01017f101f22004202100220000b1901017f41e4840841e4840828020041016b220036020020000b2701017f230041106b22002400200041013b010e41672000410e6a410210031a200041106a24000b800201037f230041106b2201240041a4850c2d0000220041087145044041a4850c20004108723a0000415910040b02400240027f024002400240415910054104760e020102000b41be8008411d1006000b415d42001002415d0c010b200141086a42003703002001420037030041591005410f4d0d024159410020014110102220012802002100200128020c2102415841938208410b10031a4158200041187420004180fe03714108747220004108764180fe037120004118767272100741004c0d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200141106a24000f0b4199800841251006000b41f68108411d1006000b1a00200020012002200310384504400f0b41e3810841131006000b2e01017f41db80084117102422042000200110081a200441f28008410310081a20042002200310081a20041009000b1101017f101f22022000200110031a20020b2a01017e2000200120021028101222034280808080105a04402001200241b98208410e1023000b2003a70b08004101410010240b0c00200020012002102810290b2f01017f2000280200220341a0850c2802004e04402001200241f5800841111023000b2000200341016a36020020030b0d002000101f2200100d1a20000b120020004504400f0b4186810841121006000b190041a0850c28020020004c04400f0b4186810841121006000b1400100b20004604400f0b4198810841191006000b190041a0850c28020041004e04400f0b41f5800841111006000b0b0041a0850c100b3602000b130041764200100220004176200120021030000b0d002000200120022003101c000b1b01027f101f2200100c41b18108410a10242201200010011a20010b5201037f2002200028022046047f02402002450d00034020002d0000220420012d00002205460440200041016a2100200141016a2101200241016b22020d010c020b0b200420056b21030b20030541010b450b6f01037f230041106b2202240010262103200241003b010c200241003602082002200141087420014180fe0371410876723b010e20034107410620014180024922041b200141800220041b411874411f756a2201200241086a6a410820016b10031a200020031034200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410081a200241106a24000b1f0020022003102421022000102636020820002002360204200020013602000bc30101057f230041206b220124001031410141001024210220002802002103200028020422052002104120022003200510081a2000280208220010054102762002104120012000100536021820014100360214200120003602100340200141086a200141106a103d200128020841017104402001200128020c22031005220041187420004180fe03714108747220004108764180fe03712000411876727236021c20022001411c6a410410081a2002200310011a0c010b0b200210111a200141206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081030000b0f002000200120032002101b4100470b0d002000101f2200100e1a20000b5201047f2000103b2101024002402000280204220320002802002204100522024b0d002002200120036a2202490d0020042003200110002201100f450d010b41d48108410f103c000b2000200236020420010b7901027f230041106b220124002001410036020c2000280208200028020422026b41034d044041d48108410f103c000b200028020020022001410c6a410410222000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f418080084119102422022000200110081a20021009000b6201027f230041106b220224002002410b6a2001103e20022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410381a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b0a0041c18408412010240b9d0102027f017e230041106b220524002005200141e683084109103520052802082201410110332005290200210710261a101f2206200210101a200120061034102622022003280204200328020810031a20012002103410261a20012004101d10342000200136020820002007370200027f200328020022014504404100210120050c010b200541013602002005410c6a0b2001360200200541106a24000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410081a200241106a24000b4601027f418e8408410e102422011039220010054120470440419e8208411b10242200200110011a200041f28008410310081a200041c78208411010081a20001009000b20000b0f00418e8408410e1024200010111a0b5a01017f4180850c4180850c280200220141036a3602002001418080044f044041aa840841171006000b20004103360208200041033602002001418285086a41033a00002001418085086a22014183063b0000200020013602040b2b01017f10134101102c4100102922001005412047044041d38308411341c7820841101023000b200010430bda0202047f017e230041206b2200240010211a4101102c410010292101102121021026220341fb001033101421041020200442a08d067d2004200442a08d06561b2002200141672003101f2201101f220210151a10162001101d210310262101200020021005360214200041003602102000200236020c034020002000410c6a103d2000280200410171044020012000280204101d10340c010b0b200020011005360214200041003602102000200136020c2000411b6a2000410c6a103e0240024020002d001b0440200028001c220141187420014180fe03714108747220014108764180fe0371200141187672722201100541094f0d012001101722044280808080087d42ffffffff6f580d022003104320044220864280808080107c4220871018200041206a24000f0b41bb8108410b41f5800841111023000b41bb8108410b41c68108410e1023000b41bb8108410b41ef830841121023000b3202047f017e10211a4101102c4100102921001021210110421026220341c8031033101410202001200041672003416710190ba20102057f017e230041206b2200240010211a4100102c1021210220001042360200230041106b22012400200141046a200041e6820841051035200128020c220341d600103320012902042105200041146a2204200336020820042005370200200141106a2400200020023602082000200029021837020c20002000280214360204200041046a2200280204200041106a20002802002000280208200028020c1037000bc70102057f017e230041206b2200240010211a4100102c1021210420001042360200230041106b22022400200241046a200041d78208410f1035200228020c220341d600103320022902042105200041046a2201200336020820012005370200200241106a2400200028020421022000290208210510262103200020053702182000200436021420002002360204200020033602102000410b36020c200041eb8208360208200141046a103620012802102001411c6a2001280200200128021420012802181037000b5001047f230041206b2200240010134100102c20001042360204101e2102200041146a22031044200041086a2201200041046a20022003103f1040200128020028020020012802042001280208102f000b800101037f230041306b2200240010134100102c20001042360208101e21022000410c6a22011044200041246a200041086a20022001103f10402000102636021820004110360214200041f682083602102000200029022837021c2000200028022436020c200141046a1036200128020028020020012802102001280214102f000b940502077f017e230041d0006b22002400024010312203103922011005450d0020002001101d220110053602102000410036020c20002001360208200041086a2201103a21022001103b2101102621040340200104402004200041086a103a1034200141016b21010c010b0b024002402000280210200028020c460440416c4101410010031a2003416c10111a200041c8006a22034200370300200041406b22054200370300200041386a220642003703002000420037033020021005220141214f0d0120024100200041306a220220011022200041206a2003290300370300200041186a2005290300370300200041106a200629030037030020002001360228200020002903303703082001450d03200041086a220141eb8208410b1032450440200141f68208411010320440102e102d2000410036022c41002101027f41002000412c6a220341868308410c1025220545200541ebde0146720d001a200328020041a0850c2802004e04401026210141010c010b200341868308410c1027210141010b2103200220013602082002200536020420022003360200200028022c102b20041005102e102a42d5aa0121070c040b419d830841361006000b102e102d2000410036022c200041306a2101027f2000412c6a220241928308410b1025220341ebde0147410020031b450440200241928308410b1028100a210741000c010b027f200228020041a0850c2802004e044010260c010b200241928308410b10270bad210741010b2102200120073703082001200336020420012002360200200028022c102b20002903382107200028023020041005102e102a410171450d020c030b41b98208410e103c000b419c8408410e1006000b41818408410d102441672007101a416710111a0b200041d0006a24000b0bf5040200418080080be10473657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f5355524573796e6320726573756c7476616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d30303030303073746f72616765206465636f6465206572726f7220286b65793a20696e70757420746f6f206c6f6e67626164206172726179206c656e6774687061794d6557697468526573756c747061794d6570617943616c6c6261636b6d6573736167655f63616c6c6261636b5f63616c6c5f726573756c7463616c6c5f726573756c746e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e74726163746f746865725f636f6e74726163745f616464726d6573736167654d65696e707574206f7574206f662072616e676563616c6c6261636b5f696e666f6f746865725f636f6e747261637470616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f72fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe0041e484080b0438ffffff", "report": { "imports": [ - "bigIntGetCallValue", - "bigIntGetInt64", - "bigIntIsInt64", "bigIntSetInt64", "checkNoPayment", "cleanReturnData", @@ -111,6 +108,7 @@ "mBufferCopyByteSlice", "mBufferEq", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntSigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -118,10 +116,10 @@ "mBufferSetBytes", "mBufferStorageLoad", "mBufferStorageStore", - "mBufferToBigIntSigned", + "mBufferToSmallIntSigned", "managedAsyncCall", "managedCreateContract", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedGetOriginalTxHash", "managedSignalError", "managedUpgradeContract", @@ -132,12 +130,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/proxy-test-first.wasm", - "size": 5957, + "size": 5703, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/proxy-test-second/output/proxy-test-second.mxsc.json b/test/features/composability/proxy-test-second/output/proxy-test-second.mxsc.json index befda32d3..75c78fa26 100644 --- a/test/features/composability/proxy-test-second/output/proxy-test-second.mxsc.json +++ b/test/features/composability/proxy-test-second/output/proxy-test-second.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "proxy-test-second", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -111,23 +111,24 @@ "hasCallback": false, "types": {} }, - "code": "0061736d0100000001460d60000060027f7f017f60017f0060027f7f006000017f60017f017f60037f7f7f017f60017e0060047f7f7f7f017f60017f017e60047f7f7f7f0060037f7f7f0060027f7e0002c7031203656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000203656e76106d4275666665724765744c656e677468000503656e760b7369676e616c4572726f72000303656e7612626967496e7447657443616c6c56616c7565000203656e76136d42756666657247657442797465536c696365000803656e760f6d4275666665725365744279746573000603656e76096d4275666665724571000103656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000203656e76126d427566666572476574417267756d656e74000103656e760f6d4275666665724765744279746573000103656e7619736d616c6c496e744765745369676e6564417267756d656e74000903656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e760f6765744e756d417267756d656e7473000403656e76196d42756666657246726f6d426967496e74556e7369676e6564000103656e76136d42756666657253746f7261676553746f7265000103656e7614736d616c6c496e7446696e6973685369676e6564000703656e760e636865636b4e6f5061796d656e74000003121104050a010402030b0c070200000000000005030100040616037f01418080080b7f0041e2820c0b7f0041f0820c0b076709066d656d6f7279020004696e6974001d057061794d65001e0f7061794d6557697468526573756c74001f096d6573736167654d6500200863616c6c4261636b00210775706772616465001d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab20c11ec0101037f230041106b2200240041021013450440415a10000b02400240027f024002400240415a10014104760e020102000b41a58008411d1002000b415d410110130d011a415d1003415d0c010b200041086a420037030020004200370300415a41004110200010040d0220002802002101200028020c2102415841928108410b10051a4158200141187420014180fe03714108747220014108764180fe037120014118767272100641004c0d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200041106a24000f0b4180800841251002000b41f58008411d1002000b2b01027f200041e1820c2d0000220171200041ff017146220245044041e1820c20002001723a00000b20020b2e01017f41c280084117101522042000200110071a200441d98008410310071a20042002200310071a20041008000b1101017f101622022000200110051a20020b1901017f41b8820841b8820828020041016b220036020020000b1400100d20004604400f0b41dc800841191002000b1401017f101622022001100e1a20002002100f1a0b0d002000200120021015100f1a0bb20202037f027e230041106b220424002004200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882205200142288822064280fe038384848437030820002001423f87a741ff017122002005a746220220002001423088a741ff01714671220320026a2003410020002006a741ff0171461b22026a2002410020002001422088a741ff0171461b22026a2002410020002001a72202411876461b22036a200341002000200241107641ff0171461b22036a200341002000200241087641ff0171461b22006a200041002001501b6a2200200441086a22022000410771722c00004100482001420053732000410047716b220020026a410820006b1019200441106a24000b0e0041cb8108410a10152000101a0b0e0041d58108410c1015200010180b5102017f017e10121a410110174100100b22014280808080087d42ffffffff6f58044041ad8108410841b9810841121014000b2001a721001012101c41ad8108410810152000ac101a200041016aac10100b1501017e10121a410110174100100b1012101c101b0b1b01017e10121a410110174100100b1012101c101b42f7ee0110100b9d05020a7f017e230041106b220524001011410410174100100b210a410110162209100c200541086a21084102416710091a0240024041671001220641004e044020060d01410121010c020b1022000b41e0820c2d00001a027f41c0820c2006410141c0820c280200220041007122016b410020011b20006a22016a360200200141c082086a200141ffff034d0d001a419f820841171002000b21010240200622044110490440200121000c010b024020012001410020016b41037122076a22024f0d002001210020070440200721030340200041003a0000200041016a2100200341016b22030d000b0b200741016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200420076b2203417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200341037121040b02402000200020046a22034f0d002004410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200441016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b41672001100a1a0b2008200636020420082001360200200528020c21002005280208210141031016220310091a20031001412047044041b581084104419d810841101014000b41e18108410c1015200a101a41ed8108410c10152009101841f98108410c101520012000101941858208410c10152003100f1a200541106a24000b02000b0b0041918208410e1002000b0bca020200418080080bb60266756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e74734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d303030303030626164206172726179206c656e677468696e69745f61726761726734696e707574206f7574206f662072616e67657061795f6d655f6172676c6173745f7061796d656e746d6573736167655f6d655f316d6573736167655f6d655f326d6573736167655f6d655f336d6573736167655f6d655f3470616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f720041b882080b0438ffffff", + "code": "0061736d0100000001400c60000060027f7f017f60017f0060027f7f0060027f7e006000017f60037f7f7f017f60017e0060017f017f60047f7f7f7f017f60017f017e60047f7f7f7f0002e6031303656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000203656e76106d4275666665724765744c656e677468000803656e760b7369676e616c4572726f72000303656e760e626967496e74536574496e743634000403656e76136d42756666657247657442797465536c696365000903656e760f6d4275666665725365744279746573000603656e76096d4275666665724571000103656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000203656e76126d427566666572476574417267756d656e74000103656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e7619736d616c6c496e744765745369676e6564417267756d656e74000a03656e760f6d4275666665724765744279746573000103656e760f6765744e756d417267756d656e7473000503656e76196d42756666657246726f6d426967496e74556e7369676e6564000103656e76136d42756666657253746f7261676553746f7265000103656e76196d42756666657246726f6d536d616c6c496e745369676e6564000403656e7614736d616c6c496e7446696e6973685369676e6564000703656e760e636865636b4e6f5061796d656e74000003100f050b0105020304070200000000000005030100040616037f01418080080b7f004181830c0b7f004190830c0b076709066d656d6f7279020004696e6974001c057061794d65001d0f7061794d6557697468526573756c74001e096d6573736167654d65001f0863616c6c4261636b00200775706772616465001c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020af0090f8d0201037f230041106b220124004180830c2d000022004108714504404180830c20004108723a0000415910000b0240027f024002400240415910014104760e020102000b41a58008411d1002000b415d42001003415d0c010b200141086a42003703002001420037030002404159100141104f044041594100411020011004450d0141f5800841131002000b41888108411d1002000b20012802002100200128020c2102415841a58108410b10051a4158200041187420004180fe03714108747220004108764180fe037120004118767272100641004c0d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200141106a24000f0b4180800841251002000b2e01017f41c280084117101522042000200110071a200441d98008410310071a20042002200310071a20041008000b1101017f101622022000200110051a20020b1901017f41cc820841cc820828020041016b220036020020000b1400100d20004604400f0b41dc800841191002000b1401017f101622022001100e1a20002002100f1a0b0f0041672001101020004167100f1a0b0e0041de8108410a1015200010190b0e0041e88108410c1015200010180b5102017f017e10131a410110174100100b22014280808080087d42ffffffff6f58044041c08108410841cc810841121014000b2001a721001013101b41c08108410810152000ac1019200041016aac10110b1501017e10131a410110174100100b1013101b101a0b1b01017e10131a410110174100100b1013101b101a42f7ee0110110b9805020a7f017e230041106b220524001012410410174100100b210a410110162209100a200541086a21084102416710091a0240024041671001220641004e044020060d01410121010c020b1021000b027f41e0820c2006410141e0820c280200220041007122016b410020011b20006a22016a360200200141e082086a200141ffff034d0d001a41b2820841171002000b21010240200622044110490440200121000c010b024020012001410020016b41037122076a22024f0d002001210020070440200721030340200041003a0000200041016a2100200341016b22030d000b0b200741016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002002470d000b0b2002200420076b2203417c716a220020024b0440034020024100360200200241046a22022000490d000b0b200341037121040b02402000200020046a22034f0d002004410771220204400340200041003a0000200041016a2100200241016b22020d000b0b200441016b4107490d000340200041003a0000200041076a41003a0000200041066a41003a0000200041056a41003a0000200041046a41003a0000200041036a41003a0000200041026a41003a0000200041016a41003a0000200041086a22002003470d000b0b41672001100c1a0b2008200636020420082001360200200528020c21002005280208210141031016220310091a20031001412047044041c88108410441b0810841101014000b41f48108410c1015200a101941808208410c101520091018418c8208410c1015200120001015100f1a41988208410c10152003100f1a200541106a24000b02000b0b0041a48208410e1002000b0bdd020200418080080bc90266756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d303030303030626164206172726179206c656e677468696e69745f61726761726734696e707574206f7574206f662072616e67657061795f6d655f6172676c6173745f7061796d656e746d6573736167655f6d655f316d6573736167655f6d655f326d6573736167655f6d655f336d6573736167655f6d655f3470616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f720041cc82080b0438ffffff", "report": { "imports": [ - "bigIntGetCallValue", "bigIntGetUnsignedArgument", + "bigIntSetInt64", "checkNoPayment", "getNumArguments", "mBufferAppendBytes", "mBufferEq", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntSigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", "mBufferGetLength", "mBufferSetBytes", "mBufferStorageStore", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedSignalError", "signalError", "smallIntFinishSigned", @@ -135,12 +136,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/proxy-test-second.wasm", - "size": 2617, + "size": 2337, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/recursive-caller/output/recursive-caller.mxsc.json b/test/features/composability/recursive-caller/output/recursive-caller.mxsc.json index 44a03e7f4..6fa45e078 100644 --- a/test/features/composability/recursive-caller/output/recursive-caller.mxsc.json +++ b/test/features/composability/recursive-caller/output/recursive-caller.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "recursive-caller", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -104,7 +104,7 @@ "hasCallback": true, "types": {} }, - "code": "0061736d01000000014a0d60027f7f0060027f7f017f60017f017f6000017f60047f7f7f7f0060017f0060000060037f7f7f017f60047f7f7f7f017f60027f7e0060017f017e60037f7f7f0060057f7f7f7f7f0002cb041803656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000103656e76106d616e61676564534341646472657373000503656e76126d427566666572476574417267756d656e74000103656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000503656e76106d4275666665724765744c656e677468000203656e76176d427566666572546f426967496e74556e7369676e6564000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760b7369676e616c4572726f72000003656e760f6765744e756d417267756d656e7473000303656e76186d616e616765644765744f726967696e616c547848617368000503656e760f6d4275666665725365744279746573000703656e76096d4275666665724571000103656e760e626967496e74536574496e743634000903656e76146d427566666572436f707942797465536c696365000803656e76136d42756666657253746f7261676553746f7265000103656e76196d42756666657246726f6d426967496e74556e7369676e6564000103656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000603656e76126d42756666657253746f726167654c6f6164000103656e76136d42756666657247657442797465536c696365000803656e76106d616e616765644173796e6343616c6c0004032625020303020401070802050304030b04030900040c020000000202010202000000000006060605030100030616037f01418080080b7f0041f482080b7f00418083080b074e06066d656d6f7279020004696e6974003a147265637572736976655f73656e645f66756e6473003b0863616c6c4261636b003c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab31e250f01017f10002201200010011a20010b0c01017f101a2200100220000b1901017f41f0820841f0820828020041016b220036020020000b0d002000101a220010031a20000b2e01017f419980084117101d22042000200110041a200441b08008410310041a20042002200310041a20041005000b1101017f101a220220002001100d1a20020b3d01017f230041106b22032400200341086a2000102e20032802084101710440200328020c1018200341106a24000f0b2001200241d182084111101c000b0f00200020012003200210164100470b4f01017f230041106b220124000240200010064104470d002001410036020c200041002001410c6a4104101f1a200128020c41c58eb1a204470d0041a08108410b101d21000b200141106a240020000b1400100b20004604400f0b41c580084119100a000b0a0041764200100f41760b0d0020002001200220031017000b1b01027f101a2200100c41de8008410a101d2201200010011a20010b180020012002101d210120001027360204200020013602000b1e0010271a200220032802001018102920002002360204200020013602000b080041014100101d0bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b100d1a200341106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410041a200241106a24000b160020022003102f20002002360204200020013602000b6e01017f230041206b2205240002402003102c0d0020022003102d20052004100636021c20054100360218200520043602140340200541086a200541146a102e2005280208410171450d012002200528020c102d0c000b000b2000200236020420002001360200200541206a24000b070020001006450b0d0010271a20002001101810290b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a4104101f1a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b1901017f10271a101a2202200128020010121a2000200210290b1600415841a08108410b100d1a41582000100e41004a0b0f01017f102722012000ad102820010b1201017f1027220220002001101d102920020b3a01037f200010342101200028020421021000210320002802002002200120031010044041918108410f1035000b2000200120026a36020420030b6e01027f230041106b220124002001410036020c2000280200200028020422022001410c6a4104101f044041918108410f1035000b2000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f418080084119101d22022000200110041a20021005000b100010271a20002001280200101810290b3201017f102721020240200128020010304504402001280200101821020c010b200241ab81084104100d1a0b2000200210290b1301017f102722022000ad10282001200210290b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410041a200241106a24000b08001014410010210b9e0b02097f017e230041406a220024001014410410214100101b22011006412047044041998208410241af81084110101c000b4101101b102021034102101a220210094103100822094280808080105a044041fc8108410741838108410e101c000b2000200136020c200020033602102000200236021441bf81084114103222012000410c6a220210362001200041106a220610372001200041146a2205102f20012009a7220410311013230041106b22012400200141086a41d38108410c1025200041186a2203200129030837020420032002360200200141106a2400200029021c210920002802182107102722012002103620012006103720012005102f200420011038200041306a220220013602082002411d360204200241df81083602002000200736023c20004200370320200020093703182000200536022c20002006360228230041206b22002400102441014100101d2101200341186a22022802002105200228020422042001103920012005200410041a2002280208220210064102762001103920002002100636021820004100360214200020023602100340200041086a200041106a102e200028020841017104402000200028020c22051006220241187420024180fe03714108747220024108764180fe03712002411876727236021c20012000411c6a410410041a2001200510011a0c010b0b200110111a200041206a2400200341286a22022106200328022421012003280200210520032802042104230041106b220024002000200436020c2000200536020820002001360204230041106b22012400200341086a22032802082001200328020c220536020c2001200336020820012002360204200120063602002802002104200041046a2102230041206b22032400200410304504402003200436020c200341186a200241086a2802003602002003200229020037031020032003410c6a220236021c230041206b220024002001280204210620012802002105200041086a200341106a220341086a28020036020020002002360218200020032902003703002000200128020c36021c20002001280208290300370310200028020028020021022000280204210320002802082104230041206b22012400200141106a200041106a220041086a2903003703002001200536021c20012006360218200120043602042001200336020020012000290300370308230041106b22032400200128020421062001280200210520012903085004402001280210210420012802142101230041206b22002400200041186a41f78008410c1025200041106a2000280218200028021c20041026200041086a200028021020002802142001102a20002000280208200028020c20052006102b200028020421012003200028020036020020032001360204200041206a2400200328020421002003280200210120021022200120001023000b230041206b22002400200041186a41e88008410f1025200041106a2000280218200028021c200141086a2201280208102620002802102107200028021421041027220820012903001028200420081029200041086a20072004200128020c102a20002802082104200028020c210110271a200120021018102920002004200120052006102b20002802042101200341086a2202200028020036020020022001360204200041206a2400200328020c21002003280208210110191022200120001023000b230041106b22002400200041086a200241086a2802003602002000200536020c20002002290200370300200028020021032000280204210120002802082102230041206b220024002000200536020c2000200236021c200020013602182000200636021420002000410c6a360210230041106b22012400200041106a220028020021022001200336020420012000290208370208200141046a22002802002802002002280200280200200028020420002802081023000bb70702087f017e230041f0006b2200240010242204101a220110151a024002400240024002402001102c0d00200020011018220110063602102000410036020c20002001360208200041086a220110332103200110342101102721020340200104402002200041086a10331029200141016b21010c010b0b2000280210200028020c470d01416c41014100100d1a2004416c10111a200041e0006a22044200370300200041d8006a22054200370300200041d0006a220642003703002000420037034820031006220141214f0d0220034100200041c8006a2001101f1a200041206a2004290300370300200041186a2005290300370300200041106a2006290300370300200020002903483703082001450d002001411d470d04200041086a210141002104411d210541df810821030240034020012d0000220620032d00002207460440200141016a2101200341016a2103200541016b22050d010c020b0b200620076b21040b20040d04200020021006360244200041003602402000200236023c100b1a2000413c6a2202419982084102101e101822041006412047044041998208410241af81084110101c000b2002418982084110101e1018102021052002418382084106101e101a220610071a027f230041106b22012400200241fc81084107101e2102200142003703082002100622034109490440024020024100200120036b41106a2003101f1a2001290308220842388620084280fe0383422886842008428080fc0783421886200842808080f80f834208868484200842088842808080f80f832008421888428080fc07838420084228884280fe0383200842388884848422084280808080105a0d00200141106a24002008a70c020b0b41fc8108410741838108410e101c000b21022000280240200028024449044041b380084112100a000b20002004360230200020053602342000200636023841df8108411d10322201200041306a10362001200041346a10372001200041386a102f2001200210311013200241024f0d030b200041f0006a24000f0b41838108410e1035000b41e28208410e100a000b2000101936026c230041106b22012400200141086a41bf81084114102520012802082104200128020c2203200041306a10362003200041346a1037200120042003200041386a102a20012802002103200241016b200128020422041038200041c8006a22022004360208200220033602042002200041ec006a360200200141106a2400200228020421002002280208210120022802002802001022200020011023000b419b82084136100a000b0b84030200418080080bf00273657269616c697a6572206465636f6465206572726f723a20617267756d656e74206465636f6465206572726f722028293a20746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245455344544e46545472616e73666572455344545472616e73666572696e70757420746f6f206c6f6e67696e70757420746f6f2073686f727445474c442d30303030303045474c44626164206172726179206c656e6774687265637572736976655f73656e645f66756e64736163636570745f66756e64737265637572736976655f73656e645f66756e64735f63616c6c6261636b636f756e746572616d6f756e74746f6b656e5f6964656e746966696572746f6e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374746f6f2066657720617267756d656e747370616e6963206f636375727265640041f082080b0438ffffff", + "code": "0061736d01000000014a0d60027f7f0060027f7f017f60017f017f6000017f60047f7f7f7f0060017f0060000060037f7f7f017f60047f7f7f7f017f60017f017e60027f7e0060037f7f7f0060057f7f7f7f7f0002eb041903656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000103656e76106d616e61676564534341646472657373000503656e76126d427566666572476574417267756d656e74000103656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000503656e76106d4275666665724765744c656e677468000203656e76196d427566666572546f536d616c6c496e74556e7369676e6564000903656e76176d427566666572546f426967496e74556e7369676e6564000103656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760b7369676e616c4572726f72000003656e760f6765744e756d417267756d656e7473000303656e76186d616e616765644765744f726967696e616c547848617368000503656e760f6d4275666665725365744279746573000703656e76096d4275666665724571000103656e760e626967496e74536574496e743634000a03656e76146d427566666572436f707942797465536c696365000803656e76136d42756666657253746f7261676553746f7265000103656e76196d42756666657246726f6d426967496e74556e7369676e6564000103656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000603656e76126d42756666657253746f726167654c6f6164000103656e76136d42756666657247657442797465536c696365000803656e76106d616e616765644173796e6343616c6c00040327260203030204010702050304030b04030a00040c0002000004080202010202000000000006060605030100030616037f01418080080b7f00419883080b7f0041a083080b074e06066d656d6f7279020004696e6974003c147265637572736976655f73656e645f66756e6473003d0863616c6c4261636b003e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aff1d260f01017f10002201200010011a20010b0c01017f101b2200100220000b1901017f419483084194830828020041016b220036020020000b0d002000101b220010031a20000b2e01017f419980084117101e22042000200110041a200441b08008410310041a20042002200310041a20041005000b1101017f101b220220002001100e1a20020b3d01017f230041106b22032400200341086a2000102f20032802084101710440200328020c1019200341106a24000f0b2001200241f282084111101d000b4f01017f230041106b220124000240200010064104470d002001410036020c200041002001410c6a410410311a200128020c41c58eb1a204470d0041b38108410b101e21000b200141106a240020000b1400100c20004604400f0b41c580084119100b000b0a0041764200101041760b0d0020002001200220031018000b1b01027f101b2200100d41de8008410a101e2201200010011a20010b180020012002101e210120001027360204200020013602000b1e0010271a200220032802001019102920002002360204200020013602000b080041014100101e0bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b100e1a200341106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410041a200241106a24000b160020022003102c20002002360204200020013602000b6e01017f230041206b2205240002402003102d0d0020022003102e20052004100636021c20054100360218200520043602140340200541086a200541146a102f2005280208410171450d012002200528020c102e0c000b000b2000200236020420002001360200200541206a24000b1901017f10271a101b2202200128020010131a2000200210290b070020001006450b0d0010271a20002001101910290b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410311a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b1a00200020012002200310314504400f0b41a081084113100b000b0f00200020012003200210174100470b1600415841b38108410b100e1a41582000100f41004a0b0f01017f102722012000ad102820010b1201017f1027220220002001101e102920020b5201047f200010362101024002402000280204220320002802002204100622024b0d002002200120036a2202490d00200420032001100022011011450d010b41918108410f1037000b2000200236020420010b7901027f230041106b220124002001410036020c2000280208200028020422026b41034d044041918108410f1037000b200028020020022001410c6a410410302000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f418080084119101e22022000200110041a20021005000b100010271a20002001280200101910290b3201017f102721020240200128020010324504402001280200101921020c010b200241be81084104100e1a0b2000200210290b1301017f102722022000ad10282001200210290b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410041a200241106a24000b08001015410010210b9e0b02097f017e230041406a220024001015410410214100101c22011006412047044041ba8208410241d081084110101d000b4101101c102021034102101b2202100a4103100922094280808080105a0440419d8208410741c28108410e101d000b2000200136020c200020033602102000200236021441e081084114103422012000410c6a220210382001200041106a220610392001200041146a2205102c20012009a7220410331014230041106b22012400200141086a41f48108410c1025200041186a2203200129030837020420032002360200200141106a2400200029021c210920002802182107102722012002103820012006103920012005102c20042001103a200041306a220220013602082002411d3602042002418082083602002000200736023c20004200370320200020093703182000200536022c20002006360228230041206b22002400102441014100101e2101200341186a22022802002105200228020422042001103b20012005200410041a2002280208220210064102762001103b20002002100636021820004100360214200020023602100340200041086a200041106a102f200028020841017104402000200028020c22051006220241187420024180fe03714108747220024108764180fe03712002411876727236021c20012000411c6a410410041a2001200510011a0c010b0b200110121a200041206a2400200341286a22022106200328022421012003280200210520032802042104230041106b220024002000200436020c2000200536020820002001360204230041106b22012400200341086a22032802082001200328020c220536020c2001200336020820012002360204200120063602002802002104200041046a2102230041206b22032400200410324504402003200436020c200341186a200241086a2802003602002003200229020037031020032003410c6a220236021c230041206b220024002001280204210620012802002105200041086a200341106a220341086a28020036020020002002360218200020032902003703002000200128020c36021c20002001280208290300370310200028020028020021022000280204210320002802082104230041206b22012400200141106a200041106a220041086a2903003703002001200536021c20012006360218200120043602042001200336020020012000290300370308230041106b22032400200128020421062001280200210520012903085004402001280210210420012802142101230041206b22002400200041186a41f78008410c1025200041106a2000280218200028021c20041026200041086a200028021020002802142001102a20002000280208200028020c20052006102b200028020421012003200028020036020020032001360204200041206a2400200328020421002003280200210120021022200120001023000b230041206b22002400200041186a41e88008410f1025200041106a2000280218200028021c200141086a2201280208102620002802102107200028021421041027220820012903001028200420081029200041086a20072004200128020c102a20002802082104200028020c210110271a200120021019102920002004200120052006102b20002802042101200341086a2202200028020036020020022001360204200041206a2400200328020c210020032802082101101a1022200120001023000b230041106b22002400200041086a200241086a2802003602002000200536020c20002002290200370300200028020021032000280204210120002802082102230041206b220024002000200536020c2000200236021c200020013602182000200636021420002000410c6a360210230041106b22012400200041106a220028020021022001200336020420012000290208370208200141046a22002802002802002002280200280200200028020420002802081023000bc50602087f017e230041f0006b2200240010242204101b220110161a024002400240024002402001102d0d00200020011019220110063602102000410036020c20002001360208200041086a220110352102200110362101102721030340200104402003200041086a10351029200141016b21010c010b0b2000280210200028020c470d01416c41014100100e1a2004416c10121a200041e0006a22044200370300200041d8006a22054200370300200041d0006a220642003703002000420037034820021006220141214f0d0220024100200041c8006a20011030200041206a2004290300370300200041186a2005290300370300200041106a2006290300370300200020002903483703082001450d002001411d470d04200041086a210141002104411d21054180820821020240034020012d0000220620022d00002207460440200141016a2101200241016a2102200541016b22050d010c020b0b200620076b21040b20040d04200020031006360244200041003602402000200336023c100c1a2000413c6a220141ba82084102101f101922021006412047044041ba8208410241d081084110101d000b200141aa82084110101f101910202104200141a482084106101f101b220510081a027f02402001419d82084107101f2201100641094904402001100722084280808080105a0d012008a70c020b419d8208410741838108410e101d000b419d8208410741c28108410e101d000b21032000280240200028024449044041b380084112100b000b20002002360230200020043602342000200536023841808208411d10342201200041306a10382001200041346a10392001200041386a102c2001200310331014200341024f0d030b200041f0006a24000f0b41c28108410e1037000b41838308410e100b000b2000101a36026c230041106b22012400200141086a41e081084114102520012802082104200128020c2202200041306a10382002200041346a1039200120042002200041386a102a20012802002102200341016b20012802042204103a200041c8006a22032004360208200320023602042003200041ec006a360200200141106a2400200328020421002003280208210120032802002802001022200020011023000b41bc82084136100b000b0ba5030200418080080b910373657269616c697a6572206465636f6465206572726f723a20617267756d656e74206465636f6465206572726f722028293a20746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245455344544e46545472616e73666572455344545472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e647345474c442d30303030303045474c44696e70757420746f6f206c6f6e67626164206172726179206c656e6774687265637572736976655f73656e645f66756e64736163636570745f66756e64737265637572736976655f73656e645f66756e64735f63616c6c6261636b636f756e746572616d6f756e74746f6b656e5f6964656e746966696572746f6e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374746f6f2066657720617267756d656e747370616e6963206f6363757272656400419483080b0438ffffff", "report": { "imports": [ "bigIntGetUnsignedArgument", @@ -124,6 +124,7 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedGetOriginalTxHash", "managedSCAddress", @@ -134,12 +135,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/recursive-caller.wasm", - "size": 5111, + "size": 5125, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/composability/scenarios/forw_raw_init_sync_echo.scen.json b/test/features/composability/scenarios/forw_raw_init_sync_echo.scen.json index 085233e5a..d58f8ae04 100644 --- a/test/features/composability/scenarios/forw_raw_init_sync_echo.scen.json +++ b/test/features/composability/scenarios/forw_raw_init_sync_echo.scen.json @@ -56,7 +56,7 @@ }, { "address": "sc:forwarder", - "endpoint": "", + "endpoint": "str:init", "topics": [ "str:execute_on_dest_context_result" ], diff --git a/test/features/composability/scenarios/forw_raw_sync_fallible.scen.json b/test/features/composability/scenarios/forw_raw_sync_fallible.scen.json index 7d1bd005b..b7f1fdfa5 100644 --- a/test/features/composability/scenarios/forw_raw_sync_fallible.scen.json +++ b/test/features/composability/scenarios/forw_raw_sync_fallible.scen.json @@ -15,7 +15,7 @@ "sc:forwarder": { "nonce": "0", "balance": "0", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" } } }, diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_accept_egld.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_accept_egld.scen.json index 8e4cd24b9..82dffdfbd 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_accept_egld.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_accept_egld.scen.json @@ -84,8 +84,7 @@ }, "expect": { "out": [], - "status": "4", - "message": "str:transfer execute requires payment", + "status": "0", "logs": "*", "gas": "*", "refund": "*" @@ -104,7 +103,7 @@ "nonce": "0", "balance": "1000", "storage": { - "str:call_counts|nested:str:accept_funds": "1" + "str:call_counts|nested:str:accept_funds": "2" }, "code": "mxsc:../vault/output/vault.mxsc.json" }, diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_accept.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_accept.scen.json index 5d1c00ad4..470a4733d 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_accept.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_accept.scen.json @@ -10,7 +10,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", @@ -50,7 +50,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_reject.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_reject.scen.json index 4052721dc..4af9f30ce 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_reject.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_0_reject.scen.json @@ -10,7 +10,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", @@ -50,7 +50,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_accept.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_accept.scen.json index 843e3fc6a..6972b1256 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_accept.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_accept.scen.json @@ -10,7 +10,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_reject.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_reject.scen.json index 040244a5c..479325c15 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_reject.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_egld_reject.scen.json @@ -10,7 +10,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", @@ -89,7 +89,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_accept.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_accept.scen.json index 61730f3f2..e17aa2186 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_accept.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_accept.scen.json @@ -13,7 +13,7 @@ "esdt": { "str:FWD-TOKEN": "1000" }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_reject.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_reject.scen.json index 83af8bf10..705cc3e3a 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_reject.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_esdt_reject.scen.json @@ -13,7 +13,7 @@ "esdt": { "str:FWD-TOKEN": "1000" }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_accept.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_accept.scen.json index 17c42a1e8..adff89607 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_accept.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_accept.scen.json @@ -29,7 +29,7 @@ ] } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_reject.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_reject.scen.json index 02b47c096..241b770d8 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_reject.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_egld_reject.scen.json @@ -29,7 +29,7 @@ ] } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", @@ -154,7 +154,7 @@ ] } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_accept.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_accept.scen.json index 52e53c276..e8bab32fb 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_accept.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_accept.scen.json @@ -13,7 +13,7 @@ "esdt": { "str:FWD-TOKEN": "1000" }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_reject.scen.json b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_reject.scen.json index ca580acdf..31fcc4873 100644 --- a/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_reject.scen.json +++ b/test/features/composability/scenarios/forw_raw_transf_exec_fallible_multi_esdt_reject.scen.json @@ -13,7 +13,7 @@ "esdt": { "str:FWD-TOKEN": "1000" }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transfer_fallible_egld.scen.json b/test/features/composability/scenarios/forw_raw_transfer_fallible_egld.scen.json index 43120e1fd..eddf712aa 100644 --- a/test/features/composability/scenarios/forw_raw_transfer_fallible_egld.scen.json +++ b/test/features/composability/scenarios/forw_raw_transfer_fallible_egld.scen.json @@ -10,7 +10,7 @@ "sc:forwarder": { "nonce": "0", "balance": "1000", - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_err.scen.json b/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_err.scen.json index d413e34cc..5565e4a5c 100644 --- a/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_err.scen.json +++ b/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_err.scen.json @@ -21,7 +21,7 @@ "frozen": "true" } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_ok.scen.json b/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_ok.scen.json index 74b822452..55b6951ed 100644 --- a/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_ok.scen.json +++ b/test/features/composability/scenarios/forw_raw_transfer_fallible_multi_ok.scen.json @@ -13,7 +13,7 @@ "esdt": { "str:FWD-TOKEN": "1000" }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_accept.scen.json b/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_accept.scen.json index c090b9d5f..faac34a33 100644 --- a/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_accept.scen.json +++ b/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_accept.scen.json @@ -29,7 +29,7 @@ ] } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_reject.scen.json b/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_reject.scen.json index a8a34fda5..1a21af226 100644 --- a/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_reject.scen.json +++ b/test/features/composability/scenarios/forwarder_call_sync_fallible_multi_transfer_egld_reject.scen.json @@ -29,7 +29,7 @@ ] } }, - "code": "mxsc:../forwarder-barnard/output/forwarder-barnard.mxsc.json" + "code": "mxsc:../forwarder/output/forwarder.mxsc.json" }, "sc:vault": { "nonce": "0", diff --git a/test/features/composability/scenarios/forwarder_get_esdt_token_data.scen.json b/test/features/composability/scenarios/forwarder_get_esdt_token_data.scen.json index 16ba9b90b..3c9473c43 100644 --- a/test/features/composability/scenarios/forwarder_get_esdt_token_data.scen.json +++ b/test/features/composability/scenarios/forwarder_get_esdt_token_data.scen.json @@ -139,6 +139,7 @@ { "step": "scQuery", "id": "sft-attributes", + "comment": "token type currently not implemented properly in mandos, hence the *", "tx": { "to": "sc:forwarder", "function": "get_esdt_token_data", @@ -150,7 +151,7 @@ }, "expect": { "out": [ - "1", + "*", "300", "true", "keccak256:str:SFT-00003-HASH", @@ -223,6 +224,7 @@ { "step": "scQuery", "id": "missing-nonce", + "comment": "token type currently not implemented properly in mandos, hence the *", "tx": { "to": "sc:forwarder", "function": "get_esdt_token_data", @@ -234,7 +236,7 @@ }, "expect": { "out": [ - "1", + "*", "0", "false", "", diff --git a/test/features/composability/scenarios/promises_multi_transfer.scen.json b/test/features/composability/scenarios/promises_multi_transfer.scen.json index 4285be0cc..b3bae7fd8 100644 --- a/test/features/composability/scenarios/promises_multi_transfer.scen.json +++ b/test/features/composability/scenarios/promises_multi_transfer.scen.json @@ -59,7 +59,7 @@ "3", "6" ], - "gasLimit": "100,000,000", + "gasLimit": "150,000,000", "gasPrice": "0" }, "expect": { diff --git a/test/features/composability/scenarios/promises_multi_transfer_err.scen.json b/test/features/composability/scenarios/promises_multi_transfer_err.scen.json index 11f7de6c4..fd83480fb 100644 --- a/test/features/composability/scenarios/promises_multi_transfer_err.scen.json +++ b/test/features/composability/scenarios/promises_multi_transfer_err.scen.json @@ -59,7 +59,7 @@ "3", "6" ], - "gasLimit": "100,000,000", + "gasLimit": "150,000,000", "gasPrice": "0" }, "expect": { diff --git a/test/features/composability/vault/output/vault-upgrade.mxsc.json b/test/features/composability/vault/output/vault-upgrade.mxsc.json index 8bc9084ab..11cf8cbaf 100644 --- a/test/features/composability/vault/output/vault-upgrade.mxsc.json +++ b/test/features/composability/vault/output/vault-upgrade.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "vault", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -116,7 +116,7 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { diff --git a/test/features/composability/vault/output/vault.mxsc.json b/test/features/composability/vault/output/vault.mxsc.json index 2b032b46b..19f1c03a0 100644 --- a/test/features/composability/vault/output/vault.mxsc.json +++ b/test/features/composability/vault/output/vault.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "vault", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -321,7 +321,7 @@ "hasCallback": false, "types": {} }, - "code": "0061736d01000000017a1460027f7f0060000060017f017f6000017f60017f0060027f7f017f60037f7f7f017f60047f7f7f7f0060037f7f7f0060027f7e0060057f7f7e7f7f017f60047f7f7f7f017f60057f7f7e7f7f0060037f7e7f0060067e7f7f7f7f7f017f60017f017e6000017e60017e0060047e7f7f7f017f60037f7f7f017e02d7062303656e760e626967496e74536574496e743634000903656e7609626967496e74416464000803656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000503656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000e03656e76106d4275666665724765744c656e677468000203656e761b6d616e616765645472616e7366657256616c756545786563757465000a03656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000a03656e760d6d616e6167656443616c6c6572000403656e760f6d4275666665725365744279746573000603656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000503656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000403656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000f03656e760f6765744e756d417267756d656e7473000303656e760d6d42756666657246696e697368000203656e760a626967496e745369676e000203656e76136d42756666657253746f7261676553746f7265000503656e76126d42756666657253746f726167654c6f6164000503656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000103656e760666696e697368000003656e76176d427566666572546f426967496e74556e7369676e6564000503656e760a6765744761734c656674001003656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000103656e76136d616e616765644f776e657241646472657373000403656e7616736d616c6c496e7446696e697368556e7369676e6564001103656e76136d42756666657247657442797465536c696365000b03656e76096d42756666657245710005035c5b020302000000120c0205000203030302030203030002020705060306000703020404040104000c0008000407070007000800060b00030203000d02000005000000090602040d03130101010101010101010101010101010101010105030100030616037f01418080080b7f00418584080b7f00419084080b07ca0316066d656d6f7279020004696e6974006b0775706772616465006c0e6563686f5f617267756d656e7473006d1e6563686f5f617267756d656e74735f776974686f75745f73746f72616765006e0b6563686f5f63616c6c6572006f0c6163636570745f66756e64730070196163636570745f66756e64735f6563686f5f7061796d656e740071216163636570745f66756e64735f73696e676c655f657364745f7472616e7366657200720c72656a6563745f66756e647300732172657472696576655f66756e64735f776974685f7472616e736665725f6578656300740e72657472696576655f66756e647300752272657472696576655f66756e64735f65676c645f6f725f73696e676c655f6573647400762372657472696576655f72656365697665645f66756e64735f696d6d6564696174656c7900771472657472696576655f66756e64735f6d756c746900781e6275726e5f616e645f6372656174655f72657472696576655f6173796e6300790e6578706c696369745f70616e6963007a116765745f6f776e65725f61646472657373007b0b63616c6c5f636f756e7473007c0863616c6c4261636b007d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab1365b1601017f1024220142001000200120012000100120010b1901017f41fc830841fc830828020041016b220036020020000b0f01017f10032201200010041a20010b1401017f10242202200010051a200120023602000b3002017f017e200128020810252102200129030021032000200128020c102336020c20002003370300200020023602080b0900200020011002000b1500200041622001200220031024220110061a20010b8c0101027f230041306b220524000240200110070440200541286a42003703002005420037032002402001102b4101470d002001200541206a2206102c1a200541106a2006102d200528021c21062005280218102e450d002000200620022003200410081a0c020b2000200120022003200410091a0c010b2000102f20022003200410081a0b200541306a24000b0900200010074104760b0d0020002001411010554101730bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1100415841a28008410b100b1a200010380b0e01017f102422004200100020000b0c01017f10242200100a20000b4901017f0240410810320d001033103441ff0171410147044010352100415941014100100b1a4159200010041a0c010b415841a28008410b100b1a415941ad80084110100b1a0b41590b2b01027f2000418484082d0000220171200041ff01714622024504404184840820002001723a00000b20020b100041011032450440415d100c0b415d0b110020001015220041004a20004100486b0b100041021032450440415a100d0b415a0b8f0101037f230041206b22002400103521010240410410320d00415841a28008410b100b1a200020011007360208200041003602042000200136020003402000410f6a2000103720002d000f4101470d012000280010220241187420024180fe03714108747220024108764180fe0371200241187672721038450d000b41bd800841181002000b200041206a240020010b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010561a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102241004a0b0d00200010242200100e1a20000b2e01017f41d580084117103b220420002001100f1a200441ec80084103100f1a200420022003100f1a20041010000b1101017f1024220220002001100b1a20020b2c01017f103d210303402000280200418084082802004e4504402003200020012002103e103f0c010b0b20030b080041014100103b0b3101017f20002802002203418084082802004e04402001200241ef80084111103a000b2000200341016a360200200310390b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100f1a200241106a24000b3501017f02402001280200418084082802004e0440410121040c010b200120022003103e21010b20002001360204200020043602000b08004100103910590b0c00200010242200101120000b19004180840828020020004c04400f0b4180810841121002000b1400101320004604400f0b4192810841191002000b19002000418084082802004c04400f0b41ef800841111002000b0b004180840810133602000b4f01017f230041206b2201240020012000100736021c20014100360218200120003602140340200141086a200141146a104820012802084101710440200128020c10141a0c010b0b200141206a24000b6201027f230041106b220224002002410b6a2001106120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b5c02037f017e230041106b22052400103d2106200028020828020010252107200029030021082005200028020c280200102336020c200520083703002005200736020820062005104a20012006200220032004102a200541106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100f1a200341106a24000b0e0041622000420020012002102a0b5601037f230041206b22022400200241086a104d200228020c2103200228020821042002200041086a36021820022000410c6a36021c20022000290300370310200241106a20014200200420031049200241206a24000b3501027f230041106b22012400200141086a103d1054200128020c21022000200128020836020020002002360204200141106a24000b1e00103d1a200220032802001025103f20002002360204200020013602000b3e01017f230041106b220424002004103d36020c20032802002004410c6a10502002200428020c103f2000200236020420002001360200200441106a24000b22002000102e4504402001200010253602000f0b2001280200419482084104100b1a0b160020022003105220002002360204200020013602000b2c01017f230041106b22022400103d1a20012802002002410c6a10262000200228020c103f200241106a24000b180020012002103b21012000103d360204200020013602000b10002000103d360204200020013602000b0c00200041002001200210560b0f00200020012003200210214100470b1b01017f2001102e210220002001360204200020024101733602000b0a0041a28008410b103b0b4901017f230041106b220124000240200010074104470d002001410036020c200041002001410c6a410410561a200128020c41c58eb1a204470d00105821000b200141106a240020000b0a0041764200100041760b3101017f230041106b2202240020022001ad200241086a105c200020022802002002280204103b10161a200241106a24000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000bd40102017e037f230041106b220224002002420037030820001024220310171a024020031007220441094f0d002003200220046b41106a200410551a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280808080105a0d00200241106a24002001a70f0b41988208411b103b2202200010041a200241ec80084103100f1a200241e98108410e100f1a20021010000b5001017f230041206b2202240020022001100736021c20024100360218200220013602140340200241086a200241146a1048200228020841017104402000200228020c105f0c010b0b200241206a24000b0d00103d1a200020011025103f0b1201017f103d220220002001103b103f20020b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410561a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b1800416741014100100b1a200120004200103d416710081a0bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b3801027f230041106b22022400103d210320022001200241086a105c200320022802002002280204100b1a20002003103f200241106a24000b5e01017f230041106b220324002003410b6a2000106120032d000b4101460440200328000c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b2001200241ef80084111103a000b5d01037f230041106b2201240041c88208410b103b2102200120001007220341187420034180fe03714108747220034108764180fe03712003411876727236020c20022001410c6a4104100f1a2002200010041a200141106a240020020b1801017f41db8208410c106022012000105e2001103d10180b4901027f230041106b2203240041f38208410e106021042003103d36020c20002003410c6a10502004200328020c103f2004200110642004200210522004103d1018200341106a24000bbc0201077f230041d0006b2200240010312101103d210220002001100736020c2000410036020820002001360204200041186a2101200041396a21040340200041386a2203200041046a103720002d0038410147450440200041306a200441086a290000370300200020042900003703282001200041286a102d2000420137031020032001102720022003104a0c010b0b103d210120002002100736020c2000410036020820002002360204200041186a2104200041396a21020340200041386a2203200041046a103720002d0038410147450440200041306a200241086a290000370300200020022900003703282004200041286a102d200028022420002802202000103d3602382003105020012000280238103f200120002903181064103d1a2003102620012000280238103f0c010b0b200041d0006a240020010ba90102017e027f230041106b22042400200020012002106521002004420037030820001007220541094f04402001200241e98108410e103a000b2000200420056b41106a200510551a20042903082103200441106a2400200342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484840b5101037f230041106b2200240010191046410010452000410036020c20002000410c6a41958308410f1040200028020421012000280200200028020c1043410171450440200110141a0b200041106a24000b6501037f230041106b2200240010191046410010452000410036020c20002000410c6a41958308410f1040200028020421012000280200200028020c104341d3820841081060103d101841d382084108101a410171450440200110141a0b200041106a24000b4e01037f230041106b2200240010191046410010452000410036020c2000410c6a41a483084104103c200028020c104341c68308410e103b106622022002105d41016a105b1047200041106a24000b3901027f230041106b2200240010191046410010452000410036020c2000410c6a41a483084104103c200028020c10431047200041106a24000b0d00101941001044103010141a0b2101017f410010441069106741db8208410c103b106622002000105d41016a105b0b6e01037f230041206b220024004100104410692201106741e283084119103b106622022002105d41016a105b20002001100736021c20004100360218200020013602140340200041086a200041146a104820002802084101710440200028020c10141a0c010b0b200041206a24000b6701027f230041306b220024004100104402401036220110074170714110460440200041286a4200370300200042003703202001200041206a41101055450d0141f78108411d1002000b4180800841221002000b200041106a200041206a1063200041306a24000b2901027f410010441069210041e78208410c106022012000105e2001103d101841e78208410c1028000bdf0202057f017e230041f0006b2200240010464102104510412201102e044041a88308410541b38208410d103a000b41011042210220004102360220200041086a200041206a41b6830841101040200028020c2103200028020821042000280220104320002002360218200020013602142000103036021c20002004410171047f103d0520030b1054200042003703304280e1eb17210520004280e1eb1737032020002000280204220236022c20002000280200220136022820002000411c6a3602402000200041186a36023c2000200041146a3602380240200110070d00420021052000280218103441ff01710d0041d08108410e1002000b20002005370348200041e0006a200041306a220341086a2903003703002000200041c4006a3602682000200236025420002001360250200020032903003703582000200041c8006a36026c200041d8006a200028021c2005200120021049200041f0006a24000b810102047f017e230041206b2200240010194103104410412101410110122104200041021042220236020c200120042000410c6a106810302103200020011057024020002802004101710440200028020421012000200236021c2000200437031020002001360218200041106a2003104c0c010b2002200310620b200041206a24000b990202027f017e230041406a22002400410010440240027e02400240024010352201102b0e020102000b4180800841221002000b1058210120001033102336023c200042003703302000200136023842000c010b200041386a4200370300200042003703302001200041306a2201102c450d01200041206a2001102d200041106a200041286a290300370300200020002903203703082001200041086a10272000280238210120002903300b2102200120022000413c6a1068200020011057024020002802004101710440200028020421012000200028023c36022420002001360220200020023703184162100a200041186a4162104c0c010b200028023c4162100a416210620b200041406b24000f0b41f78108411d1002000b3101027f230041106b220024004100104410314162100a200041086a104d2000280208200028020c104b200041106a24000bf40102057f017e230041306b22002400101910464100104520004100360220200041206a41ad83084109103c210220002802201043418183084114106022032002105e2003103d1018103d2103200020021007220436021c20004100360218200020023602140340200120044f450440200041146a220141c0820841081065102510592102200141c082084108106a2105200041146a41c082084108106510242201101b1a2000200136022c20002002360228200020053703202003200041206a104a200028021c2104200028021821010c010b0b4162100a200041086a104d20032000280208200028020c104b200041306a24000be507020a7f017e230041e0016b220024004100104410362103103d2205103d103f103d210820002003100736028c0120004100360288012000200336028401200041c4016a2106200041c0016a210320004198016a2107200041cd016a21090340200041cc016a20004184016a10370240024020002d00cc0141014604402003200941086a290000370300200020092900003703b8012007200041b8016a10632003200741086a29030037030020002007290300220a3703b801027f200a500440200041d8006a41ab8108410d1053200041d0006a2000280258200028025c2003104f200041c8006a200028025020002802542006105120002802482102200028024c0c010b200041f0006a41b88108410b1053200041e8006a200028027020002802742003104f20002802682101200028026c2202200a1064200041e0006a20012002200610512000280260210220002802640b2101101c4162101d105a2002200110291a101e2000103d3602ac012000102f3602b0012000103d3602b401200041406b41c38108410d1053200041386a200028024020002802442003104f200041306a2000280238200028023c20061051200041286a20002802302000280234200041ac016a104e200041206a2000280228200028022c200041b0016a1051200041186a20002802202000280224200041b4016a104e20002802182102200028021c2101103d220441014100100b1a20012004103f20051007450d012000200510073602d401200041003602d001200020053602cc010340200041106a200041cc016a10482000280210410171450d0320012000280214105f0c000b000b4162100a200041f8006a104d4162200842002000280278200028027c102a200041e0016a24000f0b103d220441014100100b1a20012004103f0b101c4162101d105a2002200110292102101e103d21012000200210073602d401200041003602d001200020023602cc010340200041086a200041cc016a1048200028020841017104402001200028020c1025103f0c010b0b2000200110073602d401200041003602d001200020013602cc01200041cc016a220441de8108410b106a210a20002802c0011025210120002802c401102321022000200a423886200a4280fe038342288684200a428080fc0783421886200a42808080f80f834208868484200a42088842808080f80f83200a421888428080fc078384200a4228884280fe0383200a4238888484843702d0012000200141187420014180fe03714108747220014108764180fe0371200141187672723602cc012000200241187420024180fe03714108747220024108764180fe0371200241187672723602d801200820044110100f1a0c000b000b0f004100104441d48308410e1028000b1501017f10194100104410242200101f200010141a0b1300101941011044410010391066105dad10200b02000b0b8f040200418080080bfb03696e636f7272656374206e756d626572206f662045534454207472616e736665727345474c442d303030303030ffffffd80000000000000000ffffffdd756e65787065637465642045474c44207472616e73666572617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4275726e455344544e46544275726e455344544e4654437265617465656d707479207472616e7366657273796e6320726573756c74696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e676545474c4473746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564766172206172677363616c6c5f636f756e747375706772616465646163636570745f66756e647372656a6563745f66756e647372657472696576655f66756e647372657472696576655f66756e64735f6d756c74696f70745f6172675f746f5f6563686f61726773746f6b656e7472616e73666572736f70745f726563656976655f66756e636563686f5f617267756d656e74736578706c696369742070616e69636163636570745f66756e64735f6563686f5f7061796d656e740041fc83080b0438ffffff", + "code": "0061736d01000000017a1460027f7f0060000060017f017f6000017f60017f0060027f7f017f60047f7f7f7f0060037f7f7f017f60027f7e0060037f7f7f0060057f7f7e7f7f017f60017f017e60047f7f7f7f017f60067e7f7f7f7f7f017f6000017e60017e0060047e7f7f7f017f60057f7f7e7f7f0060037f7e7f0060037f7f7f017e02bf072603656e760e626967496e74536574496e743634000803656e7609626967496e74416464000903656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000503656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e761b6d616e616765645472616e7366657256616c756545786563757465000a03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000d03656e760d6d616e6167656443616c6c6572000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e760f6d4275666665725365744279746573000703656e76106d4275666665724765744c656e677468000203656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000503656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000403656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e760f6765744e756d417267756d656e7473000303656e760d6d42756666657246696e697368000203656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000a03656e76196d427566666572546f536d616c6c496e74556e7369676e6564000b03656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000803656e76136d42756666657253746f7261676553746f7265000503656e76126d42756666657253746f726167654c6f6164000503656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000103656e760666696e697368000003656e760a626967496e745369676e000203656e7612626967496e7447657443616c6c56616c7565000403656e76176d427566666572546f426967496e74556e7369676e6564000503656e760a6765744761734c656674000e03656e76106d616e61676564534341646472657373000403656e760f636c65616e52657475726e44617461000103656e76136d616e616765644f776e657241646472657373000403656e7616736d616c6c496e7446696e697368556e7369676e6564000f03656e76136d42756666657247657442797465536c696365000c03656e76096d42756666657245710005035a590203020000000610030302030300020206050607070300020302040404010400061100090205000306000600060900000c0000030203000200000005000008070204120403130101010101010101010101010101010101010105030100030616037f01418080080b7f00419584080b7f0041a084080b07ca0316066d656d6f7279020004696e6974006c0775706772616465006d0e6563686f5f617267756d656e7473006e1e6563686f5f617267756d656e74735f776974686f75745f73746f72616765006f0b6563686f5f63616c6c657200700c6163636570745f66756e64730071196163636570745f66756e64735f6563686f5f7061796d656e740072216163636570745f66756e64735f73696e676c655f657364745f7472616e7366657200730c72656a6563745f66756e647300742172657472696576655f66756e64735f776974685f7472616e736665725f6578656300750e72657472696576655f66756e647300762272657472696576655f66756e64735f65676c645f6f725f73696e676c655f6573647400772372657472696576655f72656365697665645f66756e64735f696d6d6564696174656c7900781472657472696576655f66756e64735f6d756c746900791e6275726e5f616e645f6372656174655f72657472696576655f6173796e63007a0e6578706c696369745f70616e6963007b116765745f6f776e65725f61646472657373007c0b63616c6c5f636f756e7473007d0863616c6c4261636b007e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020a9a33591601017f1027220142001000200120012000100120010b1901017f418c8408418c840828020041016b220036020020000b0f01017f10032201200010041a20010b1401017f10272202200010051a200120023602000b3002017f017e200128020810282102200129030021032000200128020c102636020c20002003370300200020023602080b0900200020011002000b0f002000200142002002200310061a0b1500200041622001200220031027220110071a20010b0c01017f10272200100820000b100041081030450440415910090b41590b2b01027f2000419484082d0000220171200041ff01714622024504404194840820002001723a00000b20020b8f0101037f230041206b22002400103221010240410410300d00415841ba8008410b100a1a20002001100b360208200041003602042000200136020003402000410f6a2000103320002d000f4101470d012000280010220241187420024180fe03714108747220024108764180fe0371200241187672721034450d000b41a2800841181002000b200041206a240020010b100041021030450440415a100c0b415a0b7001037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002411010561a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0041582000102541004a0b0d00200010272200100d1a20000b2e01017f41c5800841171037220420002001100e1a200441dc80084103100e1a200420022003100e1a2004100f000b1101017f1027220220002001100a1a20020b3501017f02402001280200419084082802004e0440410121040c010b200120022003103921010b20002001360204200020043602000b3101017f20002802002203419084082802004e04402001200241df800841111036000b2000200341016a360200200310350b2c01017f103b210303402000280200419084082802004e45044020032000200120021039103c0c010b0b20030b08004101410010370b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100e1a200241106a24000b0c00200010272200101020000b080041001035105a0b1100415841ba8008410b100a1a200010340b19004190840828020020004c04400f0b41f0800841121002000b1400101220004604400f0b4182810841191002000b19002000419084082802004c04400f0b41df800841111002000b0b004190840810123602000b4f01017f230041206b2201240020012000100b36021c20014100360218200120003602140340200141086a200141146a104520012802084101710440200128020c10131a0c010b0b200141206a24000b6201027f230041106b220224002002410b6a2001106220022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b3e01017f230041106b220424002004200041086a36020820042000410c6a36020c20042000290300370300200420014200200220031047200441106a24000b6102037f017e230041106b2205240020002903002108200028020c28020021072000280208280200103b21001028210620052007102636020c20052008370300200520063602082000200510482001200020022003200410141a200541106a24000bd20102027f017e230041106b2203240020032001280208220241187420024180fe03714108747220024108764180fe0371200241187672723602002003200128020c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001290300220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe03832004423888848484370204200020034110100e1a200341106a24000b860101027f230041306b2203240002402000100b0440200341286a42003703002003420037032002402000104a4101470d002000200341206a2204104b1a200341106a2004104c200328021c21042003280218103f450d004162200420012002102c0c020b4162200042002001200210141a0c010b4162104d20012002102c0b200341306a24000b09002000100b4104760b1b01017f2000100b220241104f04402000200110550b2002410f4b0bb90102017f017e20002001280000220241187420024180fe03714108747220024108764180fe0371200241187672723602082000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b0e01017f102722004200100020000b3e01017f230041106b220424002004103b36020c20032802002004410c6a104f2002200428020c103c2000200236020420002001360200200441106a24000b22002000103f4504402001200010283602000f0b2001280200419782084104100a1a0b160020022003105120002002360204200020013602000b2c01017f230041106b22022400103b1a20012802002002410c6a10292000200228020c103c200241106a24000b1e00103b1a200220032802001028103c20002002360204200020013602000b180020012002103721012000103b360204200020013602000b10002000103b360204200020013602000b1a00200041002001411010564504400f0b41e7810841131002000b0f00200020012003200210244100470b2101017e20002001100b41084d047e20002001101537030842010542000b3703000b1b01017f2001103f210220002001360204200020024101733602000b0a0041ba8008410b10370b4901017f230041106b2201240002402000100b4104470d002001410036020c200041002001410c6a410410561a200128020c41c58eb1a204470d00105921000b200141106a240020000b0a0041764200100041760b100041672001ad10162000416710171a0b5602027f017e230041106b2201240020001027220210181a200120021057024020012802000440200129030822034280808080105a0d01200141106a24002003a70f0b200041d98108105e000b200041cb8208105e000b2c01017f419b8208411b10372202200010041a200241dc80084103100e1a20022001410e100e1a2002100f000b5001017f230041206b2202240020022001100b36021c20024100360218200220013602140340200241086a200241146a1045200228020841017104402000200228020c10600c010b0b200241206a24000b0d00103b1a200020011028103c0b1201017f103b2202200020011037103c20020b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410561a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b890202047f017e230041106b22042400103b21052004200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822064280fe03832001423888848484370308200541002001428080808080808080015422022001423088a741ff01711b220320026a410020032006a741ff01711b22026a410020022001422088a741ff01711b22026a410020022001a722024118761b22036a41002003200241107641ff01711b22036a41002003200241087641ff01711b22026a200241002001501b6a2202200441086a6a410820026b100a1a20002005103c200441106a24000b5e01017f230041106b220324002003410b6a2000106220032d000b4101460440200328000c2100200341106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720f0b2001200241df800841111036000b5d01037f230041106b2201240041d98208410b1037210220012000100b220341187420034180fe03714108747220034108764180fe03712003411876727236020c20022001410c6a4104100e1a2002200010041a200141106a240020020b1801017f41ec8208410c106122012000105f2001103b10190b4901027f230041106b2203240041848308410e106121042003103b36020c20002003410c6a104f2004200328020c103c2004200110642004200210512004103b1019200341106a24000b3501027f230041106b22012400200141086a103b1054200128020c21022000200128020836020020002002360204200141106a24000bbc0201077f230041d0006b22002400102f2101103b210220002001100b36020c2000410036020820002001360204200041186a2101200041396a21040340200041386a2203200041046a103320002d0038410147450440200041306a200441086a290000370300200020042900003703282001200041286a104c2000420137031020032001102a2002200310480c010b0b103b210120002002100b36020c2000410036020820002002360204200041186a2104200041396a21020340200041386a2203200041046a103320002d0038410147450440200041306a200241086a290000370300200020022900003703282004200041286a104c200028022420002802202000103b3602382003104f20012000280238103c200120002903181064103b1a2003102920012000280238103c0c010b0b200041d0006a240020010b3d02017f017e230041106b2203240020032000200120021065105720032802004504402001200241d98108410e1036000b2003290308200341106a24000b5101037f230041106b22002400101a1043410010422000410036020c20002000410c6a41a68308410f1038200028020421012000280200200028020c1040410171450440200110131a0b200041106a24000b6501037f230041106b22002400101a1043410010422000410036020c20002000410c6a41a68308410f1038200028020421012000280200200028020c104041e4820841081061103b101941e482084108101b410171450440200110131a0b200041106a24000b4e01037f230041106b22002400101a1043410010422000410036020c2000410c6a41b583084104103a200028020c104041d78308410e1037106622022002105d41016a105c1044200041106a24000b3901027f230041106b22002400101a1043410010422000410036020c2000410c6a41b583084104103a200028020c10401044200041106a24000b0d00101a41001041102e10131a0b2101017f41001041106a106741ec8208410c1037106622002000105d41016a105c0b6e01037f230041206b2200240041001041106a2201106741f3830841191037106622022002105d41016a105c20002001100b36021c20004100360218200020013602140340200041086a200041146a104520002802084101710440200028020c10131a0c010b0b200041206a24000b6a01027f230041306b2200240041001041024010312201100b4170714110460440200041286a4200370300200042003703202001100b410f4b0d0141fa8108411d1002000b4180800841221002000b2001200041206a22011055200041106a20011063200041306a24000b2901027f41001041106a210041f88208410c106122012000105f2001103b101941f88208410c102b000bd20202067f017e230041f0006b22002400104341021042103e2201103f044041b98308410541b68208410d1036000b4101103d210320004102360220200041086a200041206a41c7830841101038200028020c2102200028020821042000280220104020002003360218200020013602142000102e220536021c20002004410171047f103b0520020b1054200028020421014280e1eb172106024020002802002202100b0d00420021062003101c0d0041c08108410e1002000b200042003703302000200236022820004280e1eb173703202000200136022c20002000411c6a3602402000200041186a220336023c2000200041146a220436023820002006370348200042003703582000200041c4006a360268200020013602542000200236025020002003360264200020043602602000200041c8006a36026c200041d8006a20052006200220011047200041f0006a24000ba30102047f017e230041306b22002400101a41031041103e210141011011210420004102103d220236021c200120042000411c6a1068102e2103200041106a20011058024020002802104101710440200028021421012000200236022c200020043703202000200136022820001069200041206a20032000280200200028020410460c010b200041086a1069200320022000280208200028020c102c0b200041306a24000bcf0202027f017e230041d0006b22002400410010410240027e02400240024010322201104a0e020102000b4180800841221002000b1059210141011030450440415d101d0b2000415d102636024c200042003703402000200136024842000c010b200041c8006a4200370300200042003703402001200041406b2201104b450d01200041306a2001104c200041206a200041386a290300370300200020002903303703182001200041186a102a2000280248210120002903400b210220012002200041cc006a1068200041106a20011058024020002802104101710440200028021421012000200028024c36023420002001360230200020023703284162100820001069200041286a41622000280200200028020410460c010b200028024c210141621008200041086a1069416220012000280208200028020c102c0b200041d0006a24000f0b41fa8108411d1002000b3101027f230041106b2200240041001041102f41621008200041086a10692000280208200028020c1049200041106a24000bf40102057f017e230041306b22002400101a10434100104220004100360220200041206a41be83084109103a210220002802201040419283084114106122032002105f2003103b1019103b210320002002100b220436021c20004100360218200020023602140340200120044f450440200041146a220141c38208410810651028105a2102200141c382084108106b2105200041146a41c382084108106510272201101e1a2000200136022c20002002360228200020053703202003200041206a1048200028021c2104200028021821010c010b0b41621008200041086a106920032000280208200028020c1049200041306a24000bd006020a7f017e230041e0016b220024004100104110312103103b2204103b103c103b210820002003100b36028c0120004100360288012000200336028401200041c4016a2105200041c0016a210320004198016a2106200041c9016a21090340200041c8016a20004184016a10330240024020002d00c80141014604402003200941086a290000370300200020092900003703b8012006200041b8016a10632003200641086a29030037030020002006290300220a3703b801027f200a500440200041d8006a419b8108410d1053200041d0006a2000280258200028025c2003104e200041c8006a200028025020002802542005105020002802482102200028024c0c010b200041f0006a41a88108410b1053200041e8006a200028027020002802742003104e20002802682101200028026c2202200a1064200041e0006a20012002200510502000280260210220002802640b2101101f41621020105b20022001102d1a10212000103b3602ac012000104d3602b0012000103b3602b401200041406b41b38108410d1053200041386a200028024020002802442003104e200041306a2000280238200028023c20051050200041286a20002802302000280234200041ac016a1052200041206a2000280228200028022c200041b0016a1050200041186a20002802202000280224200041b4016a105220002802182102200028021c2101103b220741014100100a1a20012007103c2004100b450d0120002004100b3602d001200041003602cc01200020043602c8010340200041106a200041c8016a10452000280210410171450d032001200028021410600c000b000b41621008200041f8006a10694162200842002000280278200028027c10141a200041e0016a24000f0b103b220741014100100a1a20012007103c0b101f41621020105b20022001102d21021021103b210120002002100b3602d001200041003602cc01200020023602c8010340200041086a200041c8016a1045200028020841017104402001200028020c1028103c0c010b0b20002001100b3602d001200041003602cc01200020013602c801200041c8016a220241ce8108410b106b210a20002802c00110282101200020002802c40110263602d4012000200a3703c801200020013602d0012008200210480c000b000b0f004100104141e58308410e102b000b1501017f101a41001041102722001022200010131a0b1300101a41011041410010351066105dad10230b02000b0ba0040200418080080b8c04696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657245474c442d303030303030617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4275726e455344544e46544275726e455344544e4654437265617465656d707479207472616e7366657273796e6320726573756c7476616c756520746f6f206c6f6e67736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c4473746f72616765206465636f6465206572726f7220286b65793a20455344542065787065637465647661722061726773696e70757420746f6f206c6f6e6763616c6c5f636f756e747375706772616465646163636570745f66756e647372656a6563745f66756e647372657472696576655f66756e647372657472696576655f66756e64735f6d756c74696f70745f6172675f746f5f6563686f61726773746f6b656e7472616e73666572736f70745f726563656976655f66756e636563686f5f617267756d656e74736578706c696369742070616e69636163636570745f66756e64735f6563686f5f7061796d656e7400418c84080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -339,6 +339,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -347,8 +348,10 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedCaller", "managedExecuteOnDestContext", + "managedGetAllTransfersCallValue", "managedGetMultiESDTCallValue", "managedMultiTransferESDTNFTExecute", "managedOwnerAddress", @@ -362,12 +365,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/vault.wasm", - "size": 9071, + "size": 8783, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json b/test/features/esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json index d7c3aee53..d5668c749 100644 --- a/test/features/esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json +++ b/test/features/esdt-system-sc-mock/output/esdt-system-sc-mock.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "esdt-system-sc-mock", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -240,10 +240,9 @@ } } }, - "code": "0061736d01000000015e1060017f0060000060017f017f60027f7f017f6000017f60027f7f0060047f7f7f7f0060037f7f7f017f60047f7f7f7f017f6000017e60067e7f7f7f7f7f017f60017f017e60027f7e0060037f7f7f0060037f7e7f0060057f7f7f7f7f0002c6051e03656e760b7369676e616c4572726f72000503656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000303656e760f6d4275666665725365744279746573000703656e760a6765744761734c656674000903656e76106d616e61676564534341646472657373000003656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000a03656e760f636c65616e52657475726e44617461000103656e760d6d616e6167656443616c6c6572000003656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000003656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000003656e76106d4275666665724765744c656e677468000203656e7612626967496e7447657443616c6c56616c7565000003656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e7619626967496e74476574556e7369676e6564417267756d656e74000503656e760f6765744e756d417267756d656e7473000403656e760d6d42756666657246696e697368000203656e760666696e697368000503656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76096d4275666665724571000303656e760e626967496e74536574496e743634000c03656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e760e636865636b4e6f5061796d656e74000103656e761776616c6964617465546f6b656e4964656e746966696572000203656e760a626967496e745369676e000203656e76136d42756666657247657442797465536c696365000803656e76106d616e616765644173796e6343616c6c0006032625020d040205060404020603010207000008000000010006060e0f050202040101010101010105030100030616037f01418080080b7f00419183080b7f0041a083080b07a3010b066d656d6f7279020004696e6974003c056973737565003d1069737375654e6f6e46756e6769626c65003e1072656769737465724d65746145534454003f0e7365745370656369616c526f6c650040167265676973746572416e64536574416c6c526f6c657300410863616c6c4261636b004211697373756553656d6946756e6769626c65003e0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa016250f01017f10012201200010021a20010b1800200120021028210120001020360204200020013602000b08004101410010280b1600415841f88108410b10031a41582000101541004a0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100a1a200241106a24000b2701017f10201a10252204200328020010141a20022004102220002002360204200020013602000b0a0041764200101641760b1901017f418883084188830828020041016b220036020020000b0d0020001025220010091a20000b2e01017f41c2800841171028220420002001100a1a200441d980084103100a1a200420022003100a1a2004100b000b1101017f102522022000200110031a20020bac0101027f230041106b220024004102102a450440415a100c0b024002400240024002400240415a100d4104760e020102000b41a58008411d1000000b4101102a0d01415d100e0c010b200041086a420037030020004200370300415a20004110102b0d012000280200220141187420014180fe03714108747220014108764180fe0371200141187672721021450d020b200041106a24000f0b41ce8108411d1000000b4180800841251000000b2b01027f2000419083082d0000220171200041ff01714622024504404190830820002001723a00000b20020b0c002000410020012002102e0b3901037f10202102200028020021010340418c830828020020014a04402000200141016a22033602002002200110261022200321010c010b0b0b1f002000100f4280808080105a044041d48208410d41c08108410e1027000b0b0f002000200120032002101c4100470b1900418c830828020020004c04400f0b41ed800841121000000b1400101120004604400f0b41ff800841191000000b19002000418c83082802004c04400f0b41dc800841111000000b0b00418c830810113602000b180020001021450440200010121a0f0b41838208410410130b0d002000200120022003101d000b1e0010201a20022003280200101e102220002002360204200020013602000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b8f0101037f230041106b2205240002402003100d450d002002200310382004100d2107410021030340200320074f0d012005410036020c200420032005410c6a4104102e1a2002200528020c220641187420064180fe03714108747220064108764180fe0371200641187672721038200341046a21030c000b000b2000200236020420002001360200200541106a24000b0d0010201a20002001101e10220bd10102017e037f230041106b220224002002420037030820001025220310171a02402003100d220441094f0d002003200220046b41106a2004102b1a2002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe0383200142388884848422014280025a0d00200241106a24002001a70f0b41878208411b10282202200010021a200241d980084103100a1a200241c08108410e100a1a2002100b000bae0101047f230041206b22012400103b10392103200141146a41b0e0003b0100200141b0e0c08103360210034020024106470440200141106a20026a220420042d000020036a3a0000200241016a21020c010b0b200141086a103b2202103941016aad42ff0183200141186a103620022001280208200128020c102810181a200041c282084101100a1a2000200141106a4106100a1a20001021044041eb8108410d1000000b200141206a240020000b0a0041f88208410e10280b08001019410010300b850702097f017e230041106b220024001029103241041031410010261a41011026210141021025220310104103102d20004104360208200041086a102c2000280208102f2000200336020c02402001103a2202101a04402003101b41004a0d0120021033200041106a24000f0b41b2820841101000000b1025220610082000410c6a2104230041106b22002400200041086a41988108410d101f200028020c210520002802082107102021010240200210214504402002101e21010c010b200141838208410410031a0b2005200110222000200720052004102320002802042101200028020021051004416210054162102420052001102510061a1007200041106a2400230041206b2201240020012003360214200120023602102001420037030820012006360218230041206b22002400200041186a200141086a220341086a290300370300200020032903003703102003280210210510202101200041086a220210203602042002200136020020002802082106200028020c2104230041106b220224002002200041106a220041086a36020820022000410c6a36020c20022000290300370300230041206b22012400200141106a200241086a2903003703002001200341146a220036021c20012000360218200120043602042001200636020020012002290300370308230041106b22022400200128020421032001280200210620012903085004402001280210210420012802142101230041206b22002400200041186a41b48108410c101f200041106a2000280218200028021c20041035200041086a200028021020002802142001102320002000280208200028020c200620031037200028020421012002200028020036020020022001360204200041206a2400200228020421002002280200210120051024200120001034000b230041306b22002400200041206a41a58108410f101f200041186a20002802202000280224200141086a220128020810352001290300210920002802182108200028021c210410202107200041106a2009200041286a103620072000280210200028021410031a200420071022200041086a20082004200128020c102320002802082104200028020c210110201a20012005101e102220002004200120062003103720002802042101200241086a2203200028020036020020032001360204200041306a2400200228020c21002002280208210110252202100520021024200120001034000b3e01027f230041106b220024001029103241021031410010261a410110262000410236020c2000410c6a102c200028020c102f103a1033200041106a24000b4201027f230041106b220024001029103241031031410010261a410110264102102d2000410336020c2000410c6a102c200028020c102f103a1033200041106a24000baf0101037f230041106b220024001019103241021031230041106b220124000240410010262202100d4104470d002001410036020c200241002001410c6a4104102e1a200128020c41c58eb1a204470d0041f88108410b102821020b20021021044041ef8208410941eb8108410d1027000b200141106a240041011026100d412047044041e78208410841a2820841101027000b2000410236020c2000410c6a102c200028020c102f200041106a24000b2001017f102941041030410010261a41011026410210261a4103102d103a10330b02000b0b9a030200418080080b860366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4d696e74455344544e46545472616e73666572455344545472616e73666572696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e67654553445420657870656374656445474c442d30303030303045474c4473746f72616765206465636f6465206572726f7220286b65793a20626164206172726179206c656e677468496e76616c696420746f6b656e2049442d5f746f6b656e5f70726f706572746965735f6e756d5f646563696d616c735f726f6c65735f616464726573735f746f6b656e5f69646e72497373756564546f6b656e7300418883080b0438ffffff", + "code": "0061736d0100000001580f60000060017f0060017f017f60027f7f017f60027f7f006000017f60047f7f7f7f0060037f7f7f017f60027f7e0060017f017e60047f7f7f7f017f6000017e60067e7f7f7f7f7f017f60037f7f7f0060057f7f7f7f7f0002f2051f03656e760b7369676e616c4572726f72000403656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000303656e760f6d4275666665725365744279746573000703656e760a6765744761734c656674000b03656e76106d616e61676564534341646472657373000103656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000c03656e760f636c65616e52657475726e44617461000003656e760d6d616e6167656443616c6c6572000103656e76126d427566666572476574417267756d656e74000303656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000103656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000103656e76106d4275666665724765744c656e677468000203656e760e626967496e74536574496e743634000803656e7619626967496e74476574556e7369676e6564417267756d656e74000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e760f6765744e756d417267756d656e7473000503656e760d6d42756666657246696e697368000203656e760666696e697368000403656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76096d4275666665724571000303656e76126d42756666657253746f726167654c6f6164000303656e76196d427566666572546f536d616c6c496e74556e7369676e6564000903656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000803656e76136d42756666657253746f7261676553746f7265000303656e760e636865636b4e6f5061796d656e74000003656e761776616c6964617465546f6b656e4964656e746966696572000203656e760a626967496e745369676e000203656e76136d42756666657247657442797465536c696365000a03656e76106d616e616765644173796e6343616c6c0006032423020d050204060505020603000a0101010101000106060e04020402050000000000000005030100030616037f01418080080b7f0041b183080b7f0041c083080b07a3010b066d656d6f7279020004696e6974003b056973737565003c1069737375654e6f6e46756e6769626c65003d1072656769737465724d65746145534454003e0e7365745370656369616c526f6c65003f167265676973746572416e64536574416c6c526f6c657300400863616c6c4261636b004111697373756553656d6946756e6769626c65003d0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ae914230f01017f10012201200010021a20010b1800200120021029210120001021360204200020013602000b08004101410010290b16004158418b8208410b10031a41582000101541004a0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100a1a200241106a24000b2701017f10211a10262204200328020010141a20022004102320002002360204200020013602000b0a0041764200100e41760b1901017f41a8830841a8830828020041016b220036020020000b0d0020001026220010091a20000b2e01017f41c2800841171029220420002001100a1a200441d980084103100a1a200420022003100a1a2004100b000b1101017f102622022000200110031a20020bcb0101027f230041106b2200240041b083082d0000220141087145044041b0830820014108723a00004159100c0b02400240024002404159100d4104760e020201000b41a58008411d1000000b200041086a42003703002000420037030002404159100d41104f04404159410020004110102b450d0141ce810841131000000b41e18108411d1000000b2000280200220141187420014180fe03714108747220014108764180fe03712001411876727210220d014180800841251000000b415d4200100e0b200041106a24000b0f002000200120032002101d4100470b3901037f1021210220002802002101034041ac830828020020014a04402000200141016a22033602002002200110271023200321010c010b0b0b1f00200010104280808080105a044041e78208410d418b8308410e1028000b0b190041ac830828020020004c04400f0b41ed800841121000000b1400101120004604400f0b41ff800841191000000b1900200041ac83082802004c04400f0b41dc800841111000000b0b0041ac830810113602000b180020001022450440200010121a0f0b41968208410410130b0d002000200120022003101e000b1e0010211a20022003280200101f102320002002360204200020013602000b8f0101037f230041106b2205240002402003100d450d002002200310362004100d2107410021030340200320074f0d012005410036020c200420032005410c6a4104102b1a2002200528020c220641187420064180fe03714108747220064108764180fe0371200641187672721036200341046a21030c000b000b2000200236020420002001360200200541106a24000b0d0010211a20002001101f10230b3e02017f017e20001026220110161a02402001100d41094904402001101722024280025a0d012002a70f0b200041c081081038000b2000418b83081038000b2c01017f419a8208411b10292202200010021a200241d980084103100a1a20022001410e100a1a2002100b000b9c0101047f230041106b22012400103a103721032001410c6a41b0e0003b0100200141b0e0c08103360208034020024106470440200141086a20026a220420042d000020036a3a0000200241016a21020c010b0b4167103a2202103741016aad42ff018310182002416710191a200041d582084101100a1a2000200141086a4106100a1a20001022044041fe8108410d1000000b200141106a240020000b0a0041998308410e10290b0800101a4100102f0bd408020b7f027e230041106b22002400102a103141041030410010271a410110272101410210262203100f4103102d20004104360208200041086a102c2000280208102e2000200336020c0240200110392202101b04402003101c41004a0d0120021032200041106a24000f0b41c5820841101000000b1026220710082000410c6a2105230041106b22002400200041086a41988108410d1020200028020c210620002802082109102121010240200210224504402002101f21010c010b200141968208410410031a0b2006200110232000200920062005102420002802042101200028020021061004416210054162102520062001102610061a1007200041106a2400230041206b2201240020012003360214200120023602102001420037030820012007360218230041206b22002400200041186a200141086a220341086a290300370300200020032903003703102003280210210610212101200041086a220210213602042002200136020020002802082107200028020c2105230041106b220224002002200041106a220041086a36020820022000410c6a36020c20022000290300370300230041206b22012400200141106a200241086a2903003703002001200341146a220036021c20012000360218200120053602042001200736020020012002290300370308230041106b22022400200128020421032001280200210720012903085004402001280210210520012802142101230041206b22002400200041186a41b48108410c1020200041106a2000280218200028021c20051034200041086a200028021020002802142001102420002000280208200028020c200720031035200028020421012002200028020036020020022001360204200041206a2400200228020421002002280200210120061025200120001033000b230041306b22002400200041206a41a58108410f1020200041186a20002802202000280224200141086a220128020810342001290300210b2000280218210a200028021c2105102121092000200b423886200b4280fe038342288684200b428080fc0783421886200b42808080f80f834208868484200b42088842808080f80f83200b421888428080fc078384200b422888220c4280fe0383200b42388884848437032820094100200b42808080808080808001542204200b423088a741ff01711b220820046a41002008200ca741ff01711b22046a41002004200b422088a741ff01711b22046a41002004200ba722044118761b22086a41002008200441107641ff01711b22086a41002008200441087641ff01711b22046a20044100200b501b6a2204200041286a6a410820046b10031a200520091023200041106a200a2005200128020c1024200028021021052000280214210110211a20012006101f1023200041086a20052001200720031035200028020c2101200241086a2203200028020836020020032001360204200041306a2400200228020c21002002280208210110262202100520021025200120001033000b3e01027f230041106b22002400102a103141021030410010271a410110272000410236020c2000410c6a102c200028020c102e10391032200041106a24000b4201027f230041106b22002400102a103141031030410010271a410110274102102d2000410336020c2000410c6a102c200028020c102e10391032200041106a24000baf0101037f230041106b22002400101a103141021030230041106b220124000240410010272202100d4104470d002001410036020c200241002001410c6a4104102b1a200128020c41c58eb1a204470d00418b8208410b102921020b20021022044041828308410941fe8108410d1028000b200141106a240041011027100d412047044041fa8208410841b5820841101028000b2000410236020c2000410c6a102c200028020c102e200041106a24000b2001017f102a4104102f410010271a41011027410210271a4103102d103910320b02000b0bbb030200418080080ba70366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4d696e74455344544e46545472616e73666572455344545472616e7366657276616c756520746f6f206c6f6e67736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e67654553445420657870656374656445474c442d30303030303045474c4473746f72616765206465636f6465206572726f7220286b65793a20626164206172726179206c656e677468496e76616c696420746f6b656e2049442d5f746f6b656e5f70726f706572746965735f6e756d5f646563696d616c735f726f6c65735f616464726573735f746f6b656e5f6964696e70757420746f6f206c6f6e676e72497373756564546f6b656e730041a883080b0438ffffff", "report": { "imports": [ - "bigIntGetCallValue", "bigIntGetUnsignedArgument", "bigIntSetInt64", "bigIntSign", @@ -257,6 +256,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -264,10 +264,11 @@ "mBufferSetBytes", "mBufferStorageLoad", "mBufferStorageStore", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCaller", "managedExecuteOnDestContext", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedSCAddress", "managedSignalError", "signalError", @@ -276,12 +277,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/esdt-system-sc-mock.wasm", - "size": 4319, + "size": 4205, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/features/formatted-message-features/output/formatted-message-features.mxsc.json b/test/features/formatted-message-features/output/formatted-message-features.mxsc.json index 653730be5..82df685e5 100644 --- a/test/features/formatted-message-features/output/formatted-message-features.mxsc.json +++ b/test/features/formatted-message-features/output/formatted-message-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "formatted-message-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -245,7 +245,7 @@ "hasCallback": false, "types": {} }, - "code": "0061736d0100000001400c60000060027f7f0060017f006000017f60027f7f017f60017f017f60027f7e0060037f7f7f0060037f7f7f017f60017f017e60027e7f0060047f7f7f7f017f029e041703656e76126d616e616765645369676e616c4572726f72000203656e760e626967496e74536574496e743634000603656e7609626967496e74416464000703656e760b7369676e616c4572726f72000103656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000203656e76106d4275666665724765744c656e677468000503656e7612626967496e7447657443616c6c56616c7565000203656e76136d42756666657247657442797465536c696365000b03656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000403656e76126d427566666572417070656e644279746573000803656e76126d427566666572476574417267756d656e74000403656e760f6d4275666665724765744279746573000403656e7619736d616c6c496e744765745369676e6564417267756d656e74000903656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000303656e760f6d4275666665725365744279746573000803656e760e626967496e74546f537472696e67000103656e76126d616e61676564427566666572546f486578000103656e76096d4275666665724571000403656e760e636865636b4e6f5061796d656e74000003656e760d6d42756666657246696e697368000503272605030202050401030302030a0a0007010106010000000000000000000000000000000000000405030100040616037f01418080080b7f0041c2830c0b7f0041d0830c0b07840418066d656d6f7279020004696e6974002a0e7374617469635f6d657373616765002b0f64796e616d69635f6d657373616765002c1364796e616d69635f6d6573736167655f686578002d1864796e616d69635f6d6573736167655f6d756c7469706c65002e1564796e616d69635f6d6573736167655f6173636969002f146465636f64655f6572726f725f6d65737361676500300d7072696e745f6d6573736167650031147072696e745f6d6573736167655f62696e61727900321a7072696e745f6d6573736167655f62696e6172795f6279746573003317666f726d61745f6d6573736167655f6f6e655f7061727400341d666f726d61745f6d6573736167655f6d756c7469706c655f7061727473003516666f726d61745f6d6573736167655f6269675f696e74003612666f726d61745f6d6573736167655f69363400371d666f726d61745f6d6573736167655f6d616e616765645f627566666572003821666f726d61745f6d6573736167655f6d616e616765645f6275666665725f68657800390863616c6c4261636b003a117072696e745f6d6573736167655f6865780031137072696e745f6d6573736167655f636f6465630031177072696e745f6d6573736167655f6865785f62797465730033137072696e745f6d6573736167655f627974657300330a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020a9510261601017f1018220142001001200120012000100220010b1901017f418c8308418c830828020041016b220036020020000b070020001000000bd90202017e047f230041106b220224004102101b450440415a10040b0240027e024002400240415a10054104760e020102000b4195800841221003000b41878108410b101c21054101101b450440415d10060b415d1017210342000c010b200241086a420037030020024200370300415a41004110200210070d0120022802002103200228020c21042002290204210110082205200341187420034180fe03714108747220034108764180fe03712003411876727210091a200441187420044180fe03714108747220044108764180fe03712004411876727210172103200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484840b21012000200336020c2000200137030020002005360208200241106a24000f0b41ea8008411d1003000b2b01027f200041c1830c2d0000220171200041ff017146220245044041c1830c20002001723a00000b20020b1101017f101822022000200110111a20020b3001017f41b780084117101c220241b781084101100a1a200241ce80084103100a1a200220002001100a1a20021000000b2701017e4100100d22004280808080087d42ffffffff6f580440419781084112101d000b2000a70b0f01017f410010182200100b1a20000b1400101020004604400f0b41d1800841191003000b080041014100101c0b21002000420053047e2001419281084101100a1a420020007d0520000b200110230b830101027f230041406a22022400200241c000103c210320012003027f200050450440413f2102024003402000500d012002413f4d0440200220036a20002000420a802200420a7e7da74130723a0000200241016b21020c010b0b1024000b200241016a0c010b200341303a003f413f0b22026a41c00020026b100a1a200341406b24000b0500103b000b0b00200020012002100a1a0b0f002001416710122000416710091a0b2c00415841878108410b10111a41582000101441004c04402001200010091a0f0b2001419381084104100a1a0b08002001200010230b0f002001416710132000416710091a0b08001015410010200b110010154100102041b88108410c1003000b3001027f101541011020101f21011021220041c48108411110252000200110091a200041d581084119102520001019000b2f01027f101541011020101f21011021220041c4810841111025200020011029200041d581084119102520001019000b7302037f017e230041106b22012400410010202001101a200128020c210220012903002103200120012802083602001021220041f38108410a1025200128020020001027200041fd8108410d10252000200310282000418a8208410910252000200210262000419382084117102520001019000b6902037f017e230041106b22002400410010202000101a200028020c21012000290300210320002802081021220041f38108410a102520001027200041fd8108410d10252000200310282000418a8208410910252000200110262000419382084117102520001019000b11001015410010204180800841151003000b0b00101541011020101e1a0b1f001015410110204100100e4280808080105a044041a98108410e101d000b0b7d01037f10154101102041004167100b1a024041671005220141004e04402001044041c0830c2d00001a4167027f41a0830c2001410141a0830c280200220041007122026b410020021b20006a22006a360200200041a083086a200041ffff034d0d001a41f2820841171003000b2001103c100c1a0b0c010b1024000b0b130010154100102041b282084104101c10161a0b3201027f101541011020101e41014100101c220041c582084106100a1aac20001022200041cb82084106100a1a200010161a0b3501027f101541011020410010182201100f41014100101c220041aa82084108100a1a2001416710122000416710091a200010161a0b2a02017f017e1015410110204100100d41014100101c220041ee81084105100a1a20001022200010161a0b2b01027f101541011020101f210141014100101c220041b68208410f100a1a2000200110091a200010161a0b2a01027f101541011020101f210141014100101c220041d182084113100a1a200020011029200010161a0b02000b0b0041e48208410e1003000b860301047f024020014110490440200021020c010b024020002000410020006b41037122046a22034f0d002000210220040440200421050340200241003a0000200241016a2102200541016b22050d000b0b200441016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022003470d000b0b2003200120046b2201417c716a220220034b0440034020034100360200200341046a22032002490d000b0b200141037121010b02402002200120026a22044f0d002001410771220304400340200241003a0000200241016a2102200341016b22030d000b0b200141016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022004470d000b0b20000b0b9d030200418080080b8903756e737570706f72746564206f7065726174696f6e696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e74734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302d45474c44696e707574206f7574206f662072616e6765696e70757420746f6f206c6f6e6778537461746963206572726f72476f742074686973206275666665723a202e204920646f6e2774206c696b652069742c204552524f52216936343a20476f7420746f6b656e202c2077697468206e6f6e6365202c20616d6f756e74202e2049207072656665722045474c442e204552524f5221426967496e743a20546573744d616e616765644275666665723a2048656c6c6f2020776f726c644d616e61676564427566666572206865783a2070616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f7200418c83080b0438ffffff", + "code": "0061736d0100000001400c60000060027f7f0060017f006000017f60027f7f017f60017f017f60027f7e0060037f7f7f0060037f7f7f017f60017f017e60027e7f0060047f7f7f7f017f029e041703656e76126d616e616765645369676e616c4572726f72000203656e760e626967496e74536574496e743634000603656e7609626967496e74416464000703656e760b7369676e616c4572726f72000103656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000203656e76106d4275666665724765744c656e677468000503656e7612626967496e7447657443616c6c56616c7565000203656e76136d42756666657247657442797465536c696365000b03656e760a6d4275666665724e6577000303656e760d6d427566666572417070656e64000403656e76126d427566666572417070656e644279746573000803656e76126d427566666572476574417267756d656e74000403656e7619736d616c6c496e744765745369676e6564417267756d656e74000903656e760f6d4275666665724765744279746573000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e7617626967496e744765745369676e6564417267756d656e74000103656e760f6765744e756d417267756d656e7473000303656e760f6d4275666665725365744279746573000803656e760e626967496e74546f537472696e67000103656e76126d616e61676564427566666572546f486578000103656e76096d4275666665724571000403656e760e636865636b4e6f5061796d656e74000003656e760d6d42756666657246696e697368000503272605030202050401030302030a0a0007010601010000000000000000000000000000000000000405030100040616037f01418080080b7f0041c1830c0b7f0041d0830c0b07840418066d656d6f7279020004696e6974002a0e7374617469635f6d657373616765002b0f64796e616d69635f6d657373616765002c1364796e616d69635f6d6573736167655f686578002d1864796e616d69635f6d6573736167655f6d756c7469706c65002e1564796e616d69635f6d6573736167655f6173636969002f146465636f64655f6572726f725f6d65737361676500300d7072696e745f6d6573736167650031147072696e745f6d6573736167655f62696e61727900321a7072696e745f6d6573736167655f62696e6172795f6279746573003317666f726d61745f6d6573736167655f6f6e655f7061727400341d666f726d61745f6d6573736167655f6d756c7469706c655f7061727473003516666f726d61745f6d6573736167655f6269675f696e74003612666f726d61745f6d6573736167655f69363400371d666f726d61745f6d6573736167655f6d616e616765645f627566666572003821666f726d61745f6d6573736167655f6d616e616765645f6275666665725f68657800390863616c6c4261636b003a117072696e745f6d6573736167655f6865780031137072696e745f6d6573736167655f636f6465630031177072696e745f6d6573736167655f6865785f62797465730033137072696e745f6d6573736167655f627974657300330a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa010261601017f1018220142001001200120012000100220010b1901017f419c8308419c830828020041016b220036020020000b070020001000000bec0202017e047f230041106b220224004102101b450440415a10040b027e024002400240415a10054104760e020102000b4195800841221003000b419a8108410b101c21054101101b450440415d10060b415d1017210342000c010b200241086a4200370300200242003703000240415a100541104f0440415a4100411020021007450d0141ea800841131003000b41fd8008411d1003000b20022802002103200228020c21042002290204210110082205200341187420034180fe03714108747220034108764180fe03712003411876727210091a200441187420044180fe03714108747220044108764180fe03712004411876727210172103200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484840b21012000200336020c2000200137030020002005360208200241106a24000b2b01027f200041c0830c2d0000220171200041ff017146220245044041c0830c20002001723a00000b20020b1101017f101822022000200110111a20020b3001017f41b780084117101c220241ca81084101100a1a200241ce80084103100a1a200220002001100a1a20021000000b0f01017f410010182200100b1a20000b2701017e4100100c22004280808080087d42ffffffff6f58044041aa81084112101d000b2000a70b1400101020004604400f0b41d1800841191003000b080041014100101c0b21002000420053047e200141a581084101100a1a420020007d0520000b200110230b830101027f230041406a22022400200241c000103c210320012003027f200050450440413f2102024003402000500d012002413f4d0440200220036a20002000420a802200420a7e7da74130723a0000200241016b21020c010b0b1024000b200241016a0c010b200341303a003f413f0b22026a41c00020026b100a1a200341406b24000b0500103b000b0b00200020012002100a1a0b0f002001416710122000416710091a0b08002001200010230b2c004158419a8108410b10111a41582000101441004c04402001200010091a0f0b200141a681084104100a1a0b0f002001416710132000416710091a0b08001015410010200b110010154100102041cb8108410c1003000b3001027f101541011020101e21011021220041d78108411110252000200110091a200041e881084119102520001019000b2f01027f101541011020101e21011021220041d7810841111025200020011029200041e881084119102520001019000b7302037f017e230041106b22012400410010202001101a200128020c210220012903002103200120012802083602001021220041868208410a1025200128020020001028200041908208410d10252000200310272000419d820841091025200020021026200041a682084117102520001019000b6902037f017e230041106b22002400410010202000101a200028020c21012000290300210320002802081021220041868208410a102520001028200041908208410d10252000200310272000419d820841091025200020011026200041a682084117102520001019000b11001015410010204180800841151003000b0b00101541011020101f1a0b1f001015410110204100100e4280808080105a044041bc8108410e101d000b0b7501037f10154101102041004167100b1a024041671005220141004e0440200104404167027f41a0830c2001410141a0830c280200220041007122026b410020021b20006a22006a360200200041a083086a200041ffff034d0d001a4185830841171003000b2001103c100d1a0b0c010b1024000b0b130010154100102041c582084104101c10161a0b3201027f101541011020101f41014100101c220041d882084106100a1aac20001022200041de82084106100a1a200010161a0b3501027f101541011020410010182201100f41014100101c220041bd82084108100a1a2001416710122000416710091a200010161a0b2a02017f017e1015410110204100100c41014100101c2200418182084105100a1a20001022200010161a0b2b01027f101541011020101e210141014100101c220041c98208410f100a1a2000200110091a200010161a0b2a01027f101541011020101e210141014100101c220041e482084113100a1a200020011029200010161a0b02000b0b0041f78208410e1003000b860301047f024020014110490440200021020c010b024020002000410020006b41037122046a22034f0d002000210220040440200421050340200241003a0000200241016a2102200541016b22050d000b0b200441016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022003470d000b0b2003200120046b2201417c716a220220034b0440034020034100360200200341046a22032002490d000b0b200141037121010b02402002200120026a22044f0d002001410771220304400340200241003a0000200241016a2102200341016b22030d000b0b200141016b4107490d000340200241003a0000200241076a41003a0000200241066a41003a0000200241056a41003a0000200241046a41003a0000200241036a41003a0000200241026a41003a0000200241016a41003a0000200241086a22022004470d000b0b20000b0bb0030200418080080b9c03756e737570706f72746564206f7065726174696f6e696e636f7272656374206e756d626572206f662045534454207472616e7366657273617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302d45474c44696e707574206f7574206f662072616e6765696e70757420746f6f206c6f6e6778537461746963206572726f72476f742074686973206275666665723a202e204920646f6e2774206c696b652069742c204552524f52216936343a20476f7420746f6b656e202c2077697468206e6f6e6365202c20616d6f756e74202e2049207072656665722045474c442e204552524f5221426967496e743a20546573744d616e616765644275666665723a2048656c6c6f2020776f726c644d616e61676564427566666572206865783a2070616e6963206f636375727265646d656d6f727920616c6c6f636174696f6e206572726f7200419c83080b0438ffffff", "report": { "imports": [ "bigIntAdd", @@ -274,12 +274,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/formatted-message-features.wasm", - "size": 3699, + "size": 3729, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/features/panic-message-features/output/panic-message-features.mxsc.json b/test/features/panic-message-features/output/panic-message-features.mxsc.json new file mode 100644 index 000000000..b74723b8b --- /dev/null +++ b/test/features/panic-message-features/output/panic-message-features.mxsc.json @@ -0,0 +1,97 @@ +{ + "buildInfo": { + "rustc": { + "version": "1.86.0", + "commitHash": "05f9846f893b09a1be1fc8560e33fc3c815cfecb", + "commitDate": "2025-03-31", + "channel": "Stable", + "short": "rustc 1.86.0 (05f9846f8 2025-03-31)" + }, + "contractCrate": { + "name": "panic-message-features", + "version": "0.0.0" + }, + "framework": { + "name": "multiversx-sc", + "version": "0.62.0" + } + }, + "abi": { + "docs": [ + "Explores panic messaging.", + "Sending panic messages to the VM is possible, as shown in this contract,", + "but it greatly inflates the bytecode size." + ], + "name": "PanicMessageFeatures", + "constructor": { + "inputs": [ + { + "name": "should_panic", + "type": "bool" + } + ], + "outputs": [] + }, + "endpoints": [ + { + "name": "panicWithMessage", + "mutability": "mutable", + "inputs": [ + { + "name": "some_value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "docs": [ + "Logs do not get recorded in case of panic." + ], + "name": "panicAfterLog", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "sc_panic", + "mutability": "readonly", + "inputs": [], + "outputs": [] + } + ], + "events": [ + { + "identifier": "before-panic", + "inputs": [] + } + ], + "esdtAttributes": [], + "hasCallback": false, + "types": {} + }, + "code": "0061736d0100000001440b60027f7f017f60037f7f7f017f60000060027f7f0060037f7f7f0060017f006000017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60077f7f7f7f7f7f7f017f02be010803656e760b7369676e616c4572726f72000303656e76126d427566666572417070656e644279746573000103656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e760f6765744e756d417267756d656e7473000603656e760f6d4275666665725365744279746573000103656e760f6d616e6167656457726974654c6f67000303656e760e636865636b4e6f5061796d656e74000203212003070005060602020003020202040008080400010a04050700000000010400070405017001090905030100030616037f01418080080b7f00418c9e080b7f0041909e080b076508066d656d6f7279020004696e6974000e1070616e6963576974684d657373616765000f0d70616e696341667465724c6f6700120873635f70616e696300130863616c6c4261636b00140a5f5f646174615f656e6403010b5f5f686561705f626173650302090e010041010b0822101a20212423260c01020ab742200900200020011000000b2e01017f418080084117100a22042000200110011a200441978008410310011a20042002200310011a20041002000b1101017f100c22022000200110051a20020b1400100420004604400f0b419a800841191000000b1901017f41889e0841889e0828020041016b220036020020000b080041014100100a0b4902017f017e10074101100b0240024041001003220142015804402001a741016b0d020c010b41dd8008410c41c1800841121009000b410121000b2000044041ac820841181008000b0b7902017f017e230041306b2200240010074101100b4100100322014280808080105a044041d38008410a41b38008410e1009000b200020013e020c200041013602142000419482083602102000420137021c2000410236022c2000200041286a36021820002000410c6a360228200041106a419c82081011000b0b002000280200200110160baf0101017f230041106b22022400200241013b010c2002200136020820022000360204230041306b220024002000200241046a360208100c22014101410010051a2000200136020c200141809d084110102520004101360214200041909d083602102000420137021c2000410136022c2000200041286a3602182000200041086a3602282000410c6a41e89c08200041106a101b200028020c21020440200241e29d08411510250b200028020c1002000b910101047f230041206b2200240010074100100b230041106b22012400100d2103200141d28208410c100a220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001410c6a410410011a2003100d1006200141106a2400200041003602182000410136020c200041f8800836020820004204370210200041086a41ec81081011000b110010074100100b41c48208410e1008000b02000b6701017f230041306b2203240020032001360204200320003602002003410236020c200341f483083602082003420237021420032003ad428080808020843703282003200341046aad428080808020843703202003200341206a360210200341086a20021011000bdd0201087f230041106b22052400410a21022000220341e8074f0440200321040340200541066a20026a220641036b20044190ce006e220341f0b1036c20046a220741ffff037141e4006e22084101742209418784086a2d00003a0000200641046b2009418684086a2d00003a0000200641016b2008419c7f6c20076a41ffff03714101742207418784086a2d00003a0000200641026b2007418684086a2d00003a0000200241046b2102200441fface2044b200321040d000b0b0240200341094d0440200321040c010b200220056a41056a200341ffff037141e4006e2204419c7f6c20036a41ffff03714101742203418784086a2d00003a0000200241026b2202200541066a6a2003418684086a2d00003a00000b4100200020041b450440200241016b2202200541066a6a2004410174411e71418784086a2d00003a00000b200141014100200541066a20026a410a20026b1017200541106a24000bce0401087f20002802142207410171220a20046a210602402007410471450440410021010c010b2002450d0020024103712208450d00200121050340200920052c000041bf7f4a6a2109200541016a2105200841016b22080d000b200620096a21060b412b418080c400200a1b21092000280200450440200028021c2205200028022022002009200120021018044041010f0b200520032004200028020c1101000f0b0240024002402006200028020422084f0440200028021c2205200028022022002009200120021018450d0141010f0b2007410871450d012000280210210b2000413036021020002d0018210c41012105200041013a0018200028021c22072000280220220a20092001200210180d02200820066b41016a210502400340200541016b2205450d0120074130200a280210110000450d000b41010f0b200720032004200a28020c110100044041010f0b2000200c3a00182000200b36021041000f0b200520032004200028020c11010021050c010b200820066b2106024002400240410120002d0018220520054103461b220541016b0e020001020b20062105410021060c010b20064101762105200641016a41017621060b200541016a21052000280210210820002802202107200028021c210002400340200541016b2205450d01200020082007280210110000450d000b41010f0b410121052000200720092001200210180d00200020032004200728020c1101000d004100210503402005200646044041000f0b200541016a2105200020082007280210110000450d000b200541016b2006490f0b20050b380002402002418080c400460d00200020022001280210110000450d0041010f0b200345044041000f0b200020032004200128020c1101000b0e0020002001200241ac950810270b9e0a010b7f2000280204210820002802002106024002400240200128020022032001280208220072044002402000410171450d00200620086a21040240200128020c2209450440200621020c010b200621020340200222002004460d02027f200041016a20002c0000220241004e0d001a200041026a20024160490d001a200041036a20024170490d001a200041046a0b220220006b20056a21052009200741016a2207470d000b0b20022004460d0020022c00001a20052008027f02402005450d00200520084f044020052008460d0141000c020b200520066a2c000041404e0d0041000c010b20060b22001b21082000200620001b21060b2003450d032001280204210b200841104f044020082006200641036a417c7122056b22076a220a41037121094100210341002100200520064704402007417c4d04404100210403402000200420066a22022c000041bf7f4a6a200241016a2c000041bf7f4a6a200241026a2c000041bf7f4a6a200241036a2c000041bf7f4a6a2100200441046a22040d000b0b200621020340200020022c000041bf7f4a6a2100200241016a2102200741016a22070d000b0b02402009450d002005200a417c716a22022c000041bf7f4a210320094101460d00200320022c000141bf7f4a6a210320094102460d00200320022c000241bf7f4a6a21030b200a4102762104200020036a21030340200521072004450d0441c0012004200441c0014f1b2209410371210a2009410274210541002102200441044f04402007200541f007716a210c200721000340200220002802002202417f734107762002410676724181828408716a20002802042202417f734107762002410676724181828408716a20002802082202417f734107762002410676724181828408716a200028020c2202417f734107762002410676724181828408716a2102200041106a2200200c470d000b0b200420096b2104200520076a2105200241087641ff81fc0771200241ff81fc07716a418180046c41107620036a2103200a450d000b2007200941fc01714102746a22022802002200417f734107762000410676724181828408712100200a4101460d02200020022802042200417f734107762000410676724181828408716a2100200a4102460d02200020022802082200417f734107762000410676724181828408716a21000c020b2008450440410021030c030b2008410371210202402008410449044041002103410021070c010b41002103200621002008410c71220721050340200320002c000041bf7f4a6a200041016a2c000041bf7f4a6a200041026a2c000041bf7f4a6a200041036a2c000041bf7f4a6a2103200041046a2100200541046b22050d000b0b2002450d02200620076a21000340200320002c000041bf7f4a6a2103200041016a2100200241016b22020d000b0c020b0c020b200041087641ff811c71200041ff81fc07716a418180046c41107620036a21030b02402003200b490440200b20036b210402400240024020012d00182200410020004103471b220041016b0e020001020b20042100410021040c010b20044101762100200441016a41017621040b200041016a21002001280210210720012802202102200128021c21010340200041016b2200450d02200120072002280210110000450d000b41010f0b0c010b200120062008200228020c110100044041010f0b4100210003402000200446044041000f0b200041016a2100200120072002280210110000450d000b200041016b2004490f0b200128021c20062008200128022028020c1101000bea04010a7f230041306b220324002003200136022c20032000360228200341033a00242003422037021c200341003602142003410036020c027f0240024002402002280210220a450440200228020c2200450d012002280208220120004103746a2104200041016b41ffffffff017141016a2107200228020021000340200041046a28020022050440200328022820002802002005200328022c28020c1101000d040b20012802002003410c6a200141046a2802001100000d03200041086a2100200141086a22012004470d000b0c010b20022802142200450d002000410574210b200041016b41ffffff3f7141016a210720022802082105200228020021000340200041046a28020022010440200328022820002802002001200328022c28020c1101000d030b20032008200a6a220141106a28020036021c20032001411c6a2d00003a00242003200141186a2802003602202001410c6a28020021044100210941002106024002400240200141086a28020041016b0e020002010b200441037420056a220c2802000d01200c28020421040b410121060b200320043602102003200636020c200141046a2802002104024002400240200128020041016b0e020002010b200441037420056a22062802000d01200628020421040b410121090b20032004360218200320093602142005200141146a2802004103746a22012802002003410c6a200141046a2802001100000d02200041086a2100200b200841206a2208470d000b0b200720022802044f0d012003280228200228020020074103746a22002802002000280204200328022c28020c110100450d010b41010c010b41000b200341306a24000bc40201067f200120024101746a210920004180fe0371410876210a200041ff0171210c02400240024002400340200141026a210b200720012d000122026a2108200a20012d000022014704402001200a4b0d0420082107200b22012009470d010c040b200720084b0d0120042008490d02200320076a21010340200245044020082107200b22012009470d020c050b200241016b210220012d0000200141016a2101200c470d000b0b410021020c030b2007200841d48808101d000b2008200441d488081019000b200041ffff03712107200520066a2103410121020340200541016a2100024020052c0000220141004e0440200021050c010b2000200347044020052d0001200141ff0071410874722101200541026a21050c010b41c48808101e000b200720016b22074100480d012002410173210220032005470d000b0b20024101710b0e0020002001200241e0950810270b4301017f230041206b220124002001410036021020014101360204200142043702082001412b36021c200141f182083602182001200141186a360200200120001011000bb20801057f230041f0006b220424002004200336020c200420023602080240024002400240024002402004027f2000027f024020014181024f0440410320002c00800241bf7f4a0d021a20002c00ff0141bf7f4c0d0141020c020b20042001360214200420003602104101210541000c020b20002c00fe0141bf7f4a0b41fd016a22056a2c000041bf7f4c0d01200420053602142004200036021041ab8608210541050b36021c2004200536021820012002492205200120034972450440200220034b0d02200245200120024d7245044020032002200020026a2c000041bf7f4a1b21030b20042003360220200320012202490440200341016a2206200341036b22024100200220034d1b2202490d04024020022006460d00200620026b2107200020036a2c000041bf7f4a0440200741016b21050c010b20022003460d00200020066a220341026b22082c000041bf7f4a0440200741026b21050c010b2008200020026a2206460d00200341036b22082c000041bf7f4a0440200741036b21050c010b20062008460d00200341046b22032c000041bf7f4a0440200741046b21050c010b20032006460d00200741056b21050b200220056a21020b02402002450d00200120024d044020012002460d010c070b200020026a2c000041bf7f4c0d060b20012002460d04027f02400240200020026a22012c00002200410048044020012d0001413f7121052000411f7121032000415f4b0d01200341067420057221000c020b2004200041ff017136022441010c020b20012d0002413f7120054106747221052000417049044020052003410c747221000c010b2003411274418080f0007120012d0003413f71200541067472722200418080c400460d060b2004200036022441012000418001490d001a41022000418010490d001a41034104200041808004491b0b2100200420023602282004200020026a36022c20044105360234200441b487083602302004420537023c2004200441186aad428080808030843703682004200441106aad428080808030843703602004200441286aad4280808080c000843703582004200441246aad4280808080d000843703502004200441206aad428080808020843703480c060b20042002200320051b36022820044103360234200441f487083602302004420337023c2004200441186aad428080808030843703582004200441106aad428080808030843703502004200441286aad428080808020843703480c050b2000200141002005101f000b20044104360234200441d486083602302004420437023c2004200441186aad428080808030843703602004200441106aad4280808080308437035820042004410c6aad428080808020843703502004200441086aad428080808020843703480c030b20022006418c8808101d000b41f89d08101e000b2000200120022001101f000b2004200441c8006a360238200441306a41f89d081011000b850401047f23004180016b22042400027f024002402001280214220241107145044020024120710d01200028020020011016450d0241010c030b2000280200210241810121030340200320046a41026b2002410f712205413072200541d7006a2005410a491b3a0000200341016b2103200241104920024104762102450d000b2001418484084102200320046a41016b41810120036b1017450d0141010c020b2000280200210241810121030340200320046a41026b2002410f712205413072200541376a2005410a491b3a0000200341016b21032002410f4b200241047621020d000b2001418484084102200320046a41016b41810120036b1017450d0041010c010b4101200128021c41de82084102200128022028020c1101000d001a02402001280214220241107145044020024120710d012000280204200110160c020b2000280204210241810121030340200320046a41026b2002410f712200413072200041d7006a2000410a491b3a0000200341016b21032002410f4b200241047621020d000b2001418484084102200320046a41016b41810120036b10170c010b2000280204210241810121030340200320046a41026b2002410f712200413072200041376a2000410a491b3a0000200341016b21032002410f4b200241047621020d000b2001418484084102200320046a41016b41810120036b10170b20044180016a24000bb50b010a7f230041306b22022400410121070240200128021c220541272001280220220a28021022081100000d000240024002402002027f02400240024002400240024002400240024002400240024002400240200028020022010e28020101010101010101030501010401010101010101010101010101010101010101010b0101010107000b200141dc00460d050b200141ff054b0d060c080b2002420037010a200241dce0003b01080c060b2002420037010a200241dce8013b01080c050b2002420037010a200241dce4013b01080c040b2002420037010a200241dcdc013b01080c030b2002420037010a200241dcb8013b01080c020b2002420037010a200241dcce003b01080c010b024041114100200141afb0044f1b2200200041087222032001410b742200200341027441f095086a280200410b74491b220320034104722203200341027441f095086a280200410b7420004b1b220320034102722203200341027441f095086a280200410b7420004b1b2203200341016a2203200341027441f095086a280200410b7420004b1b2203200341016a2203200341027441f095086a280200410b7420004b1b220341027441f095086a280200410b742204200046200020044b6a20036a220341214d0440200341027441f095086a2204280200411576210041ef052106027f024020034121460d002004280204411576210620030d0041000c010b200441046b28020041ffffff00710b2104024020062000417f736a450d00200120046b210b41ef052000200041ef054d1b2109200641016b210341002104034020002009460d032004200041f896086a2d00006a2204200b4b0d012003200041016a2200470d000b200321000b2000410171450d03200241206a22002001410f7141e082086a2d00003a0000200241003a001a200241003b01182002200141147641e082086a2d00003a001b20022001410476410f7141e082086a2d00003a001f20022001410876410f7141e082086a2d00003a001e20022001410c76410f7141e082086a2d00003a001d20022001411076410f7141e082086a2d00003a001c2001410172674102762201200241186a22046a220341fb003a0000200341016b41f5003a00002004200141026b22016a41dc003a0000200241fd003a0021200241106a20002f01003b0100200220022902183703080c060b2003412241b894081015000b200941ef0541c894081015000b4100210141020c040b20014120490d01200141ff00490d002001418080044f0440200141808008490440200141e48808412c41bc890841d001418c8b0841e603101c450d030c020b200141feffff0071419ef00a46200141e0ffff007141e0cd0a4672200141c0ee0a6b41794b200141b09d0b6b41714b7272200141f0d70b6b41704b20014180f00b6b41dd6c4b7220014180800c6b419d744b200141d0a60c6b417a4b7272720d022001418082386b41afc5544b0d02200141f08338490d010c020b200141f28e08412841c28f0841a20241e4910841a902101c450d010b2002200136020c20024180013a00080c030b2002412c6a22002001410f7141e082086a2d00003a0000200241003a0026200241003b01242002200141147641e082086a2d00003a002720022001410476410f7141e082086a2d00003a002b20022001410876410f7141e082086a2d00003a002a20022001410c76410f7141e082086a2d00003a002920022001411076410f7141e082086a2d00003a00282001410172674102762201200241246a22046a220341fb003a0000200341016b41f5003a00002004200141026b22016a41dc003a0000200241fd003a002d200241106a20002f01003b0100200220022902243703080b410a0b22003a0013200220013a001220022d0008418001470d01200228020c21010b200520012008110000450d010c020b2005200141ff01712201200241086a6a200020016b200a28020c1101000d010b20054127200811000021070b200241306a240020070bf10101057f230041306b2202240020002802002104410121000240200128021c220341b48308410c2001280220220528020c22061101000d0020042802042101200241033602042002419c83083602002002420337020c20022001ad4280808080308437031820022001410c6aad428080808020843703282002200141086aad428080808020843703202002200241186a2201360208200320052002101b0d00200341c08308410220061101000d00200241206a2004280200220041086a290200370300200241286a200041106a29020037030020022000290200370318200320052001101b21000b200241306a240020000be20101017f230041106b220224002002410036020c20002002410c6a027f20014180014f044020014180104f04402001418080044f044020022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040c030b20022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c020b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b200220013a000c41010b10241a200241106a240041000bb60501087f230041206b220a2400200a412f360218200141036a417c7120016b2109200221040240024002400240034020022004490d012004200420096b4107714100200420094f1b22056b210820042005490d02024002402005450d00027f200541016b200120046a220741016b22032d0000412f460d001a2003200120086a2206460d01200541026b200741026b22032d0000412f460d001a20032006460d01200541036b200741036b22032d0000412f460d001a20032006460d01200541046b200741046b22032d0000412f460d001a20032006460d01200541056b200741056b22032d0000412f460d001a20032006460d01200541066b200741066b22032d0000412f460d001a20032006460d01200541076b200741076b22032d0000412f460d001a20032006460d0120054178720b20086a21040c010b20092004200420094b1b21050340200520082203490440200341086b21084180828408200120036a220741086b280200220641afdebcf902736b2006724180828408200741046b280200220641afdebcf902736b2006727141808182847871418081828478460d010b0b200320044b0d042003210403402004450d03200441016b220420016a2d0000412f470d000b0b200220044d0d00200120046a2d0000412f470d000b027f4100200441016a2203450d001a200220034d0440200220022003460d011a0c050b200120036a2c000041bf7f4c0d0420030b220320016a2101200220036b21020b2000280200200120021025200a41206a240041000f0b230041306b2200240020002004360204200020083602002000410236020c2000418c9508360208200042023702142000200041046aad4280808080208437032820002000ad428080808020843703202000200041206a360210200041086a41f085081011000b20032004418086081019000b2001200220032002101f000b0b0020002001200210011a0b120020012802041a200041e89c082001101b0b6501017f230041306b2204240020042001360204200420003602002004410236020c20042003360208200442023702142004200441046aad4280808080208437032820042004ad428080808020843703202004200441206a360210200441086a20021011000b0b991e0200418080080b851e617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f206c6f6e67696e707574206f7574206f662072616e6765736f6d655f76616c756573686f756c645f70616e696370616e6963206166746572206c6f67690002000f0000002f55736572732f616e647265696d2f6d756c746976657273782f72732f6d782d73646b2d72732f636f6e7472616374732f666561747572652d74657374732f70616e69632d6d6573736167652d66656174757265732f7372632f70616e69635f66656174757265732e727300800002006b0000001a000000090000006578616d706c652070616e6963206d657373616765200000fc00020016000000800002006b000000130000000900000073635f70616e69632120696e20636f6e7374727563746f7273635f70616e69632120746573746265666f72652d70616e69632e2e303132333435363738396162636465663a63616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c756501000000000000007001020001000000700102000100000070616e69636b6564206174203a0a696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e64657820697320c201020020000000e201020012000000307830303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839396c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e72730000ce02020020000000850000001e000000ce02020020000000a1000000090000006c6962726172792f636f72652f7372632f7374722f6d6f642e72735b2e2e2e5d626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e6720606000300302000e0000003e03020004000000420302001000000052030200010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f66206000740302000b0000007f03020026000000a503020008000000ad030200060000005203020001000000206973206f7574206f6620626f756e6473206f6620600000740302000b000000dc030200160000005203020001000000100302001b000000a40100002c0000006c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e72730000001c040200250000001a000000360000001c040200250000000a0000002b000000000601010301040205070702080809020a050b020e04100111021205131c140115021702190d1c051d081f0124016a046b02af03b102bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa04fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64658a8c8d8fb6c1c3c4c6cbd65cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f92116f5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6fddde935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b4e03340c813709160a08183b45390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a0626031d080280d0521003372c082a161a261c1417094e042409440d19070a0648082709750b423e2a063b050a06510601051003050b5908021d621e48080a80a65e22450b0a060d133a060a06141c2c041780b93c64530c48090a46451b4808530d49070a80b6220e0a06460a1d03474937030e080a0639070a813619073b031d55010f320d839b66750b80c48a4c630d843010160a8f9b0582479ab93a86c68239072a045c06260a460a28051381b03a80c65b654b0439071140050b020e97f80884d6290aa2e781330f011d060e0408818c89046b050d030907108f6080fa0681b44c4709743c80f60a73087015467a140c140c570919808781470385420f1584501f060680d52b053e2101702d031a040281401f113a050181d02a80d62b040181e080f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d80411030d0377045f060c04010f0c0438080a0628082c04023e81540c1d030a0538071c06090780fa840600010305050606020706080709110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a071b011c021f1620032b032d0b2e01300431023201a704a902aa04ab08fa02fb05fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f7d7eaeaf4dbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596262e2fa7afb7bfc7cfd7df9a00409798308f1fcecfd2d4ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab051f08811c03190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b0757070206170c500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a062f3180f4083c030f033e0538082b0582ff1118082f112d03210f210f808c04829a160b158894052f053b07020e180980be22740c80d61a81100580e109f29e033709815c1480b80880dd153b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f0d6c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e72730000000d0a0200280000004d000000280000000d0a020028000000590000001600000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820580a0200120000006a0a02002200000072616e676520656e6420696e646578209c0a0200100000006a0a020022000000736c69636520696e64657820737461727473206174202062757420656e64732061742000bc0a020016000000d20a02000d0000000003000083042000910560005d13a0001217201f0c20601fef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fe20369eff6036fd01e136010a2137240de137ab0e61392f18e139301ce14af31ee14e4034a1521e61e153f06a61544f6fe1549dbc615500cf615665d1a15600da215700e0a158aee2215aece4e15bd0e8615c2000ee5cf0017f5d00700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b033b092a180120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c01090128010301370101030503010407020b021d013a01020201010303010407020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b0749021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300041c031d021e02400201070801020b09012d030101750222017603040209010603db0202013a010107010101010208060a0201301f3104300a040326090c02200402063801010203010105380802029803010d0107040106010302c6400001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b01012c03300102040202020124014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a5020004410500024f04460b31047b01360f290102020a033104020207013d03240501083e010c0234090101080402015f030204060102019d01030815023902010101010c0109010e07030543010206010102010103040301010e025508020301011701510102060101020101020102eb010204060201021b025508020101026a0101010208650101010204010500090102f5010a040401900402020401200a280602040801090602032e0d010200070106010152160207010201027a06030101020107010148020301010100020b023405050317010001060f000c030300053b0700013f0451010b020002002e021700050306080802071e0494030037043208010e011605010f000701110207010201056401a00700013d040004fe0200076d07006080f0000000000000040000000400000006000000070000000800000070616e6963206f636375727265643a2001000000000000002f55736572732f616e647265696d2f6d756c746976657273782f72732f6d782d73646b2d72732f6672616d65776f726b2f7761736d2d616461707465722f7372632f70616e69632e7273756e61626c6520746f2077726974652070616e696300980e02004a0000002f0000001e0041889e080b0438ffffff", + "report": { + "imports": [ + "checkNoPayment", + "getNumArguments", + "mBufferAppendBytes", + "mBufferSetBytes", + "managedSignalError", + "managedWriteLog", + "signalError", + "smallIntGetUnsignedArgument" + ], + "isMemGrow": false, + "eiCheck": { + "eiVersion": "1.5", + "ok": true + }, + "codeReport": { + "path": "../output/panic-message-features.wasm", + "size": 12838, + "hasAllocator": false, + "hasPanic": "with message" + } + } +} diff --git a/test/features/panic-message-features/output/panic-message-std.mxsc.json b/test/features/panic-message-features/output/panic-message-std.mxsc.json new file mode 100644 index 000000000..8795efa27 --- /dev/null +++ b/test/features/panic-message-features/output/panic-message-std.mxsc.json @@ -0,0 +1,97 @@ +{ + "buildInfo": { + "rustc": { + "version": "1.86.0", + "commitHash": "05f9846f893b09a1be1fc8560e33fc3c815cfecb", + "commitDate": "2025-03-31", + "channel": "Stable", + "short": "rustc 1.86.0 (05f9846f8 2025-03-31)" + }, + "contractCrate": { + "name": "panic-message-features", + "version": "0.0.0" + }, + "framework": { + "name": "multiversx-sc", + "version": "0.62.0" + } + }, + "abi": { + "docs": [ + "Explores panic messaging.", + "Sending panic messages to the VM is possible, as shown in this contract,", + "but it greatly inflates the bytecode size." + ], + "name": "PanicMessageFeatures", + "constructor": { + "inputs": [ + { + "name": "should_panic", + "type": "bool" + } + ], + "outputs": [] + }, + "endpoints": [ + { + "name": "panicWithMessage", + "mutability": "mutable", + "inputs": [ + { + "name": "some_value", + "type": "u32" + } + ], + "outputs": [] + }, + { + "docs": [ + "Logs do not get recorded in case of panic." + ], + "name": "panicAfterLog", + "mutability": "mutable", + "inputs": [], + "outputs": [] + }, + { + "name": "sc_panic", + "mutability": "readonly", + "inputs": [], + "outputs": [] + } + ], + "events": [ + { + "identifier": "before-panic", + "inputs": [] + } + ], + "esdtAttributes": [], + "hasCallback": false, + "types": {} + }, + "code": "0061736d0100000001520d60027f7f017f60037f7f7f017f60027f7f0060000060037f7f7f0060017f006000017f60047f7f7f7f0060057f7f7f7f7f017f60017f017e60017f017f60077f7f7f7f7f7f7f017f60067f7f7f7f7f7f0002be010803656e760b7369676e616c4572726f72000203656e76126d427566666572417070656e644279746573000103656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e760f6765744e756d417267756d656e7473000603656e760f6d4275666665725365744279746573000103656e760f6d616e6167656457726974654c6f67000203656e760e636865636b4e6f5061796d656e7400030332310207000506060a030303000203030304020400080804010b0405070000000000010400020c0204050202020201000004070405017001131305030100030616037f01418080080b7f0041a1a1080b7f0041b0a1080b076508066d656d6f7279020004696e6974000f1070616e6963576974684d65737361676500110d70616e696341667465724c6f6700140873635f70616e696300150863616c6c4261636b00160a5f5f646174615f656e6403010b5f5f686561705f6261736503020918010041010b121223242526302b313228272a2f343536332d0c01020a9757310900200020011000000b2e01017f418080084117100a22042000200110011a200441978008410310011a20042002200310011a20041002000b1101017f100c22022000200110051a20020b1400100420004604400f0b419a800841191000000b1901017f4180a1084180a10828020041016b220036020020000b080041014100100a0b8b0101037f4184a1082802002201410071220204404184a108200141016a20026b22013602000b4184a108200020016a22024188a1082802004b047f2000411076200041ffff03714100476a2202400021014188a10828020021034188a108200120026a41107436020020004184a1082802002001411074220020002003461b22016a0520020b36020020010b4b02017f017e101010074101100b0240024041001003220142015804402001a741016b0d020c010b41dd8008410c41c1800841121009000b410121000b2000044041ac820841181008000b0b7101017f230041206b22002400024002404198a10828020041ffffffff07710440419ca1082802000d010b4190a1082802000d014194a1084101360200200041206a24000f0b200041003602182000410136020c200041c8a00836020820004204370210200041086a41d0a00810130b000b7b02017f017e230041306b22002400101010074101100b4100100322014280808080105a044041d38008410a41b38008410e1009000b200020013e020c200041013602142000419482083602102000420137021c2000410136022c2000200041286a36021820002000410c6a360228200041106a419c82081013000b0b0020002802002001101a0bf80102027f017e230041106b22022400200241013b010c2002200136020820022000360204230041106b22012400200241046a220029020021042001200036020c20012004370204230041106b22002400200141046a2201280200220228020c2103024002400240024020022802040e020001020b20030d0141012102410021030c020b20030d00200228020022022802042103200228020021020c010b20004180808080783602002000200136020c2000410641072001280204200128020822002d000820002d0009102c000b20002003360204200020023602002000410841092001280204200128020822002d000820002d0009102c000b930101047f230041206b22002400101010074100100b230041106b22012400100d2103200141d28208410c100a220241187420024180fe03714108747220024108764180fe03712002411876727236020c20032001410c6a410410011a2003100d1006200141106a2400200041003602182000410136020c200041f8800836020820004204370210200041086a41ec81081013000b1300101010074100100b41c48208410e1008000b02000b7501027f027f2002280204044020022802082203450440418ca1082d00001a2001100e0c020b200228020021022001100e22040440200420022001200320012003491b10370b20040c010b418ca1082d00001a2001100e0b21022000200136020820002002410120021b36020420002002453602000b3a002000450440230041206b22002400200041003602182000410136020c200041f0820836020820004204370210200041086a20011013000b000b6701017f230041306b2203240020032001360204200320003602002003410236020c200341e883083602082003420237021420032003ad428080808010843703282003200341046aad428080808010843703202003200341206a360210200341086a20021013000bdd0201087f230041106b22052400410a21022000220341e8074f0440200321040340200541066a20026a220641036b20044190ce006e220341f0b1036c20046a220741ffff037141e4006e2208410174220941fb83086a2d00003a0000200641046b200941fa83086a2d00003a0000200641016b2008419c7f6c20076a41ffff0371410174220741fb83086a2d00003a0000200641026b200741fa83086a2d00003a0000200241046b2102200441fface2044b200321040d000b0b0240200341094d0440200321040c010b200220056a41056a200341ffff037141e4006e2204419c7f6c20036a41ffff0371410174220341fb83086a2d00003a0000200241026b2202200541066a6a200341fa83086a2d00003a00000b4100200020041b450440200241016b2202200541066a6a2004410174411e7141fb83086a2d00003a00000b200141014100200541066a20026a410a20026b101b200541106a24000bce0401087f20002802142207410171220a20046a210602402007410471450440410021010c010b2002450d0020024103712208450d00200121050340200920052c000041bf7f4a6a2109200541016a2105200841016b22080d000b200620096a21060b412b418080c400200a1b21092000280200450440200028021c220520002802202200200920012002101c044041010f0b200520032004200028020c1101000f0b0240024002402006200028020422084f0440200028021c220520002802202200200920012002101c450d0141010f0b2007410871450d012000280210210b2000413036021020002d0018210c41012105200041013a0018200028021c22072000280220220a200920012002101c0d02200820066b41016a210502400340200541016b2205450d0120074130200a280210110000450d000b41010f0b200720032004200a28020c110100044041010f0b2000200c3a00182000200b36021041000f0b200520032004200028020c11010021050c010b200820066b2106024002400240410120002d0018220520054103461b220541016b0e020001020b20062105410021060c010b20064101762105200641016a41017621060b200541016a21052000280210210820002802202107200028021c210002400340200541016b2205450d01200020082007280210110000450d000b41010f0b4101210520002007200920012002101c0d00200020032004200728020c1101000d004100210503402005200646044041000f0b200541016a2105200020082007280210110000450d000b200541016b2006490f0b20050b380002402002418080c400460d00200020022001280210110000450d0041010f0b200345044041000f0b200020032004200128020c1101000b0e0020002001200241a0950810380bea04010a7f230041306b220324002003200136022c20032000360228200341033a00242003422037021c200341003602142003410036020c027f0240024002402002280210220a450440200228020c2200450d012002280208220120004103746a2104200041016b41ffffffff017141016a2107200228020021000340200041046a28020022050440200328022820002802002005200328022c28020c1101000d040b20012802002003410c6a200141046a2802001100000d03200041086a2100200141086a22012004470d000b0c010b20022802142200450d002000410574210b200041016b41ffffff3f7141016a210720022802082105200228020021000340200041046a28020022010440200328022820002802002001200328022c28020c1101000d030b20032008200a6a220141106a28020036021c20032001411c6a2d00003a00242003200141186a2802003602202001410c6a28020021044100210941002106024002400240200141086a28020041016b0e020002010b200441037420056a220c2802000d01200c28020421040b410121060b200320043602102003200636020c200141046a2802002104024002400240200128020041016b0e020002010b200441037420056a22062802000d01200628020421040b410121090b20032004360218200320093602142005200141146a2802004103746a22012802002003410c6a200141046a2802001100000d02200041086a2100200b200841206a2208470d000b0b200720022802044f0d012003280228200228020020074103746a22002802002000280204200328022c28020c110100450d010b41010c010b41000b200341306a24000bc40201067f200120024101746a210920004180fe0371410876210a200041ff0171210c02400240024002400340200141026a210b200720012d000122026a2108200a20012d000022014704402001200a4b0d0420082107200b22012009470d010c040b200720084b0d0120042008490d02200320076a21010340200245044020082107200b22012009470d020c050b200241016b210220012d0000200141016a2101200c470d000b0b410021020c030b2007200841c888081020000b2008200441c88808101d000b200041ffff03712107200520066a2103410121020340200541016a2100024020052c0000220141004e0440200021050c010b2000200347044020052d0001200141ff0071410874722101200541026a21050c010b41b888081021000b200720016b22074100480d012002410173210220032005470d000b0b20024101710b0e0020002001200241d4950810380b4301017f230041206b220124002001410036021020014101360204200142043702082001412b36021c2001418a83083602182001200141186a360200200120001013000bb10801057f230041f0006b220424002004200336020c200420023602080240024002400240024002402004027f2000027f024020014181024f0440410320002c00800241bf7f4a0d021a20002c00ff0141bf7f4c0d0141020c020b20042001360214200420003602104101210541000c020b20002c00fe0141bf7f4a0b41fd016a22056a2c000041bf7f4c0d012004200536021420042000360210419f8608210541050b36021c2004200536021820012002492205200120034972450440200220034b0d02200245200120024d7245044020032002200020026a2c000041bf7f4a1b21030b20042003360220200320012202490440200341016a2206200341036b22024100200220034d1b2202490d04024020022006460d00200620026b2107200020036a2c000041bf7f4a0440200741016b21050c010b20022003460d00200020066a220341026b22082c000041bf7f4a0440200741026b21050c010b2008200020026a2206460d00200341036b22082c000041bf7f4a0440200741036b21050c010b20062008460d00200341046b22032c000041bf7f4a0440200741046b21050c010b20032006460d00200741056b21050b200220056a21020b02402002450d00200120024d044020012002460d010c070b200020026a2c000041bf7f4c0d060b20012002460d04027f02400240200020026a22012c00002200410048044020012d0001413f7121052000411f7121032000415f4b0d01200341067420057221000c020b2004200041ff017136022441010c020b20012d0002413f7120054106747221052000417049044020052003410c747221000c010b2003411274418080f0007120012d0003413f71200541067472722200418080c400460d060b2004200036022441012000418001490d001a41022000418010490d001a41034104200041808004491b0b2100200420023602282004200020026a36022c20044105360234200441a887083602302004420537023c2004200441186aad428080808020843703682004200441106aad428080808020843703602004200441286aad428080808030843703582004200441246aad4280808080c000843703502004200441206aad428080808010843703480c060b20042002200320051b36022820044103360234200441e887083602302004420337023c2004200441186aad428080808020843703582004200441106aad428080808020843703502004200441286aad428080808010843703480c050b20002001410020051022000b20044104360234200441c886083602302004420437023c2004200441186aad428080808020843703602004200441106aad4280808080208437035820042004410c6aad428080808010843703502004200441086aad428080808010843703480c030b20022006418088081020000b41ec9d081021000b20002001200220011022000b2004200441c8006a360238200441306a41ec9d081013000ba30a010c7f027f20002802002106200028020421070240024002402001220928020022022001280208220072044002402000410171450d00200620076a21040240200128020c2208450440200621000c010b200621000340200022012004460d02027f200141016a20012c0000220041004e0d001a200141026a20004160490d001a200141036a20004170490d001a200141046a0b220020016b20036a21032008200541016a2205470d000b0b20002004460d0020002c00001a20032007027f02402003450d00200320074f044020032007460d0141000c020b200320066a2c000041404e0d0041000c010b20060b22001b21072000200620001b21060b2002450d032009280204210b200741104f044020072006200641036a417c7122036b22056a220a41037121084100210241002101200320064704402005417c4d04404100210403402001200420066a22002c000041bf7f4a6a200041016a2c000041bf7f4a6a200041026a2c000041bf7f4a6a200041036a2c000041bf7f4a6a2101200441046a22040d000b0b200621000340200120002c000041bf7f4a6a2101200041016a2100200541016a22050d000b0b02402008450d002003200a417c716a22002c000041bf7f4a210220084101460d00200220002c000141bf7f4a6a210220084102460d00200220002c000241bf7f4a6a21020b200a4102762104200120026a21020340200321052004450d0441c0012004200441c0014f1b2208410371210a2008410274210341002100200441044f04402005200341f007716a210c20052101034020002001280200220d417f73410776200d410676724181828408716a20012802042200417f734107762000410676724181828408716a20012802082200417f734107762000410676724181828408716a200128020c2200417f734107762000410676724181828408716a2100200141106a2201200c470d000b0b200420086b2104200320056a2103200041087641ff81fc0771200041ff81fc07716a418180046c41107620026a2102200a450d000b2005200841fc01714102746a22002802002201417f734107762001410676724181828408712101200a4101460d02200120002802042205417f734107762005410676724181828408716a2101200a4102460d02200120002802082200417f734107762000410676724181828408716a21010c020b2007450440410021020c030b2007410371210002402007410449044041002102410021050c010b41002102200621012007410c71220521030340200220012c000041bf7f4a6a200141016a2c000041bf7f4a6a200141026a2c000041bf7f4a6a200141036a2c000041bf7f4a6a2102200141046a2101200341046b22030d000b0b2000450d02200520066a21010340200220012c000041bf7f4a6a2102200141016a2101200041016b22000d000b0c020b0c020b200141087641ff811c71200141ff81fc07716a418180046c41107620026a21020b02402002200b490440200b20026b210402400240024020092d00182200410020004103471b220141016b0e020001020b20042101410021040c010b20044101762101200441016a41017621040b200141016a21012009280210210320092802202100200928021c21050340200141016b2201450d02200520032000280210110000450d000b41010c030b0c010b4101200520062007200028020c1101000d011a410021010340410020012004460d021a200141016a2101200520032000280210110000450d000b200141016b2004490c010b200928021c20062007200928022028020c1101000b0b850401047f23004180016b22042400027f024002402001280214220241107145044020024120710d0120002802002001101a450d0241010c030b2000280200210241810121030340200320046a41026b2002410f712205413072200541d7006a2005410a491b3a0000200341016b2103200241104920024104762102450d000b200141f883084102200320046a41016b41810120036b101b450d0141010c020b2000280200210241810121030340200320046a41026b2002410f712205413072200541376a2005410a491b3a0000200341016b21032002410f4b200241047621020d000b200141f883084102200320046a41016b41810120036b101b450d0041010c010b4101200128021c41f882084102200128022028020c1101000d001a02402001280214220241107145044020024120710d0120002802042001101a0c020b2000280204210241810121030340200320046a41026b2002410f712200413072200041d7006a2000410a491b3a0000200341016b21032002410f4b200241047621020d000b200141f883084102200320046a41016b41810120036b101b0c010b2000280204210241810121030340200320046a41026b2002410f712200413072200041376a2000410a491b3a0000200341016b21032002410f4b200241047621020d000b200141f883084102200320046a41016b41810120036b101b0b20044180016a24000bb50b010a7f230041306b22022400410121070240200128021c220541272001280220220a28021022081100000d000240024002402002027f02400240024002400240024002400240024002400240024002400240200028020022010e28020101010101010101030501010401010101010101010101010101010101010101010b0101010107000b200141dc00460d050b200141ff054b0d060c080b2002420037010a200241dce0003b01080c060b2002420037010a200241dce8013b01080c050b2002420037010a200241dce4013b01080c040b2002420037010a200241dcdc013b01080c030b2002420037010a200241dcb8013b01080c020b2002420037010a200241dcce003b01080c010b024041114100200141afb0044f1b2200200041087222032001410b742200200341027441e495086a280200410b74491b220320034104722203200341027441e495086a280200410b7420004b1b220320034102722203200341027441e495086a280200410b7420004b1b2203200341016a2203200341027441e495086a280200410b7420004b1b2203200341016a2203200341027441e495086a280200410b7420004b1b220341027441e495086a280200410b742204200046200020044b6a20036a220341214d0440200341027441e495086a2204280200411576210041ef052106027f024020034121460d002004280204411576210620030d0041000c010b200441046b28020041ffffff00710b2104024020062000417f736a450d00200120046b210b41ef052000200041ef054d1b2109200641016b210341002104034020002009460d032004200041ec96086a2d00006a2204200b4b0d012003200041016a2200470d000b200321000b2000410171450d03200241206a22002001410f7141fa82086a2d00003a0000200241003a001a200241003b01182002200141147641fa82086a2d00003a001b20022001410476410f7141fa82086a2d00003a001f20022001410876410f7141fa82086a2d00003a001e20022001410c76410f7141fa82086a2d00003a001d20022001411076410f7141fa82086a2d00003a001c2001410172674102762201200241186a22046a220341fb003a0000200341016b41f5003a00002004200141026b22016a41dc003a0000200241fd003a0021200241106a20002f01003b0100200220022902183703080c060b2003412241ac94081019000b200941ef0541bc94081019000b4100210141020c040b20014120490d01200141ff00490d002001418080044f0440200141808008490440200141d88808412c41b0890841d00141808b0841e603101f450d030c020b200141feffff0071419ef00a46200141e0ffff007141e0cd0a4672200141c0ee0a6b41794b200141b09d0b6b41714b7272200141f0d70b6b41704b20014180f00b6b41dd6c4b7220014180800c6b419d744b200141d0a60c6b417a4b7272720d022001418082386b41afc5544b0d02200141f08338490d010c020b200141e68e08412841b68f0841a20241d8910841a902101f450d010b2002200136020c20024180013a00080c030b2002412c6a22002001410f7141fa82086a2d00003a0000200241003a0026200241003b01242002200141147641fa82086a2d00003a002720022001410476410f7141fa82086a2d00003a002b20022001410876410f7141fa82086a2d00003a002a20022001410c76410f7141fa82086a2d00003a002920022001411076410f7141fa82086a2d00003a00282001410172674102762201200241246a22046a220341fb003a0000200341016b41f5003a00002004200141026b22016a41dc003a0000200241fd003a002d200241106a20002f01003b0100200220022902243703080b410a0b22003a0013200220013a001220022d0008418001470d01200228020c21010b200520012008110000450d010c020b2005200141ff01712201200241086a6a200020016b200a28020c1101000d010b20054127200811000021070b200241306a240020070be90201057f230041306b2202240020002802002103410121000240200128021c22044184a008410c2001280220220528020c22061101000d002003280208210120024103360204200241d49f083602002002420337020c20022001ad4280808080208437031820022001410c6aad428080808010843703282002200141086aad428080808010843703202002200241186a2201360208200420052002101e0d002001200328020022012003280204410c6a2205280200110200027f200229031842f88299bd95eec6c5b97f510440200121034104200229032042edbaadb6cd85d4f5e300510d011a0b200241186a2001200528020011020041002100200229031842d096a6c392deedc037520d01200229032042e3e0d6a1f6a2979d56520d01200141046a210341080b20016a28020021012003280200210320044190a00841022006110100450440410021002004200320012006110100450d010b410121000b200241306a240020000be20101017f230041106b220224002002410036020c20002002410c6a027f20014180014f044020014180104f04402001418080044f044020022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d41040c030b20022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d41030c020b20022001413f71418001723a000d2002200141067641c001723a000c41020c010b200220013a000c41010b10281a200241106a240041000bb60501087f230041206b220a2400200a412f360218200141036a417c7120016b2109200221040240024002400240034020022004490d012004200420096b4107714100200420094f1b22056b210820042005490d02024002402005450d00027f200541016b200120046a220741016b22032d0000412f460d001a2003200120086a2206460d01200541026b200741026b22032d0000412f460d001a20032006460d01200541036b200741036b22032d0000412f460d001a20032006460d01200541046b200741046b22032d0000412f460d001a20032006460d01200541056b200741056b22032d0000412f460d001a20032006460d01200541066b200741066b22032d0000412f460d001a20032006460d01200541076b200741076b22032d0000412f460d001a20032006460d0120054178720b20086a21040c010b20092004200420094b1b21050340200520082203490440200341086b21084180828408200120036a220741086b280200220641afdebcf902736b2006724180828408200741046b280200220641afdebcf902736b2006727141808182847871418081828478460d010b0b200320044b0d042003210403402004450d03200441016b220420016a2d0000412f470d000b0b200220044d0d00200120046a2d0000412f470d000b027f4100200441016a2203450d001a200220034d0440200220022003460d011a0c050b200120036a2c000041bf7f4c0d0420030b220320016a2101200220036b21020b2000280200200120021029200a41206a240041000f0b230041306b2200240020002004360204200020083602002000410236020c200041809508360208200042023702142000200041046aad4280808080108437032820002000ad428080808010843703202000200041206a360210200041086a41e485081013000b2003200441f48508101d000b20012002200320021022000b0b0020002001200210011a0b120020012802041a200041dc9c082001101e0b0900200041003602000bd10201027f230041206b220624004198a1084198a108280200220741016a36020002400240024020074100480d0041a0a1082d00000d0141a0a10841013a0000419ca108419ca10828020041016a3602004190a10828020022024100480d004190a108200241016a3602004194a1082802000d024190a108200236020041a0a10841003a00002004450d00000b000b200620002002110200000b200641086a20002001110200200620053a001d200620043a001c2006200336021820062006290308370210230041306b220024002000200641106a360208100c22014101410010051a2000200136020c200141f49c084110102920004101360214200041849d083602102000420137021c2000410536022c2000200041286a3602182000200041086a3602282000410c6a41dc9c08200041106a101e200028020c21020440200241d69d08411510290b200028020c1002000b2200200042edbaadb6cd85d4f5e300370308200042f88299bd95eec6c5b97f3703000bb50101027f230041206b220324000240027f41002001200120026a22024b0d001a410041082002200028020022014101742204200220044b1b2202200241084d1b22044100480d001a4100210220032001047f2003200136021c2003200028020436021441010541000b360218200341086a2004200341146a101720032802084101470d0120032802102100200328020c0b41c09f081018000b200328020c21012000200436020020002001360204200341206a24000b02000bbf0102037f017e230041306b220224002001280200418080808078460440200128020c2103200241146a22044100360200200242808080801037020c200241206a2003280200220341086a290200370300200241286a200341106a290200370300200220032902003703182002410c6a41ec9f08200241186a101e1a200241086a200428020022033602002002200229020c2205370300200141086a2003360200200120053702000b200041e0a00836020420002001360200200241306a24000b1200200041f0a008360204200020013602000b0c00200020012902003703000b2000200042e3e0d6a1f6a2979d56370308200042d096a6c392deedc0373703000b4001017f20022000280200200028020822036b4b0440200020032002102e200028020821030b200028020420036a2001200210372000200220036a36020841000bd80301077f230041106b22032400024020014180014f04402003410036020c027f20014180104f04402001418080044f044020032001413f71418001723a000f2003200141127641f001723a000c20032001410676413f71418001723a000e20032001410c76413f71418001723a000d41040c020b20032001413f71418001723a000e20032001410c7641e001723a000c20032001410676413f71418001723a000d41030c010b20032001413f71418001723a000d2003200141067641c001723a000c41020b210120012000280200200028020822026b4b0440200020022001102e200028020821020b200028020420026a2003410c6a200110372000200120026a3602080c010b200028020822062000280200460440230041206b22022400024041082000280200220541016a220420054101742208200420084b1b2204200441084d1b220441004e047f20022005047f2002200536021c2002200028020436021441010541000b360218200241086a2004200241146a101720022802084101470d0120022802101a200228020c0541000b41e49e081018000b200228020c21052000200436020020002005360204200241206a24000b2000200641016a360208200028020420066a20013a00000b200341106a240041000b0c00200041ec9f082001101e0bfd0401067f200241104f044002402000410020006b41037122056a220420004d0d002001210320050440200521060340200020032d00003a0000200341016a2103200041016a2100200641016b22060d000b0b200541016b4107490d000340200020032d00003a0000200041016a200341016a2d00003a0000200041026a200341026a2d00003a0000200041036a200341036a2d00003a0000200041046a200341046a2d00003a0000200041056a200341056a2d00003a0000200041066a200341066a2d00003a0000200041076a200341076a2d00003a0000200341086a2103200041086a22002004470d000b0b2004200220056b2207417c7122086a21000240200120056a2206410371450440200020044d0d0120062101034020042001280200360200200141046a2101200441046a22042000490d000b0c010b200020044d0d002006410374220541187121032006417c71220241046a2101410020056b4118712105200228020021020340200420022003762001280200220220057472360200200141046a2101200441046a22042000490d000b0b20074103712102200620086a21010b02402000200020026a22064f0d002002410771220304400340200020012d00003a0000200141016a2101200041016a2100200341016b22030d000b0b200241016b4107490d000340200020012d00003a0000200041016a200141016a2d00003a0000200041026a200141026a2d00003a0000200041036a200141036a2d00003a0000200041046a200141046a2d00003a0000200041056a200141056a2d00003a0000200041066a200141066a2d00003a0000200041076a200141076a2d00003a0000200141086a2101200041086a22002006470d000b0b0b6501017f230041306b2204240020042001360204200420003602002004410236020c20042003360208200442023702142004200441046aad4280808080108437032820042004ad428080808010843703202004200441206a360210200441086a20021013000b0b91210200418080080bfd20617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f206c6f6e67696e707574206f7574206f662072616e6765736f6d655f76616c756573686f756c645f70616e696370616e6963206166746572206c6f67690002000f0000002f55736572732f616e647265696d2f6d756c746976657273782f72732f6d782d73646b2d72732f636f6e7472616374732f666561747572652d74657374732f70616e69632d6d6573736167652d66656174757265732f7372632f70616e69635f66656174757265732e727300800002006b0000001a000000090000006578616d706c652070616e6963206d657373616765200000fc00020016000000800002006b000000130000000900000073635f70616e69632120696e20636f6e7374727563746f7273635f70616e69632120746573746265666f72652d70616e69636361706163697479206f766572666c6f77005e010200110000002e2e3031323334353637383961626364656663616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e6465782069732000b501020020000000d501020012000000307830303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839396c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e72730000c202020020000000850000001e000000c202020020000000a1000000090000006c6962726172792f636f72652f7372632f7374722f6d6f642e72735b2e2e2e5d626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e6720606000240302000e0000003203020004000000360302001000000046030200010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f66206000680302000b00000073030200260000009903020008000000a1030200060000004603020001000000206973206f7574206f6620626f756e6473206f6620600000680302000b000000d0030200160000004603020001000000040302001b000000a40100002c0000006c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e727300000010040200250000001a0000003600000010040200250000000a0000002b000000000601010301040205070702080809020a050b020e04100111021205131c140115021702190d1c051d081f0124016a046b02af03b102bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa04fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64658a8c8d8fb6c1c3c4c6cbd65cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f92116f5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6fddde935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b4e03340c813709160a08183b45390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a0626031d080280d0521003372c082a161a261c1417094e042409440d19070a0648082709750b423e2a063b050a06510601051003050b5908021d621e48080a80a65e22450b0a060d133a060a06141c2c041780b93c64530c48090a46451b4808530d49070a80b6220e0a06460a1d03474937030e080a0639070a813619073b031d55010f320d839b66750b80c48a4c630d843010160a8f9b0582479ab93a86c68239072a045c06260a460a28051381b03a80c65b654b0439071140050b020e97f80884d6290aa2e781330f011d060e0408818c89046b050d030907108f6080fa0681b44c4709743c80f60a73087015467a140c140c570919808781470385420f1584501f060680d52b053e2101702d031a040281401f113a050181d02a80d62b040181e080f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d80411030d0377045f060c04010f0c0438080a0628082c04023e81540c1d030a0538071c06090780fa840600010305050606020706080709110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a071b011c021f1620032b032d0b2e01300431023201a704a902aa04ab08fa02fb05fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f7d7eaeaf4dbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596262e2fa7afb7bfc7cfd7df9a00409798308f1fcecfd2d4ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab051f08811c03190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b0757070206170c500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a062f3180f4083c030f033e0538082b0582ff1118082f112d03210f210f808c04829a160b158894052f053b07020e180980be22740c80d61a81100580e109f29e033709815c1480b80880dd153b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f0d6c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273000000010a0200280000004d00000028000000010a020028000000590000001600000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468204c0a0200120000005e0a02002200000072616e676520656e6420696e64657820900a0200100000005e0a020022000000736c69636520696e64657820737461727473206174202062757420656e64732061742000b00a020016000000c60a02000d0000000003000083042000910560005d13a0001217201f0c20601fef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fe20369eff6036fd01e136010a2137240de137ab0e61392f18e139301ce14af31ee14e4034a1521e61e153f06a61544f6fe1549dbc615500cf615665d1a15600da215700e0a158aee2215aece4e15bd0e8615c2000ee5cf0017f5d00700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b033b092a180120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c01090128010301370101030503010407020b021d013a01020201010303010407020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b0749021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300041c031d021e02400201070801020b09012d030101750222017603040209010603db0202013a010107010101010208060a0201301f3104300a040326090c02200402063801010203010105380802029803010d0107040106010302c6400001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b01012c03300102040202020124014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a5020004410500024f04460b31047b01360f290102020a033104020207013d03240501083e010c0234090101080402015f030204060102019d01030815023902010101010c0109010e07030543010206010102010103040301010e025508020301011701510102060101020101020102eb010204060201021b025508020101026a0101010208650101010204010500090102f5010a040401900402020401200a280602040801090602032e0d010200070106010152160207010201027a06030101020107010148020301010100020b023405050317010001060f000c030300053b0700013f0451010b020002002e021700050306080802071e0494030037043208010e011605010f000701110207010201056401a00700013d040004fe0200076d07006080f000000000000004000000040000000a0000000b0000000c00000070616e6963206f636375727265643a2001000000000000002f55736572732f616e647265696d2f6d756c746976657273782f72732f6d782d73646b2d72732f6672616d65776f726b2f7761736d2d616461707465722f7372632f70616e69632e7273756e61626c6520746f2077726974652070616e6963008c0e02004a0000002f0000001e0000006c6962726172792f7374642f7372632f70616e69636b696e672e72732f72757374632f303566393834366638393362303961316265316663383536306533336663336338313563666563622f6c6962726172792f616c6c6f632f7372632f737472696e672e727300180f02004b0000008d0500001b0000002f72757374632f303566393834366638393362303961316265316663383536306533336663336338313563666563622f6c6962726172792f616c6c6f632f7372632f7261775f7665632e7273740f02004c0000002a020000110000003a0000000100000000000000d00f020001000000d00f0200010000000d0000000c000000040000000e0000000f0000001000000070616e69636b6564206174203a0a63616e6e6f74206d6f64696679207468652070616e696320686f6f6b2066726f6d20612070616e69636b696e672074687265616400001210020034000000fc0e02001c0000008e000000090000000d0000000c000000040000001100000000000000080000000400000012004180a1080b0438ffffff", + "report": { + "imports": [ + "checkNoPayment", + "getNumArguments", + "mBufferAppendBytes", + "mBufferSetBytes", + "managedSignalError", + "managedWriteLog", + "signalError", + "smallIntGetUnsignedArgument" + ], + "isMemGrow": true, + "eiCheck": { + "eiVersion": "1.5", + "ok": true + }, + "codeReport": { + "path": "../output/panic-message-std.wasm", + "size": 15911, + "hasAllocator": false, + "hasPanic": "with message" + } + } +} diff --git a/test/features/panic-message-features/scenarios/error-message-after-log.txt b/test/features/panic-message-features/scenarios/error-message-after-log.txt new file mode 100644 index 000000000..bdf36bd89 --- /dev/null +++ b/test/features/panic-message-features/scenarios/error-message-after-log.txt @@ -0,0 +1,2 @@ +panic occurred: panicked at panic_features.rs:26:9: +panic after log \ No newline at end of file diff --git a/test/features/panic-message-features/scenarios/error-message.txt b/test/features/panic-message-features/scenarios/error-message.txt new file mode 100644 index 000000000..ee54e1c17 --- /dev/null +++ b/test/features/panic-message-features/scenarios/error-message.txt @@ -0,0 +1,2 @@ +panic occurred: panicked at panic_features.rs:19:9: +example panic message 123 \ No newline at end of file diff --git a/test/features/panic-message-features/scenarios/panic-after-log.scen.json b/test/features/panic-message-features/scenarios/panic-after-log.scen.json new file mode 100644 index 000000000..91e0efe2f --- /dev/null +++ b/test/features/panic-message-features/scenarios/panic-after-log.scen.json @@ -0,0 +1,67 @@ +{ + "name": "panic", + "gasSchedule": "v3", + "steps": [ + { + "step": "setState", + "accounts": { + "sc:panic_features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/panic-message-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:panic_features", + "function": "panicAfterLog", + "arguments": [], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0x04", + "message": "file:error-message-after-log.txt", + "logs": [ + { + "address": "address:an_account", + "endpoint": "str:internalVMErrors", + "topics": [ + "sc:panic_features", + "str:panicAfterLog" + ], + "data": "*" + } + ], + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:panic_features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/panic-message-features.mxsc.json" + }, + "address:an_account": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/panic-message-features/scenarios/panic-message-std.scen.json b/test/features/panic-message-features/scenarios/panic-message-std.scen.json new file mode 100644 index 000000000..1ffaffab6 --- /dev/null +++ b/test/features/panic-message-features/scenarios/panic-message-std.scen.json @@ -0,0 +1,40 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:panic_features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/panic-message-std.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:panic_features", + "function": "panicWithMessage", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0x04", + "message": "file:error-message.txt", + "logs": "*", + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/test/features/panic-message-features/scenarios/panic-message.scen.json b/test/features/panic-message-features/scenarios/panic-message.scen.json new file mode 100644 index 000000000..0c91408ef --- /dev/null +++ b/test/features/panic-message-features/scenarios/panic-message.scen.json @@ -0,0 +1,57 @@ +{ + "steps": [ + { + "step": "setState", + "accounts": { + "sc:panic_features": { + "nonce": "0", + "balance": "0", + "code": "mxsc:../output/panic-message-features.mxsc.json" + }, + "address:an_account": { + "nonce": "0", + "balance": "0" + } + } + }, + { + "step": "scCall", + "id": "1", + "tx": { + "from": "address:an_account", + "to": "sc:panic_features", + "function": "panicWithMessage", + "arguments": [ + "123" + ], + "gasLimit": "50,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "0x04", + "message": "file:error-message.txt", + "logs": "*", + "gas": "*", + "refund": "*" + } + }, + { + "step": "checkState", + "accounts": { + "sc:panic_features": { + "nonce": "0", + "balance": "0", + "storage": {}, + "code": "mxsc:../output/panic-message-features.mxsc.json" + }, + "address:an_account": { + "nonce": "1", + "balance": "0", + "storage": {}, + "code": "" + } + } + } + ] +} diff --git a/test/features/payable-features/output/payable-features-barnard.mxsc.json b/test/features/payable-features/output/payable-features-barnard.mxsc.json deleted file mode 100644 index 7bbe3a1cd..000000000 --- a/test/features/payable-features/output/payable-features-barnard.mxsc.json +++ /dev/null @@ -1,390 +0,0 @@ -{ - "buildInfo": { - "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", - "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" - }, - "contractCrate": { - "name": "payable-features", - "version": "0.0.0" - }, - "framework": { - "name": "multiversx-sc", - "version": "0.59.0" - } - }, - "abi": { - "docs": [ - "Contract that only tests the call value features,", - "i.e. the framework/Arwen functionality for accepting EGLD and ESDT payments." - ], - "name": "PayableFeatures", - "constructor": { - "inputs": [], - "outputs": [] - }, - "endpoints": [ - { - "name": "echo_call_value_legacy", - "mutability": "readonly", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "List" - } - ] - }, - { - "name": "echo_call_value", - "mutability": "readonly", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "payment_multiple", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "payable_all_transfers", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "List" - } - ] - }, - { - "name": "payment_array_esdt_3", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "EsdtTokenPayment" - }, - { - "type": "EsdtTokenPayment" - }, - { - "type": "EsdtTokenPayment" - } - ] - }, - { - "name": "payment_array_egld_esdt_3", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "EgldOrEsdtTokenPayment" - }, - { - "type": "EgldOrEsdtTokenPayment" - }, - { - "type": "EgldOrEsdtTokenPayment" - } - ] - }, - { - "name": "payable_any_1", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_any_2", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_any_3", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_any_4", - "mutability": "mutable", - "payableInTokens": [ - "*" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_egld_1", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_egld_2", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_egld_3", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_egld_4", - "mutability": "mutable", - "payableInTokens": [ - "EGLD" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_token_1", - "mutability": "mutable", - "payableInTokens": [ - "PAYABLE-FEATURES-TOKEN" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_token_2", - "mutability": "mutable", - "payableInTokens": [ - "PAYABLE-FEATURES-TOKEN" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "TokenIdentifier" - } - ] - }, - { - "name": "payable_token_3", - "mutability": "mutable", - "payableInTokens": [ - "PAYABLE-FEATURES-TOKEN" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "EgldOrEsdtTokenIdentifier" - } - ] - }, - { - "name": "payable_token_4", - "mutability": "mutable", - "payableInTokens": [ - "PAYABLE-FEATURES-TOKEN" - ], - "inputs": [], - "outputs": [ - { - "type": "BigUint" - }, - { - "type": "TokenIdentifier" - } - ] - } - ], - "esdtAttributes": [], - "hasCallback": false, - "types": { - "EgldOrEsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "EgldOrEsdtTokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - }, - "EsdtTokenPayment": { - "type": "struct", - "fields": [ - { - "name": "token_identifier", - "type": "TokenIdentifier" - }, - { - "name": "token_nonce", - "type": "u64" - }, - { - "name": "amount", - "type": "BigUint" - } - ] - } - } - }, - "code": "0061736d01000000013b0b60000060027f7f006000017f60017f017f60017f0060027f7f017f60037f7f7f017f60027f7e0060037f7f7f0060047f7f7f7f017f60027e7f0002b6031303656e760e626967496e74536574496e743634000703656e7609626967496e74416464000803656e76106d4275666665724765744c656e677468000303656e76126d427566666572417070656e644279746573000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e760b7369676e616c4572726f72000103656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e760f6d4275666665725365744279746573000603656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6765744e756d417267756d656e7473000203656e7614626967496e7446696e697368556e7369676e6564000403656e760d6d42756666657246696e697368000303656e760666696e697368000103656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000503656e760e636865636b4e6f5061796d656e74000003656e76136d42756666657247657442797465536c696365000903656e76096d42756666657245710005033534030203020101030501010402030102030201050402020302020000010601010a040400000000000000000000000000000000000005030100030616037f01418080080b7f00419582080b7f0041a082080b078c0317066d656d6f7279020004696e69740035166563686f5f63616c6c5f76616c75655f6c656761637900360f6563686f5f63616c6c5f76616c75650037107061796d656e745f6d756c7469706c650038147061796d656e745f61727261795f657364745f330039197061796d656e745f61727261795f65676c645f657364745f33003a0d70617961626c655f616e795f31003b0d70617961626c655f616e795f32003c0d70617961626c655f616e795f33003d0d70617961626c655f616e795f34003e0e70617961626c655f65676c645f31003f0e70617961626c655f65676c645f3200400e70617961626c655f65676c645f3400410f70617961626c655f746f6b656e5f3100420f70617961626c655f746f6b656e5f3200430f70617961626c655f746f6b656e5f3300440f70617961626c655f746f6b656e5f3400450863616c6c4261636b00461570617961626c655f616c6c5f7472616e736665727300370e70617961626c655f65676c645f33003f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020af31b341601017f1014220142001000200120012000100120010b1901017f419082084190820828020041016b220036020020000ba10202037f017e230041d0006b2201240010162102200120001002360214200141003602102001200036020c200141206a21030340200141186a2001410c6a10172001280218410147450440200141306a2003101820012001280238220041187420004180fe03714108747220004108764180fe0371200041187672723602402001200128023c220041187420004180fe03714108747220004108764180fe03712000411876727236024c20012001290330220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843702442002200141406b411010031a0c010b0b200141d0006a240020020b080041014100101a0b5501017f230041306b220224002002411f6a20011024200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a103042010542000b370300200241306a24000b3002017f017e200128020810192102200129030021032000200128020c101336020c20002003370300200020023602080b0f01017f100e22012000100f1a20010b1101017f101422022000200110071a20020b1301017f10142202200010041a20022001101c0b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410031a20012000100f1a200241106a24000b2001017f101e2201101f41014604402000200110200f0b4180800841221005000b910101037f230041206b22002400102321010240410410220d00415841fc8008410b10071a200020011002360208200041003602042000200136020003402000410f6a2000102420002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe0371200241187672721025450d000b41a2800841181005000b200041206a240020010b0900200010024104760b6301017f230041306b22022400200241286a42003703002002420037032020014100200241206a2201102f450440200241106a20011030200041086a200241186a29030037030020002002290310370300200241306a24000f0b41d98108411d1005000b100041081022450440415910060b41590b2b01027f2000419482082d0000220171200041ff01714622024504404194820820002001723a00000b20020b100041021022450440415a10090b415a0b6e01037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002102f1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0020002001101241004a0b6301027f230041106b22012400024002400240024010232202101f0e020102000b4180800841221005000b41fc8008410b101a210220001027101336020c20004200370300200020023602080c010b2001200210202000200110180b200141106a24000b100041011022450440415d10080b415d0b5d01027f230041106b22002400027f02400240024010212201101f0e020102000b41ba8008411d1005000b415d42001000415d0c010b2000200110202000280208102945044041d7800841251005000b200028020c0b200041106a24000b1300415841fc8008410b10071a4158200010250b1d01027f230041106b22002400200010262000280208200041106a24000b1d01027f230041106b2200240020001026200028020c200041106a24000b5301027f230041106b220024000240101e2201101f4101460440416741f68108411610071a200020011020200028020841671025450d01200041106a24000f0b41a48108411c1005000b41878108411d1005000b1200100a4504400f0b41c0810841191005000b1c002000100b200110294504402001100c1a0f0b418c82084104100d0b0f00200020014110200210114100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b4801017f230041106b2202240002402000102945044020002001101c0c010b2002418080802036020c20012002410c6a410410031a2001418c8208410410031a0b200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810031a200241106a24000b2801017f10162101200028020820011031200029030020011032200028020c2001101b2001100c1a0b6c01027f230041306b2201240010162102200120001002360214200141003602102001200036020c0340200141186a2001410c6a10172001280218410147450440200128022c2001280228200210312001290320200210322002101b0c010b0b2002100c1a200141306a24000b06001010102d0b1601027f102d10271013101e10152101100b200110340bfd0202047f017e230041d0006b22002400102d1021210110162102200020011002360214200041003602102000200136020c200041406b21030340200041386a2000410c6a10172000280238410147450440200041186a2003101820002000280220220141187420014180fe03714108747220014108764180fe03712001411876727236022820002000280224220141187420014180fe03714108747220014108764180fe03712001411876727236023420002000290318220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437022c2002200041286a411010031a0c010b0b101621012000200210023602302000410036022c200020023602280340200041386a200041286a10172000280238410147450440200028024c2000280248200110312000290340200110322001101b0c010b0b2001100c1a200041d0006a24000b0c01017f101e102d101510340bcd0202057f027e230041a0016b22002400102d0240101e2201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b4180800841221005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310332001103320021033200041a0016a24000bcd0202057f027e230041a0016b22002400102d024010212201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b41ba8008411d1005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310332001103320021033200041a0016a24000b1001027f102a2100102b102d2000102e0b2301027f230041106b22002400102b102d200010262000280208102e200041106a24000b2701027f230041106b22002400102a2101102d20001026200028020c2001102e200041106a24000b2601017f230041106b22002400102d20001026200028020c2000280208102e200041106a24000b1501017f10281a102a2100102d102810132000102e0b2601027f230041106b2200240010281a102b102d200010262000280208102e200041106a24000b2c01037f230041106b2200240010281a102d1028200010262000280208210210132002102e200041106a24000b1201027f102c102a2100102b102d2000102e0b2701027f230041106b22002400102c102b102d2000101d20002802081019102e200041106a24000b2b01027f230041106b22002400102c102a2101102d2000101d200028020c10132001102e200041106a24000b3001027f230041106b22002400102c102d2000101d200028020c10132000101d20002802081019102e200041106a24000b02000b0ba4020200418080080b9002696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e73666572696e636f7272656374206e756d626572206f66207472616e736665727366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e7445474c442d3030303030306261642063616c6c2076616c756520746f6b656e2070726f766964656473696e676c652045534454207061796d656e7420657870656374656477726f6e67206e756d626572206f6620617267756d656e74734d616e6167656456656320696e646578206f7574206f662072616e676550415941424c452d46454154555245532d544f4b454e45474c4400419082080b0438ffffff", - "report": { - "imports": [ - "bigIntAdd", - "bigIntFinishUnsigned", - "bigIntGetCallValue", - "bigIntSetInt64", - "checkNoPayment", - "finish", - "getNumArguments", - "mBufferAppend", - "mBufferAppendBytes", - "mBufferEq", - "mBufferFinish", - "mBufferFromBigIntUnsigned", - "mBufferGetByteSlice", - "mBufferGetLength", - "mBufferNew", - "mBufferSetBytes", - "managedGetAllTransfersCallValue", - "managedGetMultiESDTCallValue", - "signalError" - ], - "isMemGrow": false, - "eiCheck": { - "eiVersion": "1.5", - "ok": true - }, - "codeReport": { - "path": "../output/payable-features-barnard.wasm", - "size": 4865, - "hasAllocator": false, - "hasPanic": "None" - } - } -} diff --git a/test/features/payable-features/output/payable-features.mxsc.json b/test/features/payable-features/output/payable-features.mxsc.json index 2f860b2b5..47079053f 100644 --- a/test/features/payable-features/output/payable-features.mxsc.json +++ b/test/features/payable-features/output/payable-features.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "payable-features", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -352,14 +352,13 @@ } } }, - "code": "0061736d01000000013b0b60000060027f7f006000017f60017f017f60017f0060027f7f017f60037f7f7f017f60027f7e0060037f7f7f0060047f7f7f7f017f60027e7f0002a1031303656e760e626967496e74536574496e743634000703656e7609626967496e74416464000803656e76106d4275666665724765744c656e677468000303656e76126d427566666572417070656e644279746573000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e760b7369676e616c4572726f72000103656e760a626967496e745369676e000303656e760f6d4275666665725365744279746573000603656e760d6d427566666572417070656e64000503656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6765744e756d417267756d656e7473000203656e7614626967496e7446696e697368556e7369676e6564000403656e760d6d42756666657246696e697368000303656e760666696e697368000103656e760a6d4275666665724e6577000203656e760e636865636b4e6f5061796d656e74000003656e76136d42756666657247657442797465536c696365000903656e76096d42756666657245710005033534030203020101030501010402030102030202010504020302020000010601010a040400000000000000000000000000000000000005030100030616037f01418080080b7f0041a582080b7f0041b082080b078c0317066d656d6f7279020004696e69740035166563686f5f63616c6c5f76616c75655f6c656761637900360f6563686f5f63616c6c5f76616c75650037107061796d656e745f6d756c7469706c650038147061796d656e745f61727261795f657364745f330039197061796d656e745f61727261795f65676c645f657364745f33003a0d70617961626c655f616e795f31003b0d70617961626c655f616e795f32003c0d70617961626c655f616e795f33003d0d70617961626c655f616e795f34003e0e70617961626c655f65676c645f31003f0e70617961626c655f65676c645f3200400e70617961626c655f65676c645f3400410f70617961626c655f746f6b656e5f3100420f70617961626c655f746f6b656e5f3200430f70617961626c655f746f6b656e5f3300440f70617961626c655f746f6b656e5f3400450863616c6c4261636b00461570617961626c655f616c6c5f7472616e736665727300370e70617961626c655f65676c645f33003f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa21c341601017f1014220142001000200120012000100120010b1901017f41a0820841a0820828020041016b220036020020000ba10202037f017e230041d0006b2201240010162102200120001002360214200141003602102001200036020c200141206a21030340200141186a2001410c6a10172001280218410147450440200141306a2003101820012001280238220041187420004180fe03714108747220004108764180fe0371200041187672723602402001200128023c220041187420004180fe03714108747220004108764180fe03712000411876727236024c20012001290330220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843702442002200141406b411010031a0c010b0b200141d0006a240020020b080041014100101a0b5501017f230041306b220224002002411f6a20011025200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a103042010542000b370300200241306a24000b3002017f017e200128020810192102200129030021032000200128020c101336020c20002003370300200020023602080b0f01017f100f2201200010081a20010b1101017f101422022000200110071a20020b1301017f10142202200010041a20022001101c0b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410031a2001200010081a200241106a24000b2001017f101e2201101f41014604402000200110200f0b4180800841221005000b910101037f230041206b22002400102421010240410410220d00415841a28008410b10071a200020011002360208200041003602042000200136020003402000410f6a2000102520002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe0371200241187672721026450d000b41bd800841181005000b200041206a240020010b0900200010024104760b6301017f230041306b22022400200241286a42003703002002420037032020014100200241206a2201102f450440200241106a20011030200041086a200241186a29030037030020002002290310370300200241306a24000f0b41e98108411d1005000b4501017f0240410810220d001023100641004c04401024210041594101410010071a4159200010081a0c010b415841a28008410b10071a415941ad8008411010071a0b41590b2b01027f200041a482082d0000220171200041ff017146220245044041a4820820002001723a00000b20020b100041011022450440415d10090b415d0b100041021022450440415a100a0b415a0b6e01037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002102f1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0020002001101241004a0b6301027f230041106b22012400024002400240024010242202101f0e020102000b4180800841221005000b41a28008410b101a210220001023101336020c20004200370300200020023602080c010b2001200210202000200110180b200141106a24000b5701027f230041106b22002400027f02400240024010242201101f0e020102000b41d58008411d1005000b10230c010b2000200110202000280208102945044041f2800841251005000b200028020c0b200041106a24000b1300415841a28008410b10071a4158200010260b1d01027f230041106b22002400200010272000280208200041106a24000b1d01027f230041106b2200240020001027200028020c200041106a24000b5301027f230041106b220024000240101e2201101f4101460440416741868208411610071a200020011020200028020841671026450d01200041106a24000f0b41b48108411c1005000b41978108411d1005000b1200100b4504400f0b41d0810841191005000b1c002000100c200110294504402001100d1a0f0b419c82084104100e0b0f00200020014110200210114100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b4801017f230041106b2202240002402000102945044020002001101c0c010b2002418080802036020c20012002410c6a410410031a2001419c8208410410031a0b200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810031a200241106a24000b2801017f10162101200028020820011031200029030020011032200028020c2001101b2001100d1a0b6c01027f230041306b2201240010162102200120001002360214200141003602102001200036020c0340200141186a2001410c6a10172001280218410147450440200128022c2001280228200210312001290320200210322002101b0c010b0b2002100d1a200141306a24000b06001010102d0b1601027f102d10231013101e10152101100c200110340bfd0202047f017e230041d0006b22002400102d1021210110162102200020011002360214200041003602102000200136020c200041406b21030340200041386a2000410c6a10172000280238410147450440200041186a2003101820002000280220220141187420014180fe03714108747220014108764180fe03712001411876727236022820002000280224220141187420014180fe03714108747220014108764180fe03712001411876727236023420002000290318220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437022c2002200041286a411010031a0c010b0b101621012000200210023602302000410036022c200020023602280340200041386a200041286a10172000280238410147450440200028024c2000280248200110312000290340200110322001101b0c010b0b2001100d1a200041d0006a24000b0c01017f101e102d101510340bcd0202057f027e230041a0016b22002400102d0240101e2201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b4180800841221005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310332001103320021033200041a0016a24000bcd0202057f027e230041a0016b22002400102d024010212201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b41d58008411d1005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310332001103320021033200041a0016a24000b1001027f102a2100102b102d2000102e0b2301027f230041106b22002400102b102d200010272000280208102e200041106a24000b2701027f230041106b22002400102a2101102d20001027200028020c2001102e200041106a24000b2601017f230041106b22002400102d20001027200028020c2000280208102e200041106a24000b1501017f10281a102a2100102d102810132000102e0b2601027f230041106b2200240010281a102b102d200010272000280208102e200041106a24000b2c01037f230041106b2200240010281a102d1028200010272000280208210210132002102e200041106a24000b1201027f102c102a2100102b102d2000102e0b2701027f230041106b22002400102c102b102d2000101d20002802081019102e200041106a24000b2b01027f230041106b22002400102c102a2101102d2000101d200028020c10132001102e200041106a24000b3001027f230041106b22002400102c102d2000101d200028020c10132000101d20002802081019102e200041106a24000b02000b0bb4020200418080080ba002696e636f7272656374206e756d626572206f662045534454207472616e736665727345474c442d303030303030ffffffd80000000000000000ffffffdd756e65787065637465642045474c44207472616e73666572696e636f7272656374206e756d626572206f66207472616e736665727366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e746261642063616c6c2076616c756520746f6b656e2070726f766964656473696e676c652045534454207061796d656e7420657870656374656477726f6e67206e756d626572206f6620617267756d656e74734d616e6167656456656320696e646578206f7574206f662072616e676550415941424c452d46454154555245532d544f4b454e45474c440041a082080b0438ffffff", + "code": "0061736d01000000013b0b60000060027f7f006000017f60017f017f60017f0060027f7f017f60037f7f7f017f60027f7e0060037f7f7f0060047f7f7f7f017f60027e7f0002b6031303656e760e626967496e74536574496e743634000703656e7609626967496e74416464000803656e76106d4275666665724765744c656e677468000303656e76126d427566666572417070656e644279746573000603656e76196d42756666657246726f6d426967496e74556e7369676e6564000503656e760b7369676e616c4572726f72000103656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e760f6d4275666665725365744279746573000603656e7612626967496e7447657443616c6c56616c7565000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e760f6765744e756d417267756d656e7473000203656e7614626967496e7446696e697368556e7369676e6564000403656e760d6d42756666657246696e697368000303656e760666696e697368000103656e760a6d4275666665724e6577000203656e760d6d427566666572417070656e64000503656e760e636865636b4e6f5061796d656e74000003656e76136d42756666657247657442797465536c696365000903656e76096d42756666657245710005033534030203020101030501010402030102030201050402020302020000010601010a040400000000000000000000000000000000000005030100030616037f01418080080b7f0041a982080b7f0041b082080b078c0317066d656d6f7279020004696e69740035166563686f5f63616c6c5f76616c75655f6c656761637900360f6563686f5f63616c6c5f76616c75650037107061796d656e745f6d756c7469706c650038147061796d656e745f61727261795f657364745f330039197061796d656e745f61727261795f65676c645f657364745f33003a0d70617961626c655f616e795f31003b0d70617961626c655f616e795f32003c0d70617961626c655f616e795f33003d0d70617961626c655f616e795f34003e0e70617961626c655f65676c645f31003f0e70617961626c655f65676c645f3200400e70617961626c655f65676c645f3400410f70617961626c655f746f6b656e5f3100420f70617961626c655f746f6b656e5f3200430f70617961626c655f746f6b656e5f3300440f70617961626c655f746f6b656e5f3400450863616c6c4261636b00461570617961626c655f616c6c5f7472616e736665727300370e70617961626c655f65676c645f33003f0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020a871c341601017f1014220142001000200120012000100120010b1901017f41a4820841a4820828020041016b220036020020000ba10202037f017e230041d0006b2201240010162102200120001002360214200141003602102001200036020c200141206a21030340200141186a2001410c6a10172001280218410147450440200141306a2003101820012001280238220041187420004180fe03714108747220004108764180fe0371200041187672723602402001200128023c220041187420004180fe03714108747220004108764180fe03712000411876727236024c20012001290330220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe038320044238888484843702442002200141406b411010031a0c010b0b200141d0006a240020020b080041014100101a0b5501017f230041306b220224002002411f6a20011024200020022d001f047e200241106a200241286a29000037030020022002290020370308200041086a200241086a103042010542000b370300200241306a24000b3002017f017e200128020810192102200129030021032000200128020c101336020c20002003370300200020023602080b0f01017f100e22012000100f1a20010b1101017f101422022000200110071a20020b1301017f10142202200010041a20022001101c0b5101027f230041106b22022400200220001002220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410031a20012000100f1a200241106a24000b2001017f101e2201101f41014604402000200110200f0b4180800841221005000b910101037f230041206b22002400102321010240410410220d00415841fc8008410b10071a200020011002360208200041003602042000200136020003402000410f6a2000102420002d000f4101470d0141582000280010220241187420024180fe03714108747220024108764180fe0371200241187672721025450d000b41a2800841181005000b200041206a240020010b0900200010024104760b7701017f230041306b22022400200241286a42003703002002420037032002402001100241104f044020014100200241206a2201102f0d01200241106a20011030200041086a200241186a29030037030020002002290310370300200241306a24000f0b41ec8108411d1005000b41d9810841131005000b100041081022450440415910060b41590b2b01027f200041a882082d0000220171200041ff017146220245044041a8820820002001723a00000b20020b100041021022450440415a10090b415a0b6e01037f230041106b22022400200020012802042204200128020849047f200241086a2203420037030020024200370300200128020020042002102f1a2001200441106a36020420002002290300370001200041096a200329030037000041010541000b3a0000200241106a24000b0b0020002001101241004a0b6301027f230041106b22012400024002400240024010232202101f0e020102000b4180800841221005000b41fc8008410b101a210220001027101336020c20004200370300200020023602080c010b2001200210202000200110180b200141106a24000b100041011022450440415d10080b415d0b5d01027f230041106b22002400027f02400240024010212201101f0e020102000b41ba8008411d1005000b415d42001000415d0c010b2000200110202000280208102945044041d7800841251005000b200028020c0b200041106a24000b1300415841fc8008410b10071a4158200010250b1d01027f230041106b22002400200010262000280208200041106a24000b1d01027f230041106b2200240020001026200028020c200041106a24000b5301027f230041106b220024000240101e2201101f4101460440416741898208411610071a200020011020200028020841671025450d01200041106a24000f0b41a48108411c1005000b41878108411d1005000b1200100a4504400f0b41c0810841191005000b1c002000100b200110294504402001100c1a0f0b419f82084104100d0b0f00200020014110200210114100470bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b4801017f230041106b2202240002402000102945044020002001101c0c010b2002418080802036020c20012002410c6a410410031a2001419f8208410410031a0b200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810031a200241106a24000b6c01027f230041306b2201240010162102200120001002360214200141003602102001200036020c0340200141186a2001410c6a10172001280218410147450440200128022c2001280228200210312001290320200210322002101b0c010b0b2002100c1a200141306a24000b2801017f10162101200028020820011031200029030020011032200028020c2001101b2001100c1a0b06001010102d0b1601027f102d10271013101e10152101100b200110330bfd0202047f017e230041d0006b22002400102d1021210110162102200020011002360214200041003602102000200136020c200041406b21030340200041386a2000410c6a10172000280238410147450440200041186a2003101820002000280220220141187420014180fe03714108747220014108764180fe03712001411876727236022820002000280224220141187420014180fe03714108747220014108764180fe03712001411876727236023420002000290318220442388620044280fe0383422886842004428080fc0783421886200442808080f80f834208868484200442088842808080f80f832004421888428080fc07838420044228884280fe0383200442388884848437022c2002200041286a411010031a0c010b0b101621012000200210023602302000410036022c200020023602280340200041386a200041286a10172000280238410147450440200028024c2000280248200110312000290340200110322001101b0c010b0b2001100c1a200041d0006a24000b0c01017f101e102d101510330bcd0202057f027e230041a0016b22002400102d0240101e2201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b4180800841221005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310342001103420021034200041a0016a24000bcd0202057f027e230041a0016b22002400102d024010212201101f410346044020011002210220004100360274200020023602702000410036026c20002001360268200041fc006a21022000410c6a2104200041106a21010340200041086a200041e8006a101720002802084101470d0220004198016a200141086a29030022053703002000200129030022063703900120002000280274220341016a360274200441086a20053702002004200637020020004180016a200129020037030020004188016a200041186a28020036020020002000290208370378200041386a20034104746a220341086a200241086a290200370200200320022902003702000c000b000b41ba8008411d1005000b200041086a2203200041386a1018200041186a2201200041c8006a1018200041286a2202200041d8006a1018200310342001103420021034200041a0016a24000b1001027f102a2100102b102d2000102e0b2301027f230041106b22002400102b102d200010262000280208102e200041106a24000b2701027f230041106b22002400102a2101102d20001026200028020c2001102e200041106a24000b2601017f230041106b22002400102d20001026200028020c2000280208102e200041106a24000b1501017f10281a102a2100102d102810132000102e0b2601027f230041106b2200240010281a102b102d200010262000280208102e200041106a24000b2c01037f230041106b2200240010281a102d1028200010262000280208210210132002102e200041106a24000b1201027f102c102a2100102b102d2000102e0b2701027f230041106b22002400102c102b102d2000101d20002802081019102e200041106a24000b2b01027f230041106b22002400102c102a2101102d2000101d200028020c10132001102e200041106a24000b3001027f230041106b22002400102c102d2000101d200028020c10132000101d20002802081019102e200041106a24000b02000b0bb7020200418080080ba302696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e73666572696e636f7272656374206e756d626572206f66207472616e736665727366756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e7445474c442d3030303030306261642063616c6c2076616c756520746f6b656e2070726f766964656473696e676c652045534454207061796d656e7420657870656374656477726f6e67206e756d626572206f6620617267756d656e7473736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676550415941424c452d46454154555245532d544f4b454e45474c440041a482080b0438ffffff", "report": { "imports": [ "bigIntAdd", "bigIntFinishUnsigned", "bigIntGetCallValue", "bigIntSetInt64", - "bigIntSign", "checkNoPayment", "finish", "getNumArguments", @@ -372,17 +371,18 @@ "mBufferGetLength", "mBufferNew", "mBufferSetBytes", + "managedGetAllTransfersCallValue", "managedGetMultiESDTCallValue", "signalError" ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/payable-features.wasm", - "size": 4907, + "size": 4904, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/multisig/output/multisig-full.mxsc.json b/test/multisig/output/multisig-full.mxsc.json index 89be673b5..f78609f1f 100644 --- a/test/multisig/output/multisig-full.mxsc.json +++ b/test/multisig/output/multisig-full.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "multisig", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -1007,11 +1007,10 @@ } } }, - "code": "0061736d01000000017c1460027f7f0060000060017f017f60027f7f017f60017f006000017f60037f7f7f0060037f7f7f017f60047f7f7f7f0060027f7e0060047f7f7f7f017f60017e0060057f7f7f7f7f0060017f017e6000017e60057f7f7e7f7f017f60077f7e7f7f7f7f7f0060077e7f7f7f7f7f7f017f60027f7f017e60037f7e7f0002a1072503656e760e626967496e74536574496e743634000903656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760d6d427566666572417070656e64000303656e76106d4275666665724765744c656e677468000203656e760a6d4275666665724e6577000503656e76126d427566666572417070656e644279746573000703656e760f6d4275666665725365744279746573000703656e760d6d616e6167656443616c6c6572000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000303656e76126d616e616765645369676e616c4572726f72000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000d03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760f6765744e756d417267756d656e7473000503656e760d6d42756666657246696e697368000203656e7616736d616c6c496e7446696e697368556e7369676e6564000b03656e76186d616e616765644765744f726967696e616c547848617368000403656e76176d427566666572546f426967496e74556e7369676e6564000303656e760a626967496e745369676e000203656e76146d427566666572436f707942797465536c696365000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000103656e7614736d616c6c496e7446696e6973685369676e6564000b03656e760a6765744761734c656674000e03656e761b6d616e616765645472616e7366657256616c756545786563757465000f03656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001103656e760f636c65616e52657475726e44617461000103656e76136d616e616765644f776e657241646472657373000403656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0008039b01990102050002000000000000020006030303030205000003030308020000040505020a030208070707000002020207070404040104040205000c0307080602020202040009030308060300020603030202120003000306030009000900000000030202020000130005040502000505000205040602040206020c02010101010101010101010101010101010101010101010101010101010101060405030100030616037f01418080080b7f0041a58b080b7f0041b08b080b07e80422066d656d6f7279020004696e6974009e01076465706f736974009f01067369676e656400a001047369676e00a10106756e7369676e00a2010d64697363617264416374696f6e00a3010967657451756f72756d00a401126765744e756d426f6172644d656d6265727300a5010f6765744e756d50726f706f7365727300a60112676574416374696f6e4c617374496e64657800a7011570726f706f7365416464426f6172644d656d62657200a8011270726f706f736541646450726f706f73657200a9011170726f706f736552656d6f76655573657200aa011370726f706f73654368616e676551756f72756d00ab011670726f706f73655472616e736665724578656375746500ac011070726f706f73654173796e6343616c6c00ad011970726f706f736553434465706c6f7946726f6d536f7572636500ae011a70726f706f736553435570677261646546726f6d536f7572636500af010d71756f72756d5265616368656400b0010d706572666f726d416374696f6e00b1010b646e73526567697374657200b2011867657450656e64696e67416374696f6e46756c6c496e666f00b3010875736572526f6c6500b40112676574416c6c426f6172644d656d6265727300b5010f676574416c6c50726f706f7365727300b6010d676574416374696f6e4461746100b70110676574416374696f6e5369676e65727300b80114676574416374696f6e5369676e6572436f756e7400b90119676574416374696f6e56616c69645369676e6572436f756e7400ba010863616c6c4261636b00bb010775706772616465009e010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020acb5c99011601017f1026220142001000200120012000100120010b1901017f419c8b08419c8b0828020041016b220036020020000bfb0201027f230041206b22032400200128020010282102200028021420021029024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b41002002102a0c080b41012002102a2002200028020410031a0c070b41022002102a2002200028020410031a0c060b41032002102a2002200028020410031a0c050b41042002102a2000280204200210290c040b41052002102a200041046a2002102b0c030b41062002102a200041046a2002102b0c020b41072002102a20002802042002102c2002200028020810031a20002f01022002102d200028020c2002102e0c010b41082002102a2002200028020410031a20002802082002102c2002200028020c10031a20002f01022002102d20002802102002102e0b20002802182200102f2002102920032000100436021c20034100360218200320003602140340200341086a200341146a1030200328020841017104402002200328020c10031a0c010b0b20012002360200200341206a24000b0f01017f10052201200010031a20010b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410061a200241106a24000b2701017f230041106b22022400200220003a000f20012002410f6a410110061a200241106a24000b27002001200028020010031a20002802042001102c20002802082001103f200028020c2001102e0b0a002000103e2001103f0b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210061a200241106a24000b5801017f230041206b220224002000102f2001102920022000100436021c20024100360218200220003602140340200241086a200241146a103020022802084101710440200228020c2001103f0c010b0b200241206a24000b0900200010044102760b6301027f230041106b220224002002410b6a200110880120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b3c01037f200120021032210320012002103321042001200210342105200020012002103536020c2000200536020820002004360204200020033602000b0a00200041202001105e0b11002000200110341026220010131a20000b0e00200020002001105d2001105e0b2d01027f20002001105d21021037210303402002044020032000200110341038200241016b21020c010b0b20030b5801027f230041206b220124001037210220012000100436021c20014100360218200120003602140340200141086a200141146a1030200128020841017104402002200128020c102810380c010b0b200141206a240020020b080041014100103b0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b4101017f2001280204220220012802084b047f4100052001200241016a36020420012802002802002002103a210141010b210220002001360204200020023602000b0a0020002001106810590b1101017f102622022000200110071a20020b4201017f230041106b22022400200241003b010e20002002410e6a41022001103d20022f010e2100200241106a2400200041850c71410874200041800c71410876720b2e01017f2000280200200028020422042001200210450440200341e48108410f1060000b2000200220046a3602040b0f01017f10262201200010161a20010b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010031a200241106a24000b0900200020011002000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210071a200141106a24000b0c01017f10262200100820000bea0101037f230041106b2200240041021044450440415a10090b02400240027f024002400240415a10044104760e020102000b41d98008411d1002000b415d410110440d011a415d100a415d0c010b200041086a420037030020004200370300415a41002000411010450d0220002802002101200028020c2102415841908208410b10071a4158200141187420014180fe03714108747220014108764180fe0371200141187672721046450d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200041106a24000f0b41b4800841251002000b41f38108411d1002000b2b01027f200041a48b082d0000220171200041ff017146220245044041a48b0820002001723a00000b20020b0f00200020012003200210224100470b0b0020002001102341004a0b0d00200010262200100b1a20000b2e01017f41f680084117103b22042000200110061a2004418d8108410310061a20042002200310061a2004100c000b2f01017f2000280200220341a08b082802004e0440200120024190810841111048000b2000200341016a36020020030b2c01017f10372103037f200028020041a08b082802004e047f2003052003200020012002104b10380c010b0b0b0c00200020012002104910470b6401027f230041106b22022400027f200128020041a08b082802004e0440200241086a1037104d20022802082103200228020c0c010b200141b48708410d104b2103200141b48708410d104a0b21012000200336020020002001360204200241106a24000b100020001037360204200020013602000b0c00200041fd87084109104a0b7901027f230041106b2201240020001047220010042102200141003b010e0240200041002001410e6a4102104545044020024102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41868808410d41e48108410f1048000b41868808410d418d8008410e1048000b0c00200010262200100e20000b2401017e2000100d22034280808080105a044020012002418d8008410e1048000b2003a70b1f00200010472200100441204704402001200241e7820841101048000b20000b190041a08b0828020020004c04400f0b41a1810841121002000b1400100f20004604400f0b41b3810841191002000b1900200041a08b082802004c04400f0b4190810841111002000b0b0041a08b08100f3602000b4f01017f230041206b2201240020012000100436021c20014100360218200120003602140340200141086a200141146a103020012802084101710440200128020c10101a0c010b0b200141206a24000b090020001059ad10110b2401017e20002000107422014280808080105a04402000418d8008410e1060000b2001a70b1b01027f10262200101241cc8108410a103b2201200010031a20010b970101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011004220341214f0440418d8b08410e1002000b200141002002200310451a20002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081024000b5001017f230041106b220224002002410036020c20002002410c6a41042001103d200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001105f20032802084101710440200328020c2000200120046a360204200341106a24000f0b200241e48108410f1060000b1f0020012002200310052201101521022000200136020420002002453602000b2c01017f41c88208411b103b2203200010031a2003418d8108410310061a20032001200210061a2003100c000b110020001014220041004a20004100486b0b070020001004450b0d0020001026220010171a20000b0d002000416710171a416710040b1200416c4101410010071a2000416c10181a0b090020002001ad10670b3101017f230041106b2202240020022001200241086a108901200020022802002002280204103b10181a200241106a24000b1900200010282200419b8208410510061a20012000102920000b0b002000200110681064450b880401057f230041206b22042400024002402003450d00200210592003490d00024020012003106822031064450440410021020c010b2004200310632201100436020c410021022004410036020820042001360204200441003a0010200441046a200441106a41012003103d024002400240024002400240024002400240024020042d00100e09090102030405060708000b200341808008410d1060000b200441046a200310322105410121020c070b41022102200441046a2003103221050c060b41032102200441046a2003103221050c050b41042102200441046a2003105d21050c040b200441106a200441046a20031031200428021c2106200428021821012004280214210720042802102105410521020c030b200441106a200441046a20031031200428021c2106200428021821012004280214210720042802102105410621020c020b200441046a2201200310332105200120031032210720012003103c41ffff037121084107210220012003103521010c010b200441046a22062003103221052006200310332107200441046a20031032210120062003103c41ffff037121084108210220062003103521060b200428020c2004280208470d020b200020063602102000200136020c2000200736020820002005360204200020083b0102200020023b0100200441206a24000f0b41fb8a0841121002000b2003418d8008410e1060000b0d0020002001106c2002ad10670b1a0020001028220041a08208410e10061a2000200110031a20000b0b002000106e2001ad10670b130020001028220041ae8208410610061a20000b0d00200020011070200210181a0b190020001028220041b48208410e10061a20012000102920000b0a0020002001106c10590b08002000106e10590b4201017e2000106445044041000f0b02402000200010742201428002540440200142035a0d012001a70f0b2000418d8008410e1060000b200041808008410d1060000ba30102017e027f230041106b22032400200342003703082000106322041004220041094f04402001418d8008410e1060000b20044100200320006b41106a200010451a20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b0a0020002001107610650b190020001028220041c28208410610061a20012000102920000b4101037f200028020822032001107845044020002802042202105921042000280200200441016a220010682001ad1067200220001066200320012002105910790b0b0b0020002001107a4100470b0d002000200110762002ad10670b0a0020002001107610590b1301017f103722022001ad107c2000200210380b2f01017f230041106b2202240020022001200241086a10890120002002280200200228020410071a200241106a24000b0d0010371a20002001102810380b1201017f103722022001107c2000200210380b12002001103710282201102d2000200110380b5001017f230041206b2202240020022001100436021c20024100360218200220013602140340200241086a200241146a1030200228020841017104402000200228020c107d0c010b0b200241206a24000b0d0010371a20002001103e10380b1701017f103722022001ad42ff0183107c2000200210380b1201017f1037220220002001103b103820020b1f01017f20001063220110044120470440200041e7820841101060000b20010b5501047f230041106b2201240020001086012102200141086a2000280200200028020422032002105f200128020841017145044041e48108410f108701000b200128020c2000200220036a360204200141106a24000b6f01027f230041106b220124002001410036020c2000280200200028020422022001410c6a41041045044041e48108410f108701000b2000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f419b80084119103b22022000200110061a2002100c000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410451a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b0a00418a83084104103b0b2901027f418e8308410b103b22011028220241e38208410410061a20002002360204200020013602000b0a0041998308410d103b0b1200200041a683084109103b2200102920000b3c01027f200141af83084111103b2201102920011028210220011028220341e38208410410061a2000200336020420002001360200200020023602080b0a0041c083084111103b0b0a0041d183084106103b0b4001037f2001280200102821022001280204102521032001280208102821042000200128020c103636020c2000200436020820002003360204200020023602000b6e01027f230041206b22012400200141086a22022000108f01103721002001200128020c105936021c200141013602182001200236021403402001200141146a103920012802004101710440200128020421022000108b012002107010840110380c010b0b200141206a240020000b2301027f230041106b22002400200041086a108c01200028020c1059200041106a24000b2201017f104221012000108b01200110712201108e0110733a0004200020013602000b18002002450440200041013a00000b2001108e01420210670b6f01027f230041206b22012400200141086a22022000108f012001200128020c105936021c20014101360218200120023602144100210003402001200141146a10392001280200410171044020002001280204108e01107341ff01714102466a21000c010b0b200141206a240020000bc40101027f230041306b22012400200141106a108c012001280210200010681065200141186a22022000108f012001200128021c105936022c20014101360228200120023602240340200141086a200141246a1039200128020841017104402001280220200128020c10750c010b0b200128021c10592100200141003a002c200120003602282001410136022403402001200141246a108a012001280200410171044020012802182001280204106810650c010b0b200128021c42001067200141306a24000b1301017f10910110592101200010970120014f0be10101027f108b01220420011071210302400240200241ff0171044020030d0120042004107241016a2203106d200420012003106b200420032001106f0c010b2003450d010b2003108e0122031073210420032002ad42ff0183106741e78308411110830122032000107b20032001107d2003200441ff01712200108201200320021082012003103710192000410247417f410020004102461b200241ff017122014102461b2202044010900122032003105920026a10660b2000410147417f410020004101461b20014101461b2200450d00108d0122012001105920006a10660b0bcc0301077f230041206b22032400200341086a10950120032d000c220541016b41ff01714102490440200328020821062003108c01200328020020032802042207105941016a220410682102024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b2002420010670c080b410110372201102a2001200028020410031a2002200110181a0c070b410210372201102a2001200028020410031a2002200110181a0c060b410310372201102a2001200028020410031a2002200110181a0c050b410410372201102a2000280204200110292002200110181a0c040b410510372201102a200041046a2001102b2002200110181a0c030b410610372201102a200041046a2001102b2002200110181a0c020b410710372201102a20002802042001102c2001200028020810031a20002f01022001102d200028020c2001102e2002200110181a0c010b410810372201102a2001200028020410031a20002802082001102c2001200028020c10031a20002f01022001102d20002802102001102e2002200110181a0b20072004ad106720054102460440200341146a22002004108f012000200610770b200341206a240020040f0b41a38808412c1040000b3b00024020021061c041004a0d0020031062450d0041cf8808411d1040000b2000200436020c2000200336020820002002360204200020013602000b930101037f230041206b2201240010372103108b0110722102200141003a001c2001200236021820014101360214200041ff0171210003400240200141086a200141146a108a012001280208410171450d00200128020c2202108e01107341ff01712000470d01108b012002107022021064450d012002108401210210371a20032002102810380c010b0b200141206a240020030bd10301077f230041206b22002400101a105641011055410041d183084106105121052000410136020c2000410c6a2103103721010340200328020041a08b0828020048044020012003419f85084105104b10380c010b0b200028020c105310372102200020011004360214200041003602102000200136020c02400240024002400340024020002000410c6a10302000280200410171450d00200028020410281028220110044120470d022002200110380c010b0b200041003a000b2002102f2106108b01210120021004210420011072210320002004360214200041003602102000200236020c034002402000411b6a2000410c6a10880120002d001b4101470d002001200028001c220241187420024180fe03714108747220024108764180fe03712002411876727222021071220404402000410b6a200441001096010520012002200341016a2203106b200120032002106f2000410b6a200341011096010b0c010b0b20012003106d20002d000b4101460d0110900122012001105920066a2201106620014100108d0110596b460d0220012005490d0310910120051066200041206a24000f0b41e782084110108701000b4189850841161040000b41cb8908413e1040000b41808608411f1040000b0600410010540b5701037f230041106b22002400101a410210544100418a8308410410522101410141808508410910512102108b01200110712201047e200041046a2002108f01200028020c20011078ad0542000b101b200041106a24000b8d0101047f230041206b22002400101a41011054410041808508410910512101200041086a108c010240200028020820011069450440200010950120002d00044102470d0120002802002102200041146a22032001108f01200028021c2002107845044020032001108f012003200210770b200041206a24000f0b41a48a0841151040000b41898a08411b1040000b8c0201087f230041206b22002400101a41011054410041808508410910512101200041086a108c010240024002400240200028020820011069450440200010950120002d00044102470d0120002802002104200041146a2001108f01200028021c22052004107a2202450d03200220002802182203105922014b0d0420012002460d02200310592001490d04200028021422072001103a2106200310592002490d042007200210682006ad10670c020b41a48a0841151040000b41b98a08411e1040000b2003105920014904400c020b20002802142001106810652003200141016b10662001200247044020052006200210790b2005200410750b200041206a24000f0b41fb8a0841121002000b6201027f230041106b22002400101a41011054410041808508410910512101200041086a109501024020002d000c41016b41ff0171410249044020011097010d012001109801200041106a24000f0b41ec880841341040000b41a08908412b1040000b0d00101a4100105410910110580b0d00101a4100105410900110580b0d00101a41001054108d0110580b0e00101a41001054109401ad10110b0d004101411441e9870810bc010b0d004102411041cf870810bc010b0d004103410c41c3870810bc010b3f01027f230041206b22002400101a41011054410041df8708410a10512101200041043b010c200020013602102000410c6a109b01ad1011200041206a24000b0700410510bd010b0700410610bd010b7801067f230041206b22002400101a1056410310554100105021014101419388084106105221024102104f21032000410336020c2000410c6a2204104e2105200028020c1053200020023602142000200136021020002005360218200020033b010e200041073b010c2004109b01ad1011200041206a24000b8b0101077f230041206b22002400101a105641041055410041998808410a105221014101105021024102419388084106105221034103104f21042000410436020c2000410c6a2205104e2106200028020c10532000200336021820002002360214200020013602102000200636021c200020043b010e200041083b010c2005109b01ad1011200041206a24000b1800101a4101105441004180850841091051109901ad101b0bf60a02087f017e230041f0006b22002400101a41011054410041808508410910512102200041186a1095010240024002400240024020002d001c41016b41ff017141024904402002109901450d01200041106a108c01200041246a200028021020002802142002106a02400240024002400240024002400240024020002f0124220141016b0e080001020304050607080b20002000280228102836023c0c070b20002000280228102836023c0c060b20002000280228102836023c0c050b2000200028022836023c0c040b2000413c6a200041286a1092010c030b2000413c6a200041286a1092010c020b200028022810252103200028022c1028210420002f01262105200028023010362106200020043602402000200336023c20002006360244200020053b013a0c010b200028022810282103200028022c1025210420002802301028210520002f0126210620002802341036210720002005360244200020043602402000200336023c20002007360248200020063b013a0b200020013b013820021093012104200041d8006a200041406b2203290200370300200041e0006a200041c8006a28020036020020002002360264200020043602682000200029023837035041f88308411210830120001037360238200041d0006a200041386a1027200028023810192002109801024002400240024002400240024002400240200141016b0e080004050601020703080b200220002802284102109a010c070b2000280234210420002802302105200028022c210320002802282106101c220842e0a712580d09419d8408411610830122012002107b20012006107d200120031081012001200842e0a7127d2208107e20012005107d2001200410800120011037101920002005104d2000280200220210620440420021082003106141ff0171450d0b0b20062003200820022004101d1a0c060b2003200041306a29020037030020002000290228370338101c210820002802382106200028023c2104200328020021032000280244210541d78308411010830122012002107b20012006107d2001200410810120012008107e20012003107d20012005108001200110371019200041086a2003104d20002802082102103721012000200536026820002002360264200020043602602000200136025c2000411b360258200041da85083602542000200041386a360250105a10372102200041d0006a220041046a22012802002104200128020422052002102920022004200510061a20012802082002102e200210181a20002802102000411c6a200028020020002802142000280218105c000b2000280234210320002f0126210420002802302105200028022c210620002802282107101c210841ca8408411810830122012002107b20012007107d2001200610810120012005107d20012004107f20012008107e2001200310800120011037101910371a200410412007200820062005416720034167101e0c040b200220002802284101109a01109101105910900110594d0d030c090b200220002802284100109a01109001105922024100108d0110596b460d07109101105920024d0d020c080b2000280228220110900110594b0d0710910120011066418a8408411310830122032002107b20032001107b2003103710190c010b2000280230210320002f01262104200028022c210520002802282106101c210841b38408411710830122012002107b2001200610810120012005107d20012004107f20012008107e2001200310800120011037101910371a2004104120082006200541672003102622021026101f1a10202002102810101a0b200041f0006a24000f0b41e5860841341040000b41998708411b1040000b41cc860841191040000b41d68108410e1002000b419f8608412d1040000b41808608411f1040000bb40101057f230041206b2201240010431a10262200102120001042104645044041d78a0841241002000b41021054410041f78208410b1052210041011047210220012000360200104310252103418283084108103b2104103722002002107d200141146a220220003602082002200436020420022001360200200120033602082001200129021837020c20012001280214360204200141046a2200280204200041106a20002802002000280208200028020c105c000ba30201067f230041e0006b22002400101a41001054103721021094012101200041186a108c01200028021c210320002802182104200041003a0028200020013602242000410136022003400240200041106a200041206a108a012000280210410171450d002000412c6a2004200320002802142201106a20002f012c450d0120011093012105200041c8006a200041346a290200370300200041d0006a2000413c6a28020036020020002001360254200020053602582000200029022c3703402000103736025c200041406b200041dc006a10272002200028025c10380c010b0b20002002100436024820004100360244200020023602400340200041086a200041406b103020002802084101710440200028020c10101a0c010b0b200041e0006a24000b3301017f101a410110544100418a8308410410522100108b01200010712200047e2000108e01107341ff0171ad0542000b10110b0f00101a410010544102109d0110570b0f00101a410010544101109d0110570bf80201027f230041206b22012400101a410110544100418085084109105121002001108c012001410c6a200128020020012802042000106a024002400240024002400240024002400240024020012f010c41016b0e080102030405060708000b420010110c080b410110372200102a2000200128021010031a200010101a0c070b410210372200102a2000200128021010031a200010101a0c060b410310372200102a2000200128021010031a200010101a0c050b410410372200102a200128021020001029200010101a0c040b410510372200102a200141106a2000102b200010101a0c030b410610372200102a200141106a2000102b200010101a0c020b410710372200102a20012802102000102c2000200128021410031a20012f010e2000102d20012802182000102e200010101a0c010b410810372200102a2000200128021010031a20012802142000102c2000200128021810031a20012f010e2000102d200128021c2000102e200010101a0b200141206a24000b6f01037f230041206b22002400101a410110544100418085084109105110930121011037210220002001100436021c20004100360218200020013602140340200041086a200041146a1030200028020841017104402002200028020c10031a0c010b0b200210101a200041206a24000b3601017f230041106b22002400101a41011054200041046a41004180850841091051108f0120002802081059ad1011200041106a24000b1800101a4101105441004180850841091051109701ad10110ba60502087f017e230041e0006b220124000240105a22031063220010620d0020012000102822001004360234200141003602302001200036022c2001412c6a22001085012102200010860121001037210503402000044020052001412c6a1085011038200041016b21000c010b0b02402001280234200128023046044020031065200141086a2002105b2001280228450d022001412c6a22002002105b200128024c450d0220002002105b200128024c2202450d0202402002411b470d0041002103411b210441da850821020240034020002d0000220620022d00002207460440200041016a2100200241016a2102200441016b22040d010c020b0b200620076b21030b20030d0010564100105520014100360250200141d4006a2102230041106b220024000240200141d0006a220341f58508410b1049100d2208428080808010540440027f2008a7220441ebde0147410020041b45044041002104200341f58508410b104a21032000410c6a0c010b027f200328020041a08b082802004e044010370c010b200341f58508410b104b0b21032000200436020c41012104200041086a0b2003360200200220043602002002200028020c36020420022000280208360208200041106a24000c010b41f58508410b418d8008410e1048000b20012802501053200128025c2103200128025821022001280254200510041056044041a1810841121002000b410171044041e28408410e1083012100103722052002ad107c20002005103820002003107d0c030b41f084084110108301210020012002100436025c200141003602582001200236025403402001200141d4006a10302001280200410171450d032001280204210210371a20002002102810380c000b000b41a4850841361002000b418d8008410e108701000b2000103710190b200141e0006a24000b3d01027f230041206b22032400101a4101105441002002200110522104200320003b010c200320043602102003410c6a109b01ad1011200341206a24000b7401067f230041206b22012400101a105641021055410041c187084102105221024101105021032001410236020c20012001410c6a2204104c2001280204210520012802002106200128020c1053200141106a2002200320062005109c01200120003b010c2004109b01ad1011200141206a24000b0baf0b0200418080080b9b0b696e76616c69642076616c7565696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245656d707479207472616e73666572696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f616464726573732e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468646e735f61646472657373726567697374657275736572616374696f6e5f646174616e756d5f70726f706f73657273757365725f726f6c65616374696f6e5f7369676e65725f6964736e756d5f626f6172645f6d656d6265727371756f72756d706572666f726d4173796e6343616c6c706572666f726d4368616e6765557365727374617274506572666f726d416374696f6e706572666f726d4368616e676551756f72756d706572666f726d5472616e7366657245786563757465706572666f726d4465706c6f7946726f6d536f75726365706572666f726d5570677261646546726f6d536f757263656173796e6343616c6c4572726f726173796e6343616c6c53756363657373616374696f6e5f69646475706c696361746520626f617264206d656d626572626f6172646e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374706572666f726d5f6173796e635f63616c6c5f63616c6c6261636b63616c6c5f726573756c7471756f72756d2063616e6e6f742065786365656420626f6172642073697a6563616e6e6f742072656d6f766520616c6c20626f617264206d656d6265727320616e642070726f706f73657273696e73756666696369656e742067617320666f722063616c6c6f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e20706572666f726d20616374696f6e7371756f72756d20686173206e6f74206265656e207265616368656466756e6374696f6e5f63616c6c746f757365725f6164647265737370726f706f7365725f616464726573736e65775f71756f72756d626f6172645f6d656d6265725f61646472657373617267756d656e7473636f64655f6d65746164617461736f7572636573635f616464726573736f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e2070726f706f736570726f706f73656420616374696f6e20686173206e6f206566666563746f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e206469736361726420616374696f6e7363616e6e6f74206469736361726420616374696f6e20776974682076616c6964207369676e617475726573626f6172642063616e6e6f7420626520656d707479206f6e20696e69742c206e6f2d6f6e6520776f756c642062652061626c6520746f2070726f706f73656f6e6c7920626f617264206d656d626572732063616e207369676e616374696f6e20646f6573206e6f742065786973746f6e6c7920626f617264206d656d626572732063616e20756e2d7369676e456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676570616e6963206f6363757272656400419c8b080b0438ffffff", + "code": "0061736d0100000001761360027f7f0060000060017f017f60027f7f017f60017f006000017f60037f7f7f0060037f7f7f017f60047f7f7f7f0060027f7e0060047f7f7f7f017f60017f017e60017e0060057f7f7f7f7f006000017e60057f7f7e7f7f017f60077f7e7f7f7f7f7f0060077e7f7f7f7f7f7f017f60027f7f017e02cd072603656e760e626967496e74536574496e743634000903656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760d6d427566666572417070656e64000303656e76106d4275666665724765744c656e677468000203656e760a6d4275666665724e6577000503656e76126d427566666572417070656e644279746573000703656e76196d427566666572546f536d616c6c496e74556e7369676e6564000b03656e760f6d4275666665725365744279746573000703656e760d6d616e6167656443616c6c6572000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000303656e76126d616e616765645369676e616c4572726f72000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760f6765744e756d417267756d656e7473000503656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e760d6d42756666657246696e697368000203656e76186d616e616765644765744f726967696e616c547848617368000403656e76176d427566666572546f426967496e74556e7369676e6564000303656e760a626967496e745369676e000203656e76146d427566666572436f707942797465536c696365000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000903656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000103656e7614736d616c6c496e7446696e6973685369676e6564000c03656e760a6765744761734c656674000e03656e761b6d616e616765645472616e7366657256616c756545786563757465000f03656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001103656e760f636c65616e52657475726e44617461000103656e76136d616e616765644f776e657241646472657373000403656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000303656e76106d616e616765644173796e6343616c6c0008039a0198010205000200000000000002000603030303020500000303030812020602000004050508030208020707070000020702070404040104020405000d030708020a020204000903030806030002060303020200030003060309090000000000000302020200000005040502000505000205040602040206020d02010101010101010101010101010101010101010101010101010101010101060405030100030616037f01418080080b7f0041c58b080b7f0041d08b080b07e80422066d656d6f7279020004696e6974009e01076465706f736974009f01067369676e656400a001047369676e00a10106756e7369676e00a2010d64697363617264416374696f6e00a3010967657451756f72756d00a401126765744e756d426f6172644d656d6265727300a5010f6765744e756d50726f706f7365727300a60112676574416374696f6e4c617374496e64657800a7011570726f706f7365416464426f6172644d656d62657200a8011270726f706f736541646450726f706f73657200a9011170726f706f736552656d6f76655573657200aa011370726f706f73654368616e676551756f72756d00ab011670726f706f73655472616e736665724578656375746500ac011070726f706f73654173796e6343616c6c00ad011970726f706f736553434465706c6f7946726f6d536f7572636500ae011a70726f706f736553435570677261646546726f6d536f7572636500af010d71756f72756d5265616368656400b0010d706572666f726d416374696f6e00b1010b646e73526567697374657200b2011867657450656e64696e67416374696f6e46756c6c496e666f00b3010875736572526f6c6500b40112676574416c6c426f6172644d656d6265727300b5010f676574416c6c50726f706f7365727300b6010d676574416374696f6e4461746100b70110676574416374696f6e5369676e65727300b80114676574416374696f6e5369676e6572436f756e7400b90119676574416374696f6e56616c69645369676e6572436f756e7400ba010863616c6c4261636b00bb010775706772616465009e010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ac25b98011601017f1027220142001000200120012000100120010b1901017f41bc8b0841bc8b0828020041016b220036020020000bfb0201027f230041206b2203240020012802001029210220002802142002102a024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b41002002102b0c080b41012002102b2002200028020410031a0c070b41022002102b2002200028020410031a0c060b41032002102b2002200028020410031a0c050b41042002102b20002802042002102a0c040b41052002102b200041046a2002102c0c030b41062002102b200041046a2002102c0c020b41072002102b20002802042002102d2002200028020810031a20002f01022002102e200028020c2002102f0c010b41082002102b2002200028020410031a20002802082002102d2002200028020c10031a20002f01022002102e20002802102002102f0b2000280218220010302002102a20032000100436021c20034100360218200320003602140340200341086a200341146a1031200328020841017104402002200328020c10031a0c010b0b20012002360200200341206a24000b0f01017f10052201200010031a20010b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410061a200241106a24000b2701017f230041106b22022400200220003a000f20012002410f6a410110061a200241106a24000b27002001200028020010031a20002802042001102d200028020820011043200028020c2001102f0b0a0020001042200110430b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210061a200241106a24000b5801017f230041206b22022400200010302001102a20022000100436021c20024100360218200220003602140340200241086a200241146a103120022802084101710440200228020c200110430c010b0b200241206a24000b0900200010044102760b6301027f230041106b220224002002410b6a200110890120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b3c01037f200120021033210320012002103421042001200210352105200020012002103636020c2000200536020820002004360204200020033602000b0a0020004120200110610b11002000200110351027220010131a20000b0e002000200020011060200110610b2d01027f20002001106021021038210303402002044020032000200110351039200241016b21020c010b0b20030b5801027f230041206b220124001038210220012000100436021c20014100360218200120003602140340200141086a200141146a1031200128020841017104402002200128020c102910390c010b0b200141206a240020020b080041014100103c0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b4101017f2001280204220220012802084b047f4100052001200241016a36020420012802002802002002103b210141010b210220002001360204200020023602000b0a0020002001106a105b0b1101017f102722022000200110081a20020b4201017f230041106b22022400200241003b010e20002002410e6a41022001103e20022f010e2100200241106a2400200041850c71410874200041800c71410876720b3901017f2000280208200028020422046b2002490440200341f28108410f1041000b200028020020042001200210482000200220046a3602040b1f00200010402200100441094f0440200141e48108410e1041000b200010070b0d0020001027220010171a20000b2c01017f41e98208411b103c2203200010031a2003418d8108410310061a20032001200210061a2003100c000b0f01017f10272201200010161a20010b5101027f230041106b22022400200220001004220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010031a200241106a24000b0900200020011002000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210081a200141106a24000b0c01017f10272200100920000bfe0101037f230041106b2201240041c48b082d0000220041087145044041c48b0820004108723a00004159100a0b02400240027f024002400240415910044104760e020102000b41d98008411d1002000b415d42001000415d0c010b200141086a42003703002001420037030041591004410f4d0d024159410020014110104820012802002100200128020c2102415841b18208410b10081a4158200041187420004180fe03714108747220004108764180fe0371200041187672721049450d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200141106a24000f0b41b4800841251002000b41948208411d1002000b1a00200020012002200310644504400f0b4181820841131002000b0b0020002001102441004a0b0d00200010272200100b1a20000b2e01017f41f680084117103c22042000200110061a2004418d8108410310061a20042002200310061a2004100c000b0c002000419e88084109104d0b2c01017f10382103037f200028020041c08b082802004e047f2003052003200020012002104e10390c010b0b0b0c00200020012002104f104a0b2f01017f2000280200220341c08b082802004e044020012002419081084111104b000b2000200341016a36020020030b6401027f230041106b22022400027f200128020041c08b082802004e0440200241086a1038105120022802082103200228020c0c010b200141d58708410d104e2103200141d58708410d104d0b21012000200336020020002001360204200241106a24000b100020001038360204200020013602000b0c00200010272200100e20000b1f002000104a22001004412047044020012002418883084110104b000b20000b7d01027f230041106b220124002000104a220210042100200141003b010e0240200041014b0440200241002001410e6a4102104820004102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41a78808410d41f28108410f104b000b41a78808410d418d8008410e104b000b2401017e2000100d22034280808080105a044020012002418d8008410e104b000b2003a70b190041c08b0828020020004c04400f0b41a1810841121002000b1400100f20004604400f0b41b3810841191002000b1900200041c08b082802004c04400f0b4190810841111002000b0b0041c08b08100f3602000b09002000105bad10100b2401017e20002000103f22014280808080105a04402000418d8008410e1041000b2001a70b4f01017f230041206b2201240020012000100436021c20014100360218200120003602140340200141086a200141146a103120012802084101710440200128020c10111a0c010b0b200141206a24000b1b01027f10272200101241cc8108410a103c2201200010031a20010b960101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011004220341214f044041ae8b08410e1002000b2001410020022003104820002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081025000b5001017f230041106b220224002002410036020c20002002410c6a41042001103e200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001106220032802084101710440200328020c2000200120046a360204200341106a24000f0b200241f28108410f1041000b3701037f200110042205200249200220036a20054b724504402001200220031005220610154521040b20002006360204200020043602000b110020001014220041004a20004100486b0b0f00200020012003200210234100470b070020001004450b0d002000416710171a416710040b1200416c4101410010081a2000416c10181a0b090020002001ad10690b0f004167200110192000416710181a0b190020001029220041bc8208410510061a20012000102a20000b0b0020002001106a1066450b880401057f230041206b22042400024002402003450d002002105b2003490d00024020012003106a22031066450440410021020c010b2004200310402201100436020c410021022004410036020820042001360204200441003a0010200441046a200441106a41012003103e024002400240024002400240024002400240024020042d00100e09090102030405060708000b200341808008410d1041000b200441046a200310332105410121020c070b41022102200441046a2003103321050c060b41032102200441046a2003103321050c050b41042102200441046a2003106021050c040b200441106a200441046a20031032200428021c2106200428021821012004280214210720042802102105410521020c030b200441106a200441046a20031032200428021c2106200428021821012004280214210720042802102105410621020c020b200441046a2201200310342105200120031033210720012003103d41ffff037121084107210220012003103621010c010b200441046a22062003103321052006200310342107200441046a20031033210120062003103d41ffff037121084108210220062003103621060b200428020c2004280208470d020b200020063602102000200136020c2000200736020820002005360204200020083b0102200020023b0100200441206a24000f0b419c8b0841121002000b2003418d8008410e1041000b0d0020002001106e2002ad10690b1a0020001029220041c18208410e10061a2000200110031a20000b0b00200010702001ad10690b130020001029220041cf8208410610061a20000b0d00200020011072200210181a0b190020001029220041d58208410e10061a20012000102a20000b0a0020002001106e105b0b080020001070105b0b4201017e2000106645044041000f0b024020002000103f2201428002540440200142035a0d012001a70f0b2000418d8008410e1041000b200041808008410d1041000b0a0020002001107710670b190020001029220041e38208410610061a20012000102a20000b4101037f200028020822032001107945044020002802042202105b21042000280200200441016a2200106a2001ad1069200220001068200320012002105b107a0b0b0b0020002001107b4100470b0d002000200110772002ad10690b0a00200020011077105b0b1201017f103822022001107d2000200210390bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10081a200341106a24000b0d0010381a20002001104210390b5101017f230041206b2202240020022001100436021c20024100360218200220013602140340200241086a200241146a1031200228020841017104402000200228020c1080010c010b0b200241206a24000b0d0010381a20002001102910390b1701017f103822022001ad42ff0183107d2000200210390b12002001103810292201102e2000200110390b1301017f103822022001ad107d2000200210390b1201017f1038220220002001103c103920020b1f01017f2000104022011004412047044020004188830841101041000b20010b5501047f230041106b2201240020001087012102200141086a20002802002000280204220320021062200128020841017145044041f28108410f108801000b200128020c2000200220036a360204200141106a24000b7a01027f230041106b220124002001410036020c2000280208200028020422026b41034d044041f28108410f108801000b200028020020022001410c6a410410482000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f419b80084119103c22022000200110061a2002100c000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a410410641a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b0a0041ab83084104103c0b2901027f41af8308410b103c22011029220241848308410410061a20002002360204200020013602000b0a0041ba8308410d103c0b1200200041c783084109103c2200102a20000b3c01027f200141d083084111103c2201102a20011029210220011029220341848308410410061a2000200336020420002001360200200020023602080b0a0041e183084111103c0b0a0041f283084106103c0b4001037f2001280200102921022001280204102621032001280208102921042000200128020c103736020c2000200436020820002003360204200020023602000b6e01027f230041206b22012400200141086a22022000108f01103821002001200128020c105b36021c200141013602182001200236021403402001200141146a103a20012802004101710440200128020421022000108b012002107210850110390c010b0b200141206a240020000b2301027f230041106b22002400200041086a108c01200028020c105b200041106a24000b2201017f104621012000108b01200110732201108e0110753a0004200020013602000b18002002450440200041013a00000b2001108e01420210690b6f01027f230041206b22012400200141086a22022000108f012001200128020c105b36021c20014101360218200120023602144100210003402001200141146a103a2001280200410171044020002001280204108e01107541ff01714102466a21000c010b0b200141206a240020000bc40101027f230041306b22012400200141106a108c0120012802102000106a1067200141186a22022000108f012001200128021c105b36022c20014101360228200120023602240340200141086a200141246a103a200128020841017104402001280220200128020c10760c010b0b200128021c105b2100200141003a002c200120003602282001410136022403402001200141246a108a012001280200410171044020012802182001280204106a10670c010b0b200128021c42001069200141306a24000b1301017f109101105b2101200010970120014f0be30101027f108b01220420011073210302400240200241ff0171044020030d0120042004107441016a2203106f200420012003106d20042003200110710c010b2003450d010b2003108e0122031075210420032002ad42ff0183106941888408411110840122032000108301200320011080012003200441ff017122001081012003200210810120031038101a2000410247417f410020004102461b200241ff017122014102461b2202044010900122032003105b20026a10680b2000410147417f410020004101461b20014101461b2200450d00108d0122012001105b20006a10680b0bcc0301077f230041206b22032400200341086a10950120032d000c220541016b41ff01714102490440200328020821062003108c01200328020020032802042207105b41016a2204106a2102024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b2002420010690c080b410110382201102b2001200028020410031a2002200110181a0c070b410210382201102b2001200028020410031a2002200110181a0c060b410310382201102b2001200028020410031a2002200110181a0c050b410410382201102b20002802042001102a2002200110181a0c040b410510382201102b200041046a2001102c2002200110181a0c030b410610382201102b200041046a2001102c2002200110181a0c020b410710382201102b20002802042001102d2001200028020810031a20002f01022001102e200028020c2001102f2002200110181a0c010b410810382201102b2001200028020410031a20002802082001102d2001200028020c10031a20002f01022001102e20002802102001102f2002200110181a0b20072004ad106920054102460440200341146a22002004108f012000200610780b200341206a240020040f0b41c48808412c1044000b3b00024020021063c041004a0d0020031065450d0041f08808411d1044000b2000200436020c2000200336020820002002360204200020013602000b930101037f230041206b2201240010382103108b0110742102200141003a001c2001200236021820014101360214200041ff0171210003400240200141086a200141146a108a012001280208410171450d00200128020c2202108e01107541ff01712000470d01108b012002107222021066450d012002108501210210381a20032002102910390c010b0b200141206a240020030bd10301077f230041206b22002400101b105941011058410041f283084106105521052000410136020c2000410c6a2103103821010340200328020041c08b082802004804402001200341c085084105104e10390c010b0b200028020c105610382102200020011004360214200041003602102000200136020c02400240024002400340024020002000410c6a10312000280200410171450d00200028020410291029220110044120470d022002200110390c010b0b200041003a000b200210302106108b01210120021004210420011074210320002004360214200041003602102000200236020c034002402000411b6a2000410c6a10890120002d001b4101470d002001200028001c220241187420024180fe03714108747220024108764180fe03712002411876727222021073220404402000410b6a200441001096010520012002200341016a2203106d20012003200210712000410b6a200341011096010b0c010b0b20012003106f20002d000b4101460d0110900122012001105b20066a2201106820014100108d01105b6b460d0220012005490d0310910120051068200041206a24000f0b418883084110108801000b41aa850841161044000b41ec8908413e1044000b41a18608411f1044000b0600410010570b5701037f230041106b22002400101b41021057410041ab8308410410532101410141a18508410910552102108b01200110732201047e200041046a2002108f01200028020c20011079ad0542000b101c200041106a24000b8d0101047f230041206b22002400101b41011057410041a18508410910552101200041086a108c01024020002802082001106b450440200010950120002d00044102470d0120002802002102200041146a22032001108f01200028021c2002107945044020032001108f012003200210780b200041206a24000f0b41c58a0841151044000b41aa8a08411b1044000b8c0201087f230041206b22002400101b41011057410041a18508410910552101200041086a108c01024002400240024020002802082001106b450440200010950120002d00044102470d0120002802002104200041146a2001108f01200028021c22052004107b2202450d03200220002802182203105b22014b0d0420012002460d022003105b2001490d04200028021422072001103b21062003105b2002490d0420072002106a2006ad10690c020b41c58a0841151044000b41da8a08411e1044000b2003105b20014904400c020b20002802142001106a10672003200141016b106820012002470440200520062002107a0b2005200410760b200041206a24000f0b419c8b0841121002000b6201027f230041106b22002400101b41011057410041a18508410910552101200041086a109501024020002d000c41016b41ff0171410249044020011097010d012001109801200041106a24000f0b418d890841341044000b41c18908412b1044000b0d00101b41001057109101105a0b0d00101b41001057109001105a0b0d00101b41001057108d01105a0b0e00101b41001057109401ad10100b0d0041014114418a880810bc010b0d004102411041f0870810bc010b0d004103410c41e4870810bc010b3f01027f230041206b22002400101b41011057410041808808410a10552101200041043b010c200020013602102000410c6a109b01ad1010200041206a24000b0700410510bd010b0700410610bd010b7801067f230041206b22002400101b105941031058410010522101410141b488084106105321024102105421032000410336020c2000410c6a2204104c2105200028020c1056200020023602142000200136021020002005360218200020033b010e200041073b010c2004109b01ad1010200041206a24000b8b0101077f230041206b22002400101b105941041058410041ba8808410a10532101410110522102410241b488084106105321034103105421042000410436020c2000410c6a2205104c2106200028020c10562000200336021820002002360214200020013602102000200636021c200020043b010e200041083b010c2005109b01ad1010200041206a24000b1800101b41011057410041a1850841091055109901ad101c0bfd0a02087f017e230041f0006b22002400101b41011057410041a18508410910552102200041186a1095010240024002400240024020002d001c41016b41ff017141024904402002109901450d01200041106a108c01200041246a200028021020002802142002106c02400240024002400240024002400240024020002f0124220141016b0e080001020304050607080b20002000280228102936023c0c070b20002000280228102936023c0c060b20002000280228102936023c0c050b2000200028022836023c0c040b2000413c6a200041286a1092010c030b2000413c6a200041286a1092010c020b200028022810262103200028022c1029210420002f01262105200028023010372106200020043602402000200336023c20002006360244200020053b013a0c010b200028022810292103200028022c1026210420002802301029210520002f0126210620002802341037210720002005360244200020043602402000200336023c20002007360248200020063b013a0b200020013b013820021093012104200041d8006a200041406b2203290200370300200041e0006a200041c8006a28020036020020002002360264200020043602682000200029023837035041998408411210840120001038360238200041d0006a200041386a10282000280238101a2002109801024002400240024002400240024002400240200141016b0e080004050601020703080b200220002802284102109a010c070b2000280234210420002802302105200028022c210320002802282106101d220842e0a712580d0941be84084116108401220120021083012001200610800120012003107e2001200842e0a7127d2208107c2001200510800120012004107f20011038101a2000200510512000280200220210650440420021082003106341ff0171450d0b0b20062003200820022004101e1a0c060b2003200041306a29020037030020002000290228370338101d210820002802382106200028023c2104200328020021032000280244210541f883084110108401220120021083012001200610800120012004107e20012008107c2001200310800120012005107f20011038101a200041086a2003105120002802082102103821012000200536026820002002360264200020043602602000200136025c2000411b360258200041fb85083602542000200041386a360250105d10382102200041d0006a220041046a22012802002104200128020422052002102a20022004200510061a20012802082002102f200210181a20002802102000411c6a200028020020002802142000280218105f000b2000280234210320002f0126210420002802302105200028022c210620002802282107101d210841eb84084118108401220120021083012001200710800120012006107e200120051080012001200410820120012008107c20012003107f20011038101a10381a200410452007200820062005416720034167101f0c040b200220002802284101109a01109101105b109001105b4d0d030c090b200220002802284100109a01109001105b22024100108d01105b6b460d07109101105b20024d0d020c080b20002802282201109001105b4b0d071091012001106841ab84084113108401220320021083012003200110830120031038101a0c010b2000280230210320002f01262104200028022c210520002802282106101d210841d4840841171084012201200210830120012006107e200120051080012001200410820120012008107c20012003107f20011038101a10381a200410452008200620054167200310272202102710201a10212002102910111a0b200041f0006a24000f0b4186870841341044000b41ba8708411b1044000b41ed860841191044000b41d68108410e1002000b41c08608412d1044000b41a18608411f1044000bb50101057f230041206b2201240010471a10272200102220001046104945044041f88a0841241002000b41021057410041988308410b105321004101104a21022001200036020010471026210341a383084108103c2104103822002002108001200141146a220220003602082002200436020420022001360200200120033602082001200129021837020c20012001280214360204200141046a2200280204200041106a20002802002000280208200028020c105f000ba30201067f230041e0006b22002400101b41001057103821021094012101200041186a108c01200028021c210320002802182104200041003a0028200020013602242000410136022003400240200041106a200041206a108a012000280210410171450d002000412c6a2004200320002802142201106c20002f012c450d0120011093012105200041c8006a200041346a290200370300200041d0006a2000413c6a28020036020020002001360254200020053602582000200029022c3703402000103836025c200041406b200041dc006a10282002200028025c10390c010b0b20002002100436024820004100360244200020023602400340200041086a200041406b103120002802084101710440200028020c10111a0c010b0b200041e0006a24000b3301017f101b41011057410041ab8308410410532100108b01200010732200047e2000108e01107541ff0171ad0542000b10100b0f00101b410010574102109d01105c0b0f00101b410010574101109d01105c0bf80201027f230041206b22012400101b41011057410041a185084109105521002001108c012001410c6a200128020020012802042000106c024002400240024002400240024002400240024020012f010c41016b0e080102030405060708000b420010100c080b410110382200102b2000200128021010031a200010111a0c070b410210382200102b2000200128021010031a200010111a0c060b410310382200102b2000200128021010031a200010111a0c050b410410382200102b20012802102000102a200010111a0c040b410510382200102b200141106a2000102c200010111a0c030b410610382200102b200141106a2000102c200010111a0c020b410710382200102b20012802102000102d2000200128021410031a20012f010e2000102e20012802182000102f200010111a0c010b410810382200102b2000200128021010031a20012802142000102d2000200128021810031a20012f010e2000102e200128021c2000102f200010111a0b200141206a24000b6f01037f230041206b22002400101b41011057410041a185084109105510930121011038210220002001100436021c20004100360218200020013602140340200041086a200041146a1031200028020841017104402002200028020c10031a0c010b0b200210111a200041206a24000b3601017f230041106b22002400101b41011057200041046a410041a1850841091055108f012000280208105bad1010200041106a24000b1800101b41011057410041a1850841091055109701ad10100ba70502087f017e230041e0006b220124000240105d22031040220010650d0020012000102922001004360234200141003602302001200036022c2001412c6a22001086012102200010870121001038210503402000044020052001412c6a1086011039200041016b21000c010b0b02402001280234200128023046044020031067200141086a2002105e2001280228450d022001412c6a22002002105e200128024c450d0220002002105e200128024c2202450d0202402002411b470d0041002103411b210441fb850821020240034020002d0000220620022d00002207460440200041016a2100200241016a2102200441016b22040d010c020b0b200620076b21030b20030d0010594100105820014100360250200141d4006a2102230041106b220024000240200141d0006a220341968608410b104f100d2208428080808010540440027f2008a7220441ebde0147410020041b45044041002104200341968608410b104d21032000410c6a0c010b027f200328020041c08b082802004e044010380c010b200341968608410b104e0b21032000200436020c41012104200041086a0b2003360200200220043602002002200028020c36020420022000280208360208200041106a24000c010b41968608410b418d8008410e104b000b20012802501056200128025c2103200128025821022001280254200510041059044041a1810841121002000b410171044041838508410e1084012100103822052002ad107d200020051039200020031080010c030b419185084110108401210020012002100436025c200141003602582001200236025403402001200141d4006a10312001280200410171450d032001280204210210381a20002002102910390c000b000b41c5850841361002000b418d8008410e108801000b20001038101a0b200141e0006a24000b3d01027f230041206b22032400101b4101105741002002200110532104200320003b010c200320043602102003410c6a109b01ad1010200341206a24000b7401067f230041206b22012400101b105941021058410041e287084102105321024101105221032001410236020c20012001410c6a220410502001280204210520012802002106200128020c1056200141106a2002200320062005109c01200120003b010c2004109b01ad1010200141206a24000b0bd00b0200418080080bbc0b696e76616c69642076616c7565696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245656d707479207472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f616464726573732e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468646e735f61646472657373726567697374657275736572616374696f6e5f646174616e756d5f70726f706f73657273757365725f726f6c65616374696f6e5f7369676e65725f6964736e756d5f626f6172645f6d656d6265727371756f72756d706572666f726d4173796e6343616c6c706572666f726d4368616e6765557365727374617274506572666f726d416374696f6e706572666f726d4368616e676551756f72756d706572666f726d5472616e7366657245786563757465706572666f726d4465706c6f7946726f6d536f75726365706572666f726d5570677261646546726f6d536f757263656173796e6343616c6c4572726f726173796e6343616c6c53756363657373616374696f6e5f69646475706c696361746520626f617264206d656d626572626f6172646e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374706572666f726d5f6173796e635f63616c6c5f63616c6c6261636b63616c6c5f726573756c7471756f72756d2063616e6e6f742065786365656420626f6172642073697a6563616e6e6f742072656d6f766520616c6c20626f617264206d656d6265727320616e642070726f706f73657273696e73756666696369656e742067617320666f722063616c6c6f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e20706572666f726d20616374696f6e7371756f72756d20686173206e6f74206265656e207265616368656466756e6374696f6e5f63616c6c746f757365725f6164647265737370726f706f7365725f616464726573736e65775f71756f72756d626f6172645f6d656d6265725f61646472657373617267756d656e7473636f64655f6d65746164617461736f7572636573635f616464726573736f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e2070726f706f736570726f706f73656420616374696f6e20686173206e6f206566666563746f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e206469736361726420616374696f6e7363616e6e6f74206469736361726420616374696f6e20776974682076616c6964207369676e617475726573626f6172642063616e6e6f7420626520656d707479206f6e20696e69742c206e6f2d6f6e6520776f756c642062652061626c6520746f2070726f706f73656f6e6c7920626f617264206d656d626572732063616e207369676e616374696f6e20646f6573206e6f742065786973746f6e6c7920626f617264206d656d626572732063616e20756e2d7369676e456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676570616e6963206f636375727265640041bc8b080b0438ffffff", "report": { "imports": [ "bigIntAdd", - "bigIntGetCallValue", "bigIntGetUnsignedArgument", "bigIntSetInt64", "bigIntSign", @@ -1025,6 +1024,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -1033,10 +1033,11 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCaller", "managedDeployFromSourceContract", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedGetOriginalTxHash", "managedOwnerAddress", "managedSignalError", @@ -1050,12 +1051,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/multisig-full.wasm", - "size": 15187, + "size": 15120, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/multisig/output/multisig-view.mxsc.json b/test/multisig/output/multisig-view.mxsc.json index 0c318b057..6b2293624 100644 --- a/test/multisig/output/multisig-view.mxsc.json +++ b/test/multisig/output/multisig-view.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "multisig", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -610,7 +610,7 @@ } } }, - "code": "0061736d0100000001470d60027f7f017f60027f7f0060000060017f017f6000017f60017f0060037f7f7f017f60037f7f7f0060047f7f7f7f017f60047f7f7f7f0060017f017e60017e0060027f7f017e02f8031403656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000003656e76126d427566666572417070656e644279746573000603656e76126d616e616765645369676e616c4572726f72000503656e76126d427566666572476574417267756d656e74000003656e76106d4275666665724765744c656e677468000303656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e760f6765744e756d417267756d656e7473000403656e760b7369676e616c4572726f72000103656e760d6d42756666657246696e697368000303656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000703656e760f6d4275666665725365744279746573000603656e76126d42756666657253746f726167654c6f6164000003656e76176d427566666572546f426967496e74556e7369676e6564000003656e76146d427566666572436f707942797465536c696365000803656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e760e636865636b4e6f5061796d656e74000203656e76136d42756666657253746f7261676553746f7265000003656e7616736d616c6c496e7446696e697368556e7369676e6564000b03656e76136d42756666657247657442797465536c696365000803393807000000000301010304000009010109040405050101020006070103030900030c030108010101010405030103030202020202020202020205030100030616037f01418080080b7f0041b482080b7f0041c082080b07da010d066d656d6f7279020004696e697400421867657450656e64696e67416374696f6e46756c6c496e666f00430875736572526f6c65004412676574416c6c426f6172644d656d6265727300450f676574416c6c50726f706f7365727300460d676574416374696f6e44617461004710676574416374696f6e5369676e657273004814676574416374696f6e5369676e6572436f756e74004919676574416374696f6e56616c69645369676e6572436f756e74004a0863616c6c4261636b004b0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa822383c01037f200120021015210320012002101621042001200210172105200020012002101836020c2000200536020820002004360204200020033602000b0a00200041202001102c0b110020002001101710242200100d1a20000b0e00200020002001102b2001102c0b2d01027f20002001102b2102101d21030340200204402003200020011017102e200241016b21020c010b0b20030b0f01017f10002201200010011a20010b5401017f2001280204220220012802084b047f4100052001200241016a36020420012802002802001019220141908108410510021a20022001101b2001101c210141010b210220002001360204200020023602000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410021a200241106a24000b2401017e20002000103422014280808080105a04402000418d8008410e102d000b2001a70b080041014100101e0b1101017f1024220220002001100b1a20020b4201017f230041106b22022400200241003b010e20002002410e6a41022001102020022f010e2100200241106a2400200041850c71410874200041800c71410876720b2e01017f2000280200200028020422042001200210370440200341818108410f102d000b2000200220046a3602040b1301017f102422022000100f1a2002200110220b5101027f230041106b22022400200220001005220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410021a2001200010011a200241106a24000b2e01017f41ce80084117101e22042000200110021a200441e58008410310021a20042002200310021a20041003000b1901017f41ac820841ac820828020041016b220036020020000b2601017e4100100622004280808080105a0440418f82084109418d8008410e1023000b2000a70b1400100720004604400f0b41e8800841191008000b4f01017f230041206b2201240020012000100536021c20014100360218200120003602140340200141086a200141146a102820012802084101710440200128020c10091a0c010b0b200141206a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410371a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b0f0041b0820828020020002001100a0b2101017f416741b28008411c100b1a416710242200100c1a41b0820820003602000b5001017f230041106b220224002002410036020c20002002410c6a410420011020200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b3801027f20002802042103100021042000280200200320012004100e4504402000200120036a36020420040f0b200241818108410f102d000b2c01017f41b78108411b101e2203200010011a200341e58008410310021a20032001200210021a20031003000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410021a200241106a24000b0c00200010242200102920000b0c00200041671029416710050b970401057f230041206b22042400024002402003450d002002101c2003490d0020011019220241908108410510021a20032002101b024020021030450440410021030c010b20042002102f2201100536020c410021032004410036020820042001360204200441003a0010200441046a200441106a410120021020024002400240024002400240024002400240024020042d00100e09090102030405060708000b200241808008410d102d000b200441046a200210152105410121030c070b41022103200441046a2002101521050c060b41032103200441046a2002101521050c050b41042103200441046a2002102b21050c040b200441106a200441046a20021014200428021c2107200428021821062004280214210120042802102105410521030c030b200441106a200441046a20021014200428021c2107200428021821062004280214210120042802102105410621030c020b200441046a2206200210162105200620021015210120062002101f41ffff037121084107210320062002101821060c010b200441046a22072002101521052007200210162101200441046a20021015210620072002101f41ffff037121084108210320072002101821070b200428020c2004280208470d020b200020073602102000200636020c2000200136020820002005360204200020083b0102200020033b0100200441206a24000f0b4198820841121008000b2002418d8008410e102d000b190020001019220041a98108410e10021a20012000101b20000b4201017e2000103045044041000f0b02402000200010342201428002540440200142035a0d012001a70f0b2000418d8008410e102d000b200041808008410d102d000ba30102017e027f230041106b22032400200342003703082000102f22041005220041094f04402001418d8008410e102d000b20044100200320006b41106a200010371a20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b1f01017f2000102f220110054120470440200041d681084110102d000b20010b5b01017f230041206b22022400200010054102762001101b20022000100536021c20024100360218200220003602140340200241086a200241146a102820022802084101710440200228020c200110220c010b0b200241206a24000b0f00200020012003200210134100470b2701017f230041106b22022400200220003a000f20012002410f6a410110021a200241106a24000b27002001200028020010011a200028020420011021200028020820011022200028020c200110360b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210021a200241106a24000b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b0a0041e681084104101e0b2901027f41ea8108410b101e22011019220241d28108410410021a20002002360204200020013602000b1200200041f581084109101e2200101b20000b3c01027f200141fe81084111101e2201101b20011019210220011019220341d28108410410021a2000200336020420002001360200200020023602080b9c0101037f230041306b22012400200141146a22032000103f101d210220012001280218101c36022820014101360224200120033602200340200141086a200141206a101a20012802084101710440200128020c21002001103c200010321035220041187420004180fe03714108747220004108764180fe03712000411876727236022c20022001412c6a410410021a0c010b0b200141306a240020020b9d0101037f230041206b22022400101d2103103c1019220141a38108410610021a2001101c2101200241003a001c2002200136021820024101360214200041ff0171210003400240200241086a200241146a103b2002280208410171450d00200228020c2201103e103341ff01712000470d01103c2001103222011030450d01200110352101101d1a200320011019102e0c010b0b200241206a240020030b6f01017f10101007410147044041e8800841191008000b41001024220010041a2000100541204704401024220041ce80084117100b1a2000419b8008411710021a200041e58008410310021a200041d68108411010021a20001003000b416741b28008411c100b1a4167200010111a0bee0401077f230041f0006b22002400102a101041001026101d2103200041206a103d2000280224101c2101200041186a103d200028021c210520002802182106200041003a00302000200136022c20004101360228200041cc006a210403400240200041106a200041286a103b2000280210410171450d00200041346a2006200520002802142201103120002f0134450d01200110402102200041d0006a2000413c6a290200370300200041d8006a200041c4006a2802003602002000200136025c20002002360260200020002902343703482001101d10192201101b024002400240024002400240024002400240024020002f014841016b0e080102030405060708000b4100200110380c080b4101200110382001200028024c10011a0c070b4102200110382001200028024c10011a0c060b4103200110382001200028024c10011a0c050b410420011038200028024c2001101b0c040b4105200110382004200110390c030b4106200110382004200110390c020b410720011038200028024c200110212001200028025010011a20002f014a2001103a2000280254200110360c010b4108200110382001200028024c10011a2000280250200110212001200028025410011a20002f014a2001103a2000280258200110360b200210054102762001101b20002002100536026c200041003602682000200236026403402000200041e4006a1028200028020041017104402001200028020410011a0c010b0b20032001102e0c010b0b2000200310053602502000410036024c200020033602480340200041086a200041c8006a102820002802084101710440200028020c10091a0c010b0b200041f0006a24000b5d01027f102a10104101102641001024220010041a20001005412047044041e68108410441d6810841101023000b103c1019220141958108410e10021a2001200010011a2001101c2200047e2000103e103341ff0171ad0542000b10120b1000102a1010410010264102104110270b1000102a1010410010264101104110270bf10201027f230041206b22012400102a101041011026102521002001103d2001410c6a2001280200200128020420001031024002400240024002400240024002400240024020012f010c41016b0e080102030405060708000b420010120c080b4101101d220010382000200128021010011a200010091a0c070b4102101d220010382000200128021010011a200010091a0c060b4103101d220010382000200128021010011a200010091a0c050b4104101d2200103820012802102000101b200010091a0c040b4105101d22001038200141106a20001039200010091a0c030b4106101d22001038200141106a20001039200010091a0c020b4107101d220010382001280210200010212000200128021410011a20012f010e2000103a200128021820001036200010091a0c010b4108101d220010382000200128021010011a2001280214200010212000200128021810011a20012f010e2000103a200128021c20001036200010091a0b200141206a24000b6801037f230041206b22002400102a101041011026102510402101101d210220002001100536021c20004100360218200020013602140340200041086a200041146a1028200028020841017104402002200028020c10011a0c010b0b200210091a200041206a24000b2f01017f230041106b22002400102a101041011026200041046a1025103f2000280208101cad1012200041106a24000b7801027f230041206b22002400102a101041011026200041086a22011025103f2000200028020c101c36021c20004101360218200020013602144100210103402000200041146a101a2000280200410171044020012000280204103e103341ff01714102466a21010c010b0b2001ad1012200041206a24000b02000b0bbe020200418080080baa02696e76616c69642076616c7565696e70757420746f6f206c6f6e677461726765745f636f6e74726163745f6164647265737365787465726e616c2d766965772d7461726765742d61646472657373617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f2073686f72742e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f6164647265737373746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746875736572616374696f6e5f64617461757365725f726f6c65616374696f6e5f7369676e65725f696473616374696f6e5f6964696e646578206f7574206f662072616e67650041ac82080b0438ffffff", + "code": "0061736d0100000001470d60027f7f017f60027f7f0060000060017f017f6000017f60017f0060037f7f7f017f60037f7f7f0060047f7f7f7f017f60047f7f7f7f0060017f017e60017e0060027f7f017e0298041503656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000003656e76126d427566666572417070656e644279746573000603656e76106d4275666665724765744c656e677468000303656e76196d427566666572546f536d616c6c496e74556e7369676e6564000a03656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000a03656e76126d427566666572476574417267756d656e74000003656e760f6765744e756d417267756d656e7473000403656e760b7369676e616c4572726f72000103656e760d6d42756666657246696e697368000303656e761d6d42756666657253746f726167654c6f616446726f6d41646472657373000703656e760f6d4275666665725365744279746573000603656e76126d42756666657253746f726167654c6f6164000003656e76176d427566666572546f426967496e74556e7369676e6564000003656e76146d427566666572436f707942797465536c696365000803656e76196d42756666657246726f6d426967496e74556e7369676e6564000003656e760e636865636b4e6f5061796d656e74000203656e76136d42756666657253746f7261676553746f7265000003656e7616736d616c6c496e7446696e697368556e7369676e6564000b03656e76136d42756666657247657442797465536c6963650008033938070000000003010103040000090c03070101090404050501010200060103090003030108010101010405030103030202020202020202020205030100030616037f01418080080b7f0041d482080b7f0041e082080b07da010d066d656d6f7279020004696e697400431867657450656e64696e67416374696f6e46756c6c496e666f00440875736572526f6c65004512676574416c6c426f6172644d656d6265727300460f676574416c6c50726f706f7365727300470d676574416374696f6e44617461004810676574416374696f6e5369676e657273004914676574416374696f6e5369676e6572436f756e74004a19676574416374696f6e56616c69645369676e6572436f756e74004b0863616c6c4261636b004c0a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ad021383c01037f200120021016210320012002101721042001200210182105200020012002101936020c2000200536020820002004360204200020033602000b0a0020004120200110300b110020002001101810292200100e1a20000b0e00200020002001102f200110300b2d01027f20002001102f2102101e210303402002044020032000200110181031200241016b21020c010b0b20030b0f01017f10002201200010011a20010b5401017f2001280204220220012802084b047f4100052001200241016a3602042001280200280200101a220141b18108410510021a20022001101c2001101d210141010b210220002001360204200020023602000b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410021a200241106a24000b2401017e20002000102222014280808080105a04402000418d8008410e1024000b2001a70b080041014100101f0b1101017f1029220220002001100c1a20020b4201017f230041106b22022400200241003b010e20002002410e6a41022001102120022f010e2100200241106a2400200041850c71410874200041800c71410876720b4801017f02402000280208200028020422046b20024f044020002802002004200120021038450d01419e810841131009000b2003418f8108410f1024000b2000200220046a3602040b1f00200010232200100341094f0440200141818108410e1024000b200010040b0c00200010292200102d20000b2c01017f41d88108411b101f2203200010011a200341e58008410310021a20032001200210021a20031005000b1301017f10292202200010101a2002200110260b5101027f230041106b22022400200220001003220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410021a2001200010011a200241106a24000b2e01017f41ce80084117101f22042000200110021a200441e58008410310021a20042002200310021a20041005000b2601017e4100100622004280808080105a044041b082084109418d8008410e1027000b2000a70b1901017f41cc820841cc820828020041016b220036020020000b1400100820004604400f0b41e8800841191009000b4f01017f230041206b2201240020012000100336021c20014100360218200120003602140340200141086a200141146a102c20012802084101710440200128020c100a1a0c010b0b200141206a24000b830101027f230041106b220224002001280204220320012802084f047f4100052002410036020c200128020020032002410c6a410410381a2001200341046a360204200228020c220141187420014180fe03714108747220014108764180fe037120014118767272210341010b21012000200336020420002001360200200241106a24000b0f0041d0820828020020002001100b0b2101017f416741b28008411c100c1a416710292200100d1a41d0820820003602000b5001017f230041106b220224002002410036020c20002002410c6a410420011021200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4b01037f02402000280204220420002802002205100322034b0d002003200120046a2203490d0020052004200110002201100f0d002000200336020420010f0b2002418f8108410f1024000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410021a200241106a24000b0c0020004167102d416710030b970401057f230041206b22042400024002402003450d002002101d2003490d002001101a220241b18108410510021a20032002101c024020021032450440410021030c010b2004200210232201100336020c410021032004410036020820042001360204200441003a0010200441046a200441106a410120021021024002400240024002400240024002400240024020042d00100e09090102030405060708000b200241808008410d1024000b200441046a200210162105410121030c070b41022103200441046a2002101621050c060b41032103200441046a2002101621050c050b41042103200441046a2002102f21050c040b200441106a200441046a20021015200428021c2107200428021821062004280214210120042802102105410521030c030b200441106a200441046a20021015200428021c2107200428021821062004280214210120042802102105410621030c020b200441046a2206200210172105200620021016210120062002102041ffff037121084107210320062002101921060c010b200441046a22072002101621052007200210172101200441046a20021016210620072002102041ffff037121084108210320072002101921070b200428020c2004280208470d020b200020073602102000200636020c2000200136020820002005360204200020083b0102200020033b0100200441206a24000f0b41b9820841121009000b2002418d8008410e1024000b19002000101a220041ca8108410e10021a20012000101c20000b4201017e2000103245044041000f0b02402000200010222201428002540440200142035a0d012001a70f0b2000418d8008410e1024000b200041808008410d1024000b1f01017f20001023220110034120470440200041f7810841101024000b20010b5b01017f230041206b22022400200010034102762001101c20022000100336021c20024100360218200220003602140340200241086a200241146a102c20022802084101710440200228020c200110260c010b0b200241206a24000b0f00200020012003200210144100470b2701017f230041106b22022400200220003a000f20012002410f6a410110021a200241106a24000b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210021a200241106a24000b27002001200028020010011a200028020420011025200028020820011026200028020c200110370b5001037f024020012d00080d0020012802002203200128020422044b0d00200320044f044041012102200141013a00080c010b410121022001200341016a3602000b20002003360204200020023602000b0a00418782084104101f0b2901027f418b8208410b101f2201101a220241f38108410410021a20002002360204200020013602000b12002000419682084109101f2200101c20000b3c01027f2001419f82084111101f2201101c2001101a21022001101a220341f38108410410021a2000200336020420002001360200200020023602080b9c0101037f230041306b22012400200141146a220320001040101e210220012001280218101d36022820014101360224200120033602200340200141086a200141206a101b20012802084101710440200128020c21002001103d200010341036220041187420004180fe03714108747220004108764180fe03712000411876727236022c20022001412c6a410410021a0c010b0b200141306a240020020b9d0101037f230041206b22022400101e2103103d101a220141c48108410610021a2001101d2101200241003a001c2002200136021820024101360214200041ff0171210003400240200241086a200241146a103c2002280208410171450d00200228020c2201103f103541ff01712000470d01103d2001103422011032450d01200110362101101e1a20032001101a10310c010b0b200241206a240020030b6f01017f10111008410147044041e8800841191009000b41001029220010071a2000100341204704401029220041ce80084117100c1a2000419b8008411710021a200041e58008410310021a200041f78108411010021a20001005000b416741b28008411c100c1a4167200010121a0bee0401077f230041f0006b22002400102e10114100102a101e2103200041206a103e2000280224101d2101200041186a103e200028021c210520002802182106200041003a00302000200136022c20004101360228200041cc006a210403400240200041106a200041286a103c2000280210410171450d00200041346a2006200520002802142201103320002f0134450d01200110412102200041d0006a2000413c6a290200370300200041d8006a200041c4006a2802003602002000200136025c20002002360260200020002902343703482001101e101a2201101c024002400240024002400240024002400240024020002f014841016b0e080102030405060708000b4100200110390c080b4101200110392001200028024c10011a0c070b4102200110392001200028024c10011a0c060b4103200110392001200028024c10011a0c050b410420011039200028024c2001101c0c040b41052001103920042001103b0c030b41062001103920042001103b0c020b410720011039200028024c200110252001200028025010011a20002f014a2001103a2000280254200110370c010b4108200110392001200028024c10011a2000280250200110252001200028025410011a20002f014a2001103a2000280258200110370b200210034102762001101c20002002100336026c200041003602682000200236026403402000200041e4006a102c200028020041017104402001200028020410011a0c010b0b2003200110310c010b0b2000200310033602502000410036024c200020033602480340200041086a200041c8006a102c20002802084101710440200028020c100a1a0c010b0b200041f0006a24000b5d01027f102e10114101102a41001029220010071a20001003412047044041878208410441f7810841101027000b103d101a220141b68108410e10021a2001200010011a2001101d2200047e2000103f103541ff0171ad0542000b10130b1000102e10114100102a41021042102b0b1000102e10114100102a41011042102b0bf10201027f230041206b22012400102e10114101102a102821002001103e2001410c6a2001280200200128020420001033024002400240024002400240024002400240024020012f010c41016b0e080102030405060708000b420010130c080b4101101e220010392000200128021010011a2000100a1a0c070b4102101e220010392000200128021010011a2000100a1a0c060b4103101e220010392000200128021010011a2000100a1a0c050b4104101e2200103920012802102000101c2000100a1a0c040b4105101e22001039200141106a2000103b2000100a1a0c030b4106101e22001039200141106a2000103b2000100a1a0c020b4107101e220010392001280210200010252000200128021410011a20012f010e2000103a2001280218200010372000100a1a0c010b4108101e220010392000200128021010011a2001280214200010252000200128021810011a20012f010e2000103a200128021c200010372000100a1a0b200141206a24000b6801037f230041206b22002400102e10114101102a102810412101101e210220002001100336021c20004100360218200020013602140340200041086a200041146a102c200028020841017104402002200028020c10011a0c010b0b2002100a1a200041206a24000b2f01017f230041106b22002400102e10114101102a200041046a102810402000280208101dad1013200041106a24000b7801027f230041206b22002400102e10114101102a200041086a2201102810402000200028020c101d36021c20004101360218200020013602144100210103402000200041146a101b2000280200410171044020012000280204103f103541ff01714102466a21010c010b0b2001ad1013200041206a24000b02000b0bdf020200418080080bcb02696e76616c69642076616c7565696e70757420746f6f206c6f6e677461726765745f636f6e74726163745f6164647265737365787465726e616c2d766965772d7461726765742d61646472657373617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e747376616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64732e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f6164647265737373746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e67746875736572616374696f6e5f64617461757365725f726f6c65616374696f6e5f7369676e65725f696473616374696f6e5f6964696e646578206f7574206f662072616e67650041cc82080b0438ffffff", "report": { "imports": [ "checkNoPayment", @@ -629,6 +629,7 @@ "mBufferStorageLoadFromAddress", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedSignalError", "signalError", "smallIntFinishUnsigned", @@ -636,12 +637,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/multisig-view.wasm", - "size": 5616, + "size": 5593, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/multisig/output/multisig.mxsc.json b/test/multisig/output/multisig.mxsc.json index 99cdb934f..54fdc7f88 100644 --- a/test/multisig/output/multisig.mxsc.json +++ b/test/multisig/output/multisig.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "multisig", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -837,11 +837,10 @@ } } }, - "code": "0061736d01000000017c1460027f7f0060017f017f60027f7f017f60000060017f006000017f60037f7f7f0060037f7f7f017f60027f7e0060047f7f7f7f0060047f7f7f7f017f60017e0060057f7f7f7f7f0060017f017e6000017e60057f7f7e7f7f017f60077f7e7f7f7f7f7f0060077e7f7f7f7f7f7f017f60027f7f017e60037f7e7f0002a1072503656e760e626967496e74536574496e743634000803656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000203656e76106d4275666665724765744c656e677468000103656e76126d427566666572417070656e644279746573000703656e760f6d4275666665725365744279746573000703656e760d6d616e6167656443616c6c6572000403656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7612626967496e7447657443616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000203656e76126d616e616765645369676e616c4572726f72000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000d03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760f6765744e756d417267756d656e7473000503656e7616736d616c6c496e7446696e697368556e7369676e6564000b03656e76186d616e616765644765744f726967696e616c547848617368000403656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e745369676e000103656e76146d427566666572436f707942797465536c696365000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000303656e7614736d616c6c496e7446696e6973685369676e6564000b03656e760a6765744761734c656674000e03656e761b6d616e616765645472616e7366657256616c756545786563757465000f03656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001103656e760f636c65616e52657475726e44617461000303656e760d6d42756666657246696e697368000103656e76136d616e616765644f776e657241646472657373000403656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000203656e76106d616e616765644173796e6343616c6c0009038b018901010506020202020101050000000202090000010000040505010a020109020000070707010707010104040403040105000c0207090601010101010400080202000602000106020201011200020002060200080008000000000201010000000000130504050100050500040601040106010c03030303030303030303030303030303030303030303060405030100030616037f01418080080b7f0041a58b080b7f0041b08b080b07bd031a066d656d6f7279020004696e6974009601076465706f736974009701067369676e6564009801047369676e00990106756e7369676e009a010d64697363617264416374696f6e009b010967657451756f72756d009c01126765744e756d426f6172644d656d62657273009d010f6765744e756d50726f706f73657273009e0112676574416374696f6e4c617374496e646578009f011570726f706f7365416464426f6172644d656d62657200a0011270726f706f736541646450726f706f73657200a1011170726f706f736552656d6f76655573657200a2011370726f706f73654368616e676551756f72756d00a3011670726f706f73655472616e736665724578656375746500a4011070726f706f73654173796e6343616c6c00a5011970726f706f736553434465706c6f7946726f6d536f7572636500a6011a70726f706f736553435570677261646546726f6d536f7572636500a7010d71756f72756d5265616368656400a8010d706572666f726d416374696f6e00a9010b646e73526567697374657200aa010863616c6c4261636b00ab0107757067726164650096010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020aa85289011601017f1026220142001000200120012000100120010b1901017f419c8b08419c8b0828020041016b220036020020000b3c01037f2001200210282103200120021029210420012002102a2105200020012002102b36020c2000200536020820002004360204200020033602000b0a0020004120200110570b110020002001102a1026220010121a20000b0e002000200020011056200110570b2d01027f2000200110562102102e2103034020020440200320002001102a1030200241016b21020c010b0b20030b0f01017f10032201200010041a20010b5801027f230041206b22012400102e210220012000100536021c20014100360218200120003602140340200141086a200141146a102f200128020841017104402002200128020c102c10300c010b0b200141206a240020020b08004101410010420b6301027f230041106b220224002002410b6a200110820120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b4101017f2001280204220220012802084b047f4100052001200241016a360204200128020028020020021032210141010b210220002001360204200020023602000b0a0020002001106210520b4201017f230041106b22022400200241003b010e20002002410e6a41022001103420022f010e2100200241106a2400200041850c71410874200041800c71410876720b2e01017f20002802002000280204220420012002103e0440200341e48108410f1059000b2000200220046a3602040b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210061a200241106a24000b0a0020001037200110380b0f01017f10262201200010151a20010b5101027f230041106b22022400200220001005220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010041a200241106a24000b0900200020011002000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210071a200141106a24000b0c01017f10262200100820000bea0101037f230041106b220024004102103d450440415a10090b02400240027f024002400240415a10054104760e020102000b41d98008411d1002000b415d4101103d0d011a415d100a415d0c010b200041086a420037030020004200370300415a410020004110103e0d0220002802002101200028020c2102415841908208410b10071a4158200141187420014180fe03714108747220014108764180fe037120014118767272103f450d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200041106a24000f0b41b4800841251002000b41f38108411d1002000b2b01027f200041a48b082d0000220171200041ff017146220245044041a48b0820002001723a00000b20020b0f00200020012003200210224100470b0b0020002001102341004a0b0d00200010262200100b1a20000b2e01017f41f680084117104222042000200110061a2004418d8108410310061a20042002200310061a2004100c000b1101017f102622022000200110071a20020b6401027f230041106b22022400027f200128020041a08b082802004e0440200241086a102e104420022802082103200228020c0c010b200141b48708410d10452103200141b48708410d10460b21012000200336020020002001360204200241106a24000b10002000102e360204200020013602000b0c00200020012002104710400b2c01017f102e2103037f200028020041a08b082802004e047f2003052003200020012002104510300c010b0b0b2f01017f2000280200220341a08b082802004e0440200120024190810841111041000b2000200341016a36020020030b0c00200041fd8708410910460b1f00200010402200100541204704402001200241e7820841101041000b20000b2401017e2000100d22034280808080105a044020012002418d8008410e1041000b2003a70b7901027f230041106b2201240020001040220010052102200141003b010e0240200041002001410e6a4102103e45044020024102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41868808410d41e48108410f1041000b41868808410d418d8008410e1041000b0c00200010262200100e20000b190041a08b0828020020004c04400f0b41a1810841121002000b1400100f20004604400f0b41b3810841191002000b1900200041a08b082802004c04400f0b4190810841111002000b0b0041a08b08100f3602000b090020001052ad10100b2401017e20002000106e22014280808080105a04402000418d8008410e1059000b2001a70b1b01027f10262200101141cc8108410a10422201200010041a20010b970101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011005220341214f0440418d8b08410e1002000b2001410020022003103e1a20002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081024000b5001017f230041106b220224002002410036020c20002002410c6a410420011034200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001105820032802084101710440200328020c2000200120046a360204200341106a24000f0b200241e48108410f1059000b1f0020012002200310032201101421022000200136020420002002453602000b2c01017f41c88208411b10422203200010041a2003418d8108410310061a20032001200210061a2003100c000b110020001013220041004a20004100486b0b070020001005450b0900200010054102760b0d0020001026220010161a20000b0d002000416710161a416710050b1200416c4101410010071a2000416c10171a0b090020002001ad10610b3101017f230041106b2202240020022001200241086a108501200020022802002002280204104210171a200241106a24000b19002000102c2200419b8208410510061a20012000106420000b0b00200020011062105e450b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410061a200241106a24000b0d002000200110662002ad10610b1a002000102c220041a08208410e10061a2000200110041a20000b0b00200010682001ad10610b13002000102c220041ae8208410610061a20000b0d0020002001106a200210171a0b19002000102c220041b48208410e10061a20012000106420000b0a0020002001106610520b08002000106810520b4201017e2000105e45044041000f0b024020002000106e2201428002540440200142035a0d012001a70f0b2000418d8008410e1059000b200041808008410d1059000ba30102017e027f230041106b22032400200342003703082000105d22041005220041094f04402001418d8008410e1059000b20044100200320006b41106a2000103e1a20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b0a00200020011070105f0b19002000102c220041c28208410610061a20012000106420000b4101037f200028020822032001107245044020002802042202105221042000280200200441016a220010622001ad1061200220001060200320012002105210730b0b0b002000200110744100470b0d002000200110702002ad10610b0a0020002001107010520b1301017f102e22022001ad10762000200210300b2f01017f230041106b2202240020022001200241086a10850120002002280200200228020410071a200241106a24000b0d00102e1a20002001102c10300b1201017f102e2202200110762000200210300b12002001102e102c220110352000200110300b5001017f230041206b2202240020022001100536021c20024100360218200220013602140340200241086a200241146a102f200228020841017104402000200228020c10770c010b0b200241206a24000b1701017f102e22022001ad42ff018310762000200210300b0d00102e1a20002001103710300b1201017f102e2202200020011042103020020b5401047f230041106b220124002000107f2102200141086a20002802002000280204220320021058200128020841017145044041e48108410f108001000b200128020c2000200220036a360204200141106a24000b6f01027f230041106b220124002001410036020c2000280200200028020422022001410c6a4104103e044041e48108410f108001000b2000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f419b80084119104222022000200110061a2002100c000b5801017f230041206b220224002000105c2001106420022000100536021c20024100360218200220003602140340200241086a200241146a102f20022802084101710440200228020c200110380c010b0b200241206a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a4104103e1a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b2701017f230041106b22022400200220003a000f20012002410f6a410110061a200241106a24000b28002001200028020010041a200028020420011036200028020820011038200028020c20011081010bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b0a00418a8308410410420b2901027f418e8308410b10422201102c220241e38208410410061a20002002360204200020013602000b0a0041998308410d10420b1200200041a68308410910422200106420000b3c01027f200141af830841111042220110642001102c21022001102c220341e38208410410061a2000200336020420002001360200200020023602080b0a0041c08308411110420b0a0041d18308410610420b4001037f2001280200102c21022001280204102521032001280208102c21042000200128020c102d36020c2000200436020820002003360204200020023602000b2201017f103b210120001086012001106b2201108901106d3a0004200020013602000b18002002450440200041013a00000b2001108901420210610b6f01027f230041206b22012400200141086a22022000108a012001200128020c105236021c20014101360218200120023602144100210003402001200141146a10312001280200410171044020002001280204108901106d41ff01714102466a21000c010b0b200141206a240020000bb80101037f230041306b22012400200141106a108701200128021020001062105f200141186a22022000108a012001200128021c105236022c20014101360228200120023602240340200141086a200141246a1031200128020841017104402001280220200128020c106f0c010b0b200128021c105221024101210003402003200020024b72450440200128021820001062105f200020024f2103200020002002496a21000c010b0b200128021c42001061200141306a24000b1301017f108c0110522101200010900120014f0bde0101027f10860122042001106b210302400240200241ff0171044020030d0120042004106c41016a22031067200420012003106520042003200110690c010b2003450d010b20031089012203106d210420032002ad42ff0183106141e783084111107d2203200010752003200110772003200441ff01712200107b20032002107b2003102e10182000410247417f410020004102461b200241ff017122014102461b22020440108b0122032003105220026a10600b2000410147417f410020004101461b20014101461b2200450d0010880122012001105220006a10600b0bd80301077f230041206b22032400200341086a108e0120032d000c220541016b41ff01714102490440200328020821062003108701200328020020032802042207105241016a220410622102024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b2002420010610c080b4101102e22011083012001200028020410041a2002200110171a0c070b4102102e22011083012001200028020410041a2002200110171a0c060b4103102e22011083012001200028020410041a2002200110171a0c050b4104102e22011083012000280204200110642002200110171a0c040b4105102e2201108301200041046a20011084012002200110171a0c030b4106102e2201108301200041046a20011084012002200110171a0c020b4107102e22011083012000280204200110362001200028020810041a20002f010220011035200028020c20011081012002200110171a0c010b4108102e22011083012001200028020410041a2000280208200110362001200028020c10041a20002f010220011035200028021020011081012002200110171a0b20072004ad106120054102460440200341146a22002004108a012000200610710b200341206a240020040f0b41a38808412c1039000b3b0002402002105ac041004a0d002003105b450d0041cf8808411d1039000b2000200436020c2000200336020820002002360204200020013602000bd10301077f230041206b22002400101910504101104f410041d183084106104a21052000410136020c2000410c6a2103102e21010340200328020041a08b0828020048044020012003419f85084105104510300c010b0b200028020c104d102e2102200020011005360214200041003602102000200136020c02400240024002400340024020002000410c6a102f2000280200410171450d002000280204102c102c220110054120470d022002200110300c010b0b200041003a000b2002105c210610860121012002100521042001106c210320002004360214200041003602102000200236020c034002402000411b6a2000410c6a10820120002d001b4101470d002001200028001c220241187420024180fe03714108747220024108764180fe0371200241187672722202106b220404402000410b6a20044100108f010520012002200341016a2203106520012003200210692000410b6a20034101108f010b0c010b0b20012003106720002d000b4101460d01108b0122012001105220066a220110602001410010880110526b460d0220012005490d03108c0120051060200041206a24000f0b41e782084110108001000b4180850841161039000b41cb8908413e1039000b41808608411f1039000b06004100104e0b5701037f230041106b2200240010194102104e4100418a83084104104921014101419685084109104a21021086012001106b2201047e200041046a2002108a01200028020c20011072ad0542000b101a200041106a24000b8d0101047f230041206b2200240010194101104e4100419685084109104a2101200041086a10870102402000280208200110634504402000108e0120002d00044102470d0120002802002102200041146a22032001108a01200028021c2002107245044020032001108a012003200210710b200041206a24000f0b41a48a0841151039000b41898a08411b1039000b8c0201087f230041206b2200240010194101104e4100419685084109104a2101200041086a10870102400240024002402000280208200110634504402000108e0120002d00044102470d0120002802002104200041146a2001108a01200028021c2205200410742202450d03200220002802182203105222014b0d0420012002460d02200310522001490d0420002802142207200110322106200310522002490d042007200210622006ad10610c020b41a48a0841151039000b41b98a08411e1039000b2003105220014904400c020b200028021420011062105f2003200141016b10602001200247044020052006200210730b20052004106f0b200041206a24000f0b41fb8a0841121002000b6201027f230041106b2200240010194101104e4100419685084109104a2101200041086a108e01024020002d000c41016b41ff0171410249044020011090010d012001109101200041106a24000f0b41ec880841341039000b41a08908412b1039000b0d0010194100104e108c0110510b0d0010194100104e108b0110510b0d0010194100104e10880110510b2c01017f230041106b2200240010194100104e200041086a108701200028020c1052ad1010200041106a24000b0d004101411441e9870810ac010b0d004102411041cf870810ac010b0d004103410c41c3870810ac010b3f01027f230041206b2200240010194101104e410041df8708410a104a2101200041043b010c200020013602102000410c6a109401ad1010200041206a24000b0700410510ad010b0700410610ad010b7801067f230041206b22002400101910504103104f4100104c21014101419388084106104921024102104b21032000410336020c2000410c6a220410482105200028020c104d200020023602142000200136021020002005360218200020033b010e200041073b010c2004109401ad1010200041206a24000b8b0101077f230041206b22002400101910504104104f410041998808410a104921014101104c21024102419388084106104921034103104b21042000410436020c2000410c6a220510482106200028020c104d2000200336021820002002360214200020013602102000200636021c200020043b010e200041083b010c2005109401ad1010200041206a24000b180010194101104e4100419685084109104a109201ad101a0be01202097f017e23004190016b2200240010194101104e4100419685084109104a2105200041206a108e010240024002400240024002400240024020002d002441016b41ff017141024904402005109201450d01200041186a1087012005450d0220002802182101200028021c10522005490d0202402001200510622202105e45044041002101200041003b012c200041306a21040c010b20002002105d22031005360248410021012000410036024420002003360240200041003a0058200041406b200041d8006a410120021034024002400240024002400240024002400240024020002d00580e09090102030405060708000b200241808008410d1059000b200041406b200210282103410121010c070b41022101200041406b2002102821030c060b41032101200041406b2002102821030c050b41042101200041406b2002105621030c040b200041d8006a200041406b200210272000280264210720002802602104200028025c210620002802582103410521010c030b200041d8006a200041406b200210272000280264210720002802602104200028025c210620002802582103410621010c020b200041406b2204200210292103200420021028210620042002103341ffff037121084107210120042002102b21040c010b200041406b220122072002102821032007200210292106200120021028210420072002103341ffff037121084108210120072002102b21070b20002802482000280244470d042000200736023c200020043602382000200636023420002003360230200020083b012e200020013b012c200041306a210402400240024002400240024002400240200141016b0e080001020304050607080b20002003102c360244410121010c070b20002003102c360244410221010c060b20002003102c360244410321010c050b20002003360244410421010c040b200041c4006a2004108d01410521010c030b200041c4006a2004108d01410621010c020b2003102521012000280234102c210220002f012e21032000280238102d210620002002360248200020013602442000200636024c200020033b0142410721010c010b2003102c21012000280234102521022000280238102c210320002f012e2106200028023c102d21072000200336024c200020023602482000200136024420002007360250200020063b0142410821010b200020013b0140200041f8006a22012005108a01102e21022000200028027c105236028c012000410136028801200020013602840103400240200041106a20004184016a10312000280210410171450d00200028021421011086012001106a2201105d220310054120470d062002200310300c010b0b200041e0006a200041c8006a290200370300200041e8006a200041d0006a2802003602002000200536026c200020002902403703582000200236027041f883084112107d2005102e102c22011064024002400240024002400240024002400240024020002f015841016b0e080102030405060708000b410020011083010c080b410120011083012001200028025c10041a0c070b410220011083012001200028025c10041a0c060b410320011083012001200028025c10041a0c050b41042001108301200028025c200110640c040b41052001108301200041d8006a41047220011084010c030b41062001108301200041d8006a41047220011084010c020b41072001108301200028025c200110362001200028026010041a20002f015a20011035200028026420011081010c010b410820011083012001200028025c10041a2000280260200110362001200028026410041a20002f015a20011035200028026820011081010b2002105c200110642000200210053602482000410036024420002002360240034020004184016a200041406b10820120002d00840141014604402001200028008501220241187420024180fe03714108747220024108764180fe03712002411876727210041a0c010b0b20011018200510910102400240024002400240024002400240024020002f012c41016b0e080004050601020703080b2005200028023041021093010c070b200028023c2103200028023821042000280234210220002802302106101b220942e0a712580d0c419d84084116107d22012005107520012006107720012002107c2001200942e0a7127d2209107820012004107720012003107a2001102e101820002004104420002802002201105b0440420021092002105a41ff0171450d0e0b20062002200920012003101c1a0c060b200041c8006a2201200441086a29020037030020002004290200370340101b2109200028024021062000280244210220012802002103200028024c210441d783084110107d22012005107520012006107720012002107c20012009107820012003107720012004107a2001102e1018200041086a2003104420002802082101102e2105200020043602702000200136026c20002002360268200020053602642000411b360260200041da850836025c2000200041406b3602581053102e2101200041d8006a220041046a22022802002103200228020422042001106420012003200410061a20022802082001108101200110171a20002802102000411c6a2000280200200028021420002802181055000b200028023c210220002f012e2103200028023821042000280234210620002802302107101b210941ca84084118107d22012005107520012007107720012006107c20012004107720012003107920012009107820012002107a2001102e1018102e1a2003103a2007200920062004416720024167101d0c040b200520002802304101109301108c011052108b0110524d0d030c0c0b200520002802304100109301108b0110522201410010880110526b460d0a108c01105220014d0d020c0b0b20002802302201108b0110524b0d0a108c0120011060418a84084113107d2202200510752002200110752002102e10180c010b2000280238210220002f012e21032000280234210420002802302106101b210941b384084117107d22012005107520012006107c20012004107720012003107920012009107820012002107a2001102e1018102e1a2003103a20092006200441672002102622011026101e1a101f2001102c10201a0b20004190016a24000f0b41e5860841341039000b41998708411b1039000b41fb8a0841121002000b2002418d8008410e1059000b200141e7820841101059000b41cc860841191039000b41d68108410e1002000b419f8608412d1039000b41808608411f1039000bb40101057f230041206b22012400103c1a1026220010212000103b103f45044041d78a0841241002000b4102104e410041f78208410b1049210041011040210220012000360200103c1025210341828308410810422104102e220020021077200141146a220220003602082002200436020420022001360200200120033602082001200129021837020c20012001280214360204200141046a2200280204200041106a20002802002000280208200028020c1055000ba10502087f017e230041e0006b22012400024010532203105d2200105b0d0020012000102c22001005360234200141003602302001200036022c2001412c6a2200107e21022000107f2100102e210503402000044020052001412c6a107e1030200041016b21000c010b0b0240200128023420012802304604402003105f200141086a200210542001280228450d022001412c6a220020021054200128024c450d02200020021054200128024c2202450d0202402002411b470d0041002103411b210441da850821020240034020002d0000220620022d00002207460440200041016a2100200241016a2102200441016b22040d010c020b0b200620076b21030b20030d0010504100104f20014100360250200141d4006a2102230041106b220024000240200141d0006a220341f58508410b1047100d2208428080808010540440027f2008a7220441ebde0147410020041b45044041002104200341f58508410b104621032000410c6a0c010b027f200328020041a08b082802004e0440102e0c010b200341f58508410b10450b21032000200436020c41012104200041086a0b2003360200200220043602002002200028020c36020420022000280208360208200041106a24000c010b41f58508410b418d8008410e1041000b2001280250104d200128025c2103200128025821022001280254200510051050044041a1810841121002000b410171044041e28408410e107d2100102e22052002ad10762000200510302000200310770c030b41f084084110107d210020012002100536025c200141003602582001200236025403402001200141d4006a102f2001280200410171450d0320012802042102102e1a20002002102c10300c000b000b41a4850841361002000b418d8008410e108001000b2000102e10180b200141e0006a24000b3d01027f230041206b2203240010194101104e41002002200110492104200320003b010c200320043602102003410c6a109401ad1010200341206a24000b7401067f230041206b22012400101910504102104f410041c187084102104921024101104c21032001410236020c20012001410c6a220410432001280204210520012802002106200128020c104d200141106a2002200320062005109501200120003b010c2004109401ad1010200141206a24000b0baf0b0200418080080b9b0b696e76616c69642076616c7565696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245656d707479207472616e73666572696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f616464726573732e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468646e735f61646472657373726567697374657275736572616374696f6e5f646174616e756d5f70726f706f73657273757365725f726f6c65616374696f6e5f7369676e65725f6964736e756d5f626f6172645f6d656d6265727371756f72756d706572666f726d4173796e6343616c6c706572666f726d4368616e6765557365727374617274506572666f726d416374696f6e706572666f726d4368616e676551756f72756d706572666f726d5472616e7366657245786563757465706572666f726d4465706c6f7946726f6d536f75726365706572666f726d5570677261646546726f6d536f757263656173796e6343616c6c4572726f726173796e6343616c6c537563636573736475706c696361746520626f617264206d656d626572616374696f6e5f6964626f6172646e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374706572666f726d5f6173796e635f63616c6c5f63616c6c6261636b63616c6c5f726573756c7471756f72756d2063616e6e6f742065786365656420626f6172642073697a6563616e6e6f742072656d6f766520616c6c20626f617264206d656d6265727320616e642070726f706f73657273696e73756666696369656e742067617320666f722063616c6c6f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e20706572666f726d20616374696f6e7371756f72756d20686173206e6f74206265656e207265616368656466756e6374696f6e5f63616c6c746f757365725f6164647265737370726f706f7365725f616464726573736e65775f71756f72756d626f6172645f6d656d6265725f61646472657373617267756d656e7473636f64655f6d65746164617461736f7572636573635f616464726573736f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e2070726f706f736570726f706f73656420616374696f6e20686173206e6f206566666563746f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e206469736361726420616374696f6e7363616e6e6f74206469736361726420616374696f6e20776974682076616c6964207369676e617475726573626f6172642063616e6e6f7420626520656d707479206f6e20696e69742c206e6f2d6f6e6520776f756c642062652061626c6520746f2070726f706f73656f6e6c7920626f617264206d656d626572732063616e207369676e616374696f6e20646f6573206e6f742065786973746f6e6c7920626f617264206d656d626572732063616e20756e2d7369676e456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676570616e6963206f6363757272656400419c8b080b0438ffffff", + "code": "0061736d0100000001761360027f7f0060017f017f60027f7f017f60000060017f006000017f60037f7f7f0060037f7f7f017f60027f7e0060047f7f7f7f0060047f7f7f7f017f60017f017e60017e0060057f7f7f7f7f006000017e60057f7f7e7f7f017f60077f7e7f7f7f7f7f0060077e7f7f7f7f7f7f017f60027f7f017e02cd072603656e760e626967496e74536574496e743634000803656e7609626967496e74416464000603656e760b7369676e616c4572726f72000003656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000203656e76106d4275666665724765744c656e677468000103656e76126d427566666572417070656e644279746573000703656e76196d427566666572546f536d616c6c496e74556e7369676e6564000b03656e760f6d4275666665725365744279746573000703656e760d6d616e6167656443616c6c6572000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e76126d427566666572476574417267756d656e74000203656e76126d616e616765645369676e616c4572726f72000403656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000b03656e7619626967496e74476574556e7369676e6564417267756d656e74000003656e760f6765744e756d417267756d656e7473000503656e7616736d616c6c496e7446696e697368556e7369676e6564000c03656e76186d616e616765644765744f726967696e616c547848617368000403656e76176d427566666572546f426967496e74556e7369676e6564000203656e760a626967496e745369676e000103656e76146d427566666572436f707942797465536c696365000a03656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000803656e760f6d616e6167656457726974654c6f67000003656e760e636865636b4e6f5061796d656e74000303656e7614736d616c6c496e7446696e6973685369676e6564000c03656e760a6765744761734c656674000e03656e761b6d616e616765645472616e7366657256616c756545786563757465000f03656e76206d616e616765645570677261646546726f6d536f75726365436f6e7472616374001003656e761f6d616e616765644465706c6f7946726f6d536f75726365436f6e7472616374001103656e760f636c65616e52657475726e44617461000303656e760d6d42756666657246696e697368000103656e76136d616e616765644f776e657241646472657373000403656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000203656e76106d616e616765644173796e6343616c6c0009038a01880101050602020202010105000000020209001201060001000004050509020109020700000701070701010704040403040105000d020709010a010101040008020200060200010602020101000200020602000000080000080002010100000000000504050100050500040601040106010d03030303030303030303030303030303030303030303060405030100030616037f01418080080b7f0041c58b080b7f0041d08b080b07bd031a066d656d6f7279020004696e6974009601076465706f736974009701067369676e6564009801047369676e00990106756e7369676e009a010d64697363617264416374696f6e009b010967657451756f72756d009c01126765744e756d426f6172644d656d62657273009d010f6765744e756d50726f706f73657273009e0112676574416374696f6e4c617374496e646578009f011570726f706f7365416464426f6172644d656d62657200a0011270726f706f736541646450726f706f73657200a1011170726f706f736552656d6f76655573657200a2011370726f706f73654368616e676551756f72756d00a3011670726f706f73655472616e736665724578656375746500a4011070726f706f73654173796e6343616c6c00a5011970726f706f736553434465706c6f7946726f6d536f7572636500a6011a70726f706f736553435570677261646546726f6d536f7572636500a7010d71756f72756d5265616368656400a8010d706572666f726d416374696f6e00a9010b646e73526567697374657200aa010863616c6c4261636b00ab0107757067726164650096010a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020a955188011601017f1027220142001000200120012000100120010b1901017f41bc8b0841bc8b0828020041016b220036020020000b3c01037f200120021029210320012002102a210420012002102b2105200020012002102c36020c2000200536020820002004360204200020033602000b0a00200041202001105a0b110020002001102b1027220010121a20000b0e0020002000200110592001105a0b2d01027f2000200110592102102f2103034020020440200320002001102b1031200241016b21020c010b0b20030b0f01017f10032201200010041a20010b5801027f230041206b22012400102f210220012000100536021c20014100360218200120003602140340200141086a200141146a1030200128020841017104402002200128020c102d10310c010b0b200141206a240020020b08004101410010450b6301027f230041106b220224002002410b6a200110830120022d000b047f200228000c220141187420014180fe03714108747220014108764180fe037120014118767272210341010541000b21012000200336020420002001360200200241106a24000b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b4101017f2001280204220220012802084b047f4100052001200241016a360204200128020028020020021033210141010b210220002001360204200020023602000b0a0020002001106410550b4201017f230041106b22022400200241003b010e20002002410e6a41022001103520022f010e2100200241106a2400200041850c71410874200041800c71410876720b3901017f2000280208200028020422046b2002490440200341f28108410f1039000b200028020020042001200210412000200220046a3602040b3501017f230041106b220224002002200041087420004180fe0371410876723b010e20012002410e6a410210061a200241106a24000b1f00200010382200100541094f0440200141e48108410e1039000b200010070b0d0020001027220010161a20000b2c01017f41e98208411b10452203200010041a2003418d8108410310061a20032001200210061a2003100c000b0a002000103b2001103c0b0f01017f10272201200010151a20010b5101027f230041106b22022400200220001005220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a410410061a2001200010041a200241106a24000b0900200020011002000b3501017f230041106b220124002001200041087420004180fe0371410876723b010e41672001410e6a410210081a200141106a24000b0c01017f10272200100920000bfe0101037f230041106b2201240041c48b082d0000220041087145044041c48b0820004108723a00004159100a0b02400240027f024002400240415910054104760e020102000b41d98008411d1002000b415d42001000415d0c010b200141086a42003703002001420037030041591005410f4d0d024159410020014110104120012802002100200128020c2102415841b18208410b10081a4158200041187420004180fe03714108747220004108764180fe0371200041187672721042450d01200241187420024180fe03714108747220024108764180fe0371200241187672720b200141106a24000f0b41b4800841251002000b41948208411d1002000b1a002000200120022003105d4504400f0b4181820841131002000b0b0020002001102441004a0b0d00200010272200100b1a20000b2e01017f41f680084117104522042000200110061a2004418d8108410310061a20042002200310061a2004100c000b1101017f102722022000200110081a20020b0c00200020012002104b10430b6401027f230041106b22022400027f200128020041c08b082802004e0440200241086a102f104820022802082103200228020c0c010b200141d58708410d10462103200141d58708410d10490b21012000200336020020002001360204200241106a24000b10002000102f360204200020013602000b2c01017f102f2103037f200028020041c08b082802004e047f2003052003200020012002104610310c010b0b0b0c002000419e8808410910490b2f01017f2000280200220341c08b082802004e0440200120024190810841111044000b2000200341016a36020020030b2401017e2000100d22034280808080105a044020012002418d8008410e1044000b2003a70b7d01027f230041106b2201240020001043220210052100200141003b010e0240200041014b0440200241002001410e6a4102104120004102470d0120012f010e2100200141106a2400200041850c71410874200041800c71410876720f0b41a78808410d41f28108410f1044000b41a78808410d418d8008410e1044000b0c00200010272200100e20000b1f0020001043220010054120470440200120024188830841101044000b20000b190041c08b0828020020004c04400f0b41a1810841121002000b1400100f20004604400f0b41b3810841191002000b1900200041c08b082802004c04400f0b4190810841111002000b0b0041c08b08100f3602000b090020001055ad10100b2401017e20002000103722014280808080105a04402000418d8008410e1039000b2001a70b1b01027f10272200101141cc8108410a10452201200010041a20010b960101057f230041206b22022400200241186a22044200370300200241106a22054200370300200241086a220642003703002002420037030020011005220341214f044041ae8b08410e1002000b2001410020022003104120002003360220200041186a2004290300370000200041106a2005290300370000200041086a200629030037000020002002290300370000200241206a24000b7801017f230041206b220524002005200036020c2005200436021c200520033602182005200136021420052005410c6a360210230041106b22002400200541106a220128020021032000200236020420002001290208370208200041046a22002802002802002003280200200028020420002802081025000b5001017f230041106b220224002002410036020c20002002410c6a410420011035200228020c2100200241106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b4f01027f230041106b22032400200341086a2000280200200028020422042001105b20032802084101710440200328020c2000200120046a360204200341106a24000f0b200241f28108410f1039000b3701037f200110052205200249200220036a20054b724504402001200220031003220610144521040b20002006360204200020043602000b110020001013220041004a20004100486b0b0f00200020012003200210234100470b070020001005450b0900200010054102760b0d002000416710161a416710050b1200416c4101410010081a2000416c10171a0b090020002001ad10630b0f004167200110182000416710171a0b19002000102d220041bc8208410510061a20012000106620000b0b002000200110641060450b4601017f230041106b220224002002200041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410061a200241106a24000b0d002000200110682002ad10630b1a002000102d220041c18208410e10061a2000200110041a20000b0b002000106a2001ad10630b13002000102d220041cf8208410610061a20000b0d0020002001106c200210171a0b19002000102d220041d58208410e10061a20012000106620000b0a0020002001106810550b08002000106a10550b4201017e2000106045044041000f0b02402000200010372201428002540440200142035a0d012001a70f0b2000418d8008410e1039000b200041808008410d1039000b0a0020002001107110610b19002000102d220041e38208410610061a20012000106620000b4101037f200028020822032001107345044020002802042202105521042000280200200441016a220010642001ad1063200220001062200320012002105510740b0b0b002000200110754100470b0d002000200110712002ad10630b0a0020002001107110550b0d00102f1a20002001102d10310b0d00102f1a20002001103b10310b1701017f102f22022001ad42ff018310792000200210310bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10081a200341106a24000b12002001102f102d220110362000200110310b1301017f102f22022001ad10792000200210310b1201017f102f2202200110792000200210310b5001017f230041206b2202240020022001100536021c20024100360218200220013602140340200241086a200241146a1030200228020841017104402000200228020c10760c010b0b200241206a24000b1201017f102f2202200020011045103120020b5501047f230041106b2201240020001080012102200141086a2000280200200028020422032002105b200128020841017145044041f28108410f108101000b200128020c2000200220036a360204200141106a24000b7a01027f230041106b220124002001410036020c2000280208200028020422026b41034d044041f28108410f108101000b200028020020022001410c6a410410412000200241046a360204200128020c2100200141106a2400200041187420004180fe03714108747220004108764180fe0371200041187672720b1a01017f419b80084119104522022000200110061a2002100c000b5801017f230041206b220224002000105f2001106620022000100536021c20024100360218200220003602140340200241086a200241146a103020022802084101710440200228020c2001103c0c010b0b200241206a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a4104105d1a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b2701017f230041106b22022400200220003a000f20012002410f6a410110061a200241106a24000b28002001200028020010041a20002802042001103a20002802082001103c200028020c20011082010b0a0041ab8308410410450b2901027f41af8308410b10452201102d220241848308410410061a20002002360204200020013602000b0a0041ba8308410d10450b1200200041c78308410910452200106620000b3c01027f200141d0830841111045220110662001102d21022001102d220341848308410410061a2000200336020420002001360200200020023602080b0a0041e18308411110450b0a0041f28308410610450b4001037f2001280200102d21022001280204102621032001280208102d21042000200128020c102e36020c2000200436020820002003360204200020023602000b2201017f103f210120001086012001106d2201108901106f3a0004200020013602000b18002002450440200041013a00000b2001108901420210630b6f01027f230041206b22012400200141086a22022000108a012001200128020c105536021c20014101360218200120023602144100210003402001200141146a10322001280200410171044020002001280204108901106f41ff01714102466a21000c010b0b200141206a240020000bb80101037f230041306b22012400200141106a1087012001280210200010641061200141186a22022000108a012001200128021c105536022c20014101360228200120023602240340200141086a200141246a1032200128020841017104402001280220200128020c10700c010b0b200128021c105521024101210003402003200020024b724504402001280218200010641061200020024f2103200020002002496a21000c010b0b200128021c42001063200141306a24000b1301017f108c0110552101200010900120014f0bde0101027f10860122042001106d210302400240200241ff0171044020030d0120042004106e41016a220310692004200120031067200420032001106b0c010b2003450d010b20031089012203106f210420032002ad42ff01831063418884084111107e22032000107b2003200110762003200441ff0171220010782003200210782003102f10192000410247417f410020004102461b200241ff017122014102461b22020440108b0122032003105520026a10620b2000410147417f410020004101461b20014101461b2200450d0010880122012001105520006a10620b0bd80301077f230041206b22032400200341086a108e0120032d000c220541016b41ff01714102490440200328020821062003108701200328020020032802042207105541016a220410642102024002400240024002400240024002400240024020002f010041016b0e080102030405060708000b2002420010630c080b4101102f22011084012001200028020410041a2002200110171a0c070b4102102f22011084012001200028020410041a2002200110171a0c060b4103102f22011084012001200028020410041a2002200110171a0c050b4104102f22011084012000280204200110662002200110171a0c040b4105102f2201108401200041046a20011085012002200110171a0c030b4106102f2201108401200041046a20011085012002200110171a0c020b4107102f220110840120002802042001103a2001200028020810041a20002f010220011036200028020c20011082012002200110171a0c010b4108102f22011084012001200028020410041a20002802082001103a2001200028020c10041a20002f010220011036200028021020011082012002200110171a0b20072004ad106320054102460440200341146a22002004108a012000200610720b200341206a240020040f0b41c48808412c103d000b3b0002402002105cc041004a0d002003105e450d0041f08808411d103d000b2000200436020c2000200336020820002002360204200020013602000bd10301077f230041206b22002400101a105341011052410041f283084106104c21052000410136020c2000410c6a2103102f21010340200328020041c08b082802004804402001200341c085084105104610310c010b0b200028020c1050102f2102200020011005360214200041003602102000200136020c02400240024002400340024020002000410c6a10302000280200410171450d002000280204102d102d220110054120470d022002200110310c010b0b200041003a000b2002105f210610860121012002100521042001106e210320002004360214200041003602102000200236020c034002402000411b6a2000410c6a10830120002d001b4101470d002001200028001c220241187420024180fe03714108747220024108764180fe0371200241187672722202106d220404402000410b6a20044100108f010520012002200341016a22031067200120032002106b2000410b6a20034101108f010b0c010b0b20012003106920002d000b4101460d01108b0122012001105520066a220110622001410010880110556b460d0220012005490d03108c0120051062200041206a24000f0b418883084110108101000b41a185084116103d000b41ec8908413e103d000b41a18608411f103d000b0600410010510b5701037f230041106b22002400101a41021051410041ab83084104104f2101410141b785084109104c21021086012001106d2201047e200041046a2002108a01200028020c20011073ad0542000b101b200041106a24000b8d0101047f230041206b22002400101a41011051410041b785084109104c2101200041086a10870102402000280208200110654504402000108e0120002d00044102470d0120002802002102200041146a22032001108a01200028021c2002107345044020032001108a012003200210720b200041206a24000f0b41c58a084115103d000b41aa8a08411b103d000b8c0201087f230041206b22002400101a41011051410041b785084109104c2101200041086a10870102400240024002402000280208200110654504402000108e0120002d00044102470d0120002802002104200041146a2001108a01200028021c2205200410752202450d03200220002802182203105522014b0d0420012002460d02200310552001490d0420002802142207200110332106200310552002490d042007200210642006ad10630c020b41c58a084115103d000b41da8a08411e103d000b2003105520014904400c020b20002802142001106410612003200141016b10622001200247044020052006200210740b2005200410700b200041206a24000f0b419c8b0841121002000b6201027f230041106b22002400101a41011051410041b785084109104c2101200041086a108e01024020002d000c41016b41ff0171410249044020011090010d012001109101200041106a24000f0b418d89084134103d000b41c18908412b103d000b0d00101a41001051108c0110540b0d00101a41001051108b0110540b0d00101a4100105110880110540b2c01017f230041106b22002400101a41001051200041086a108701200028020c1055ad1010200041106a24000b0d0041014114418a880810ac010b0d004102411041f0870810ac010b0d004103410c41e4870810ac010b3f01027f230041206b22002400101a41011051410041808808410a104c2101200041043b010c200020013602102000410c6a109401ad1010200041206a24000b0700410510ad010b0700410610ad010b7801067f230041206b22002400101a1053410310524100104e2101410141b488084106104f21024102104d21032000410336020c2000410c6a2204104a2105200028020c1050200020023602142000200136021020002005360218200020033b010e200041073b010c2004109401ad1010200041206a24000b8b0101077f230041206b22002400101a105341041052410041ba8808410a104f21014101104e2102410241b488084106104f21034103104d21042000410436020c2000410c6a2205104a2106200028020c10502000200336021820002002360214200020013602102000200636021c200020043b010e200041083b010c2005109401ad1010200041206a24000b1800101a41011051410041b785084109104c109201ad101b0be01202097f017e23004190016b22002400101a41011051410041b785084109104c2105200041206a108e010240024002400240024002400240024020002d002441016b41ff017141024904402005109201450d01200041186a1087012005450d0220002802182101200028021c10552005490d0202402001200510642202106045044041002101200041003b012c200041306a21040c010b20002002103822031005360248410021012000410036024420002003360240200041003a0058200041406b200041d8006a410120021035024002400240024002400240024002400240024020002d00580e09090102030405060708000b200241808008410d1039000b200041406b200210292103410121010c070b41022101200041406b2002102921030c060b41032101200041406b2002102921030c050b41042101200041406b2002105921030c040b200041d8006a200041406b200210282000280264210720002802602104200028025c210620002802582103410521010c030b200041d8006a200041406b200210282000280264210720002802602104200028025c210620002802582103410621010c020b200041406b22042002102a2103200420021029210620042002103441ffff037121084107210120042002102c21040c010b200041406b2201220720021029210320072002102a2106200120021029210420072002103441ffff037121084108210120072002102c21070b20002802482000280244470d042000200736023c200020043602382000200636023420002003360230200020083b012e200020013b012c200041306a210402400240024002400240024002400240200141016b0e080001020304050607080b20002003102d360244410121010c070b20002003102d360244410221010c060b20002003102d360244410321010c050b20002003360244410421010c040b200041c4006a2004108d01410521010c030b200041c4006a2004108d01410621010c020b2003102621012000280234102d210220002f012e21032000280238102e210620002002360248200020013602442000200636024c200020033b0142410721010c010b2003102d21012000280234102621022000280238102d210320002f012e2106200028023c102e21072000200336024c200020023602482000200136024420002007360250200020063b0142410821010b200020013b0140200041f8006a22012005108a01102f21022000200028027c105536028c012000410136028801200020013602840103400240200041106a20004184016a10322000280210410171450d00200028021421011086012001106c22011038220310054120470d062002200310310c010b0b200041e0006a200041c8006a290200370300200041e8006a200041d0006a2802003602002000200536026c2000200029024037035820002002360270419984084112107e2005102f102d22011066024002400240024002400240024002400240024020002f015841016b0e080102030405060708000b410020011084010c080b410120011084012001200028025c10041a0c070b410220011084012001200028025c10041a0c060b410320011084012001200028025c10041a0c050b41042001108401200028025c200110660c040b41052001108401200041d8006a41047220011085010c030b41062001108401200041d8006a41047220011085010c020b41072001108401200028025c2001103a2001200028026010041a20002f015a20011036200028026420011082010c010b410820011084012001200028025c10041a20002802602001103a2001200028026410041a20002f015a20011036200028026820011082010b2002105f200110662000200210053602482000410036024420002002360240034020004184016a200041406b10830120002d00840141014604402001200028008501220241187420024180fe03714108747220024108764180fe03712002411876727210041a0c010b0b20011019200510910102400240024002400240024002400240024020002f012c41016b0e080004050601020703080b2005200028023041021093010c070b200028023c2103200028023821042000280234210220002802302106101c220942e0a712580d0c41be84084116107e22012005107b2001200610762001200210772001200942e0a7127d2209107c20012004107620012003107d2001102f101920002004104820002802002201105e0440420021092002105c41ff0171450d0e0b20062002200920012003101d1a0c060b200041c8006a2201200441086a29020037030020002004290200370340101c2109200028024021062000280244210220012802002103200028024c210441f883084110107e22012005107b20012006107620012002107720012009107c20012003107620012004107d2001102f1019200041086a2003104820002802082101102f2105200020043602702000200136026c20002002360268200020053602642000411b360260200041fb850836025c2000200041406b3602581056102f2101200041d8006a220041046a22022802002103200228020422042001106620012003200410061a20022802082001108201200110171a20002802102000411c6a2000280200200028021420002802181058000b200028023c210220002f012e2103200028023821042000280234210620002802302107101c210941eb84084118107e22012005107b20012007107620012006107720012004107620012003107a20012009107c20012002107d2001102f1019102f1a2003103e2007200920062004416720024167101e0c040b200520002802304101109301108c011055108b0110554d0d030c0c0b200520002802304100109301108b0110552201410010880110556b460d0a108c01105520014d0d020c0b0b20002802302201108b0110554b0d0a108c012001106241ab84084113107e22022005107b20022001107b2002102f10190c010b2000280238210220002f012e21032000280234210420002802302106101c210941d484084117107e22012005107b20012006107720012004107620012003107a20012009107c20012002107d2001102f1019102f1a2003103e20092006200441672002102722011027101f1a10202001102d10211a0b20004190016a24000f0b418687084134103d000b41ba8708411b103d000b419c8b0841121002000b2002418d8008410e1039000b20014188830841101039000b41ed86084119103d000b41d68108410e1002000b41c08608412d103d000b41a18608411f103d000bb40101057f230041206b2201240010401a1027220010222000103f104245044041f88a0841241002000b41021051410041988308410b104f21004101104321022001200036020010401026210341a38308410810452104102f220020021076200141146a220220003602082002200436020420022001360200200120033602082001200129021837020c20012001280214360204200141046a2200280204200041106a20002802002000280208200028020c1058000ba20502087f017e230041e0006b2201240002401056220310382200105e0d0020012000102d22001005360234200141003602302001200036022c2001412c6a2200107f210220001080012100102f210503402000044020052001412c6a107f1031200041016b21000c010b0b02402001280234200128023046044020031061200141086a200210572001280228450d022001412c6a220020021057200128024c450d02200020021057200128024c2202450d0202402002411b470d0041002103411b210441fb850821020240034020002d0000220620022d00002207460440200041016a2100200241016a2102200441016b22040d010c020b0b200620076b21030b20030d0010534100105220014100360250200141d4006a2102230041106b220024000240200141d0006a220341968608410b104b100d2208428080808010540440027f2008a7220441ebde0147410020041b45044041002104200341968608410b104921032000410c6a0c010b027f200328020041c08b082802004e0440102f0c010b200341968608410b10460b21032000200436020c41012104200041086a0b2003360200200220043602002002200028020c36020420022000280208360208200041106a24000c010b41968608410b418d8008410e1044000b20012802501050200128025c2103200128025821022001280254200510051053044041a1810841121002000b410171044041838508410e107e2100102f22052002ad10792000200510312000200310760c030b419185084110107e210020012002100536025c200141003602582001200236025403402001200141d4006a10302001280200410171450d0320012802042102102f1a20002002102d10310c000b000b41c5850841361002000b418d8008410e108101000b2000102f10190b200141e0006a24000b3d01027f230041206b22032400101a41011051410020022001104f2104200320003b010c200320043602102003410c6a109401ad1010200341206a24000b7401067f230041206b22012400101a105341021052410041e287084102104f21024101104e21032001410236020c20012001410c6a220410472001280204210520012802002106200128020c1050200141106a2002200320062005109501200120003b010c2004109401ad1010200141206a24000b0bd00b0200418080080bbc0b696e76616c69642076616c7565696e70757420746f6f206c6f6e6773657269616c697a6572206465636f6465206572726f723a2066756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747343425f434c4f53555245656d707479207472616e7366657276616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c442d3030303030302e6974656d5f616464726573735f746f5f69645f636f756e745f69645f746f5f616464726573732e696e64657873746f72616765206465636f6465206572726f7220286b65793a202e6c656e626164206172726179206c656e677468646e735f61646472657373726567697374657275736572616374696f6e5f646174616e756d5f70726f706f73657273757365725f726f6c65616374696f6e5f7369676e65725f6964736e756d5f626f6172645f6d656d6265727371756f72756d706572666f726d4173796e6343616c6c706572666f726d4368616e6765557365727374617274506572666f726d416374696f6e706572666f726d4368616e676551756f72756d706572666f726d5472616e7366657245786563757465706572666f726d4465706c6f7946726f6d536f75726365706572666f726d5570677261646546726f6d536f757263656173796e6343616c6c4572726f726173796e6343616c6c537563636573736475706c696361746520626f617264206d656d626572616374696f6e5f6964626f6172646e6f2063616c6c6261636b2066756e6374696f6e20776974682074686174206e616d652065786973747320696e20636f6e7472616374706572666f726d5f6173796e635f63616c6c5f63616c6c6261636b63616c6c5f726573756c7471756f72756d2063616e6e6f742065786365656420626f6172642073697a6563616e6e6f742072656d6f766520616c6c20626f617264206d656d6265727320616e642070726f706f73657273696e73756666696369656e742067617320666f722063616c6c6f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e20706572666f726d20616374696f6e7371756f72756d20686173206e6f74206265656e207265616368656466756e6374696f6e5f63616c6c746f757365725f6164647265737370726f706f7365725f616464726573736e65775f71756f72756d626f6172645f6d656d6265725f61646472657373617267756d656e7473636f64655f6d65746164617461736f7572636573635f616464726573736f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e2070726f706f736570726f706f73656420616374696f6e20686173206e6f206566666563746f6e6c7920626f617264206d656d6265727320616e642070726f706f736572732063616e206469736361726420616374696f6e7363616e6e6f74206469736361726420616374696f6e20776974682076616c6964207369676e617475726573626f6172642063616e6e6f7420626520656d707479206f6e20696e69742c206e6f2d6f6e6520776f756c642062652061626c6520746f2070726f706f73656f6e6c7920626f617264206d656d626572732063616e207369676e616374696f6e20646f6573206e6f742065786973746f6e6c7920626f617264206d656d626572732063616e20756e2d7369676e456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e6572696e646578206f7574206f662072616e676570616e6963206f636375727265640041bc8b080b0438ffffff", "report": { "imports": [ "bigIntAdd", - "bigIntGetCallValue", "bigIntGetUnsignedArgument", "bigIntSetInt64", "bigIntSign", @@ -855,6 +854,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetLength", @@ -863,10 +863,11 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedAsyncCall", "managedCaller", "managedDeployFromSourceContract", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedGetOriginalTxHash", "managedOwnerAddress", "managedSignalError", @@ -880,12 +881,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/multisig.wasm", - "size": 13685, + "size": 13608, "hasAllocator": false, "hasPanic": "without message" } diff --git a/test/ping-pong-egld/output/ping-pong-egld.mxsc.json b/test/ping-pong-egld/output/ping-pong-egld.mxsc.json index 2f44af975..46337062b 100644 --- a/test/ping-pong-egld/output/ping-pong-egld.mxsc.json +++ b/test/ping-pong-egld/output/ping-pong-egld.mxsc.json @@ -1,11 +1,11 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "ping-pong-egld", @@ -13,7 +13,7 @@ }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -366,19 +366,19 @@ } } }, - "code": "0061736d01000000016c1360017f017f60000060027f7f017f60027f7f006000017f60017f0060037f7f7f0060047f7f7f7f017f60037f7f7f017f60017f017e6000017e60047f7f7f7f0060027f7e0060017e0060057f7f7e7f7f017f60057f7f7f7e7f0060027f7f017e60027e7f0060037f7e7f0002ec062403656e760b7369676e616c4572726f72000303656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000203656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e76106d4275666665724765744c656e677468000003656e76126d427566666572417070656e644279746573000803656e760d6d616e6167656443616c6c6572000503656e76106d616e61676564534341646472657373000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e7612626967496e7447657443616c6c56616c7565000503656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e76126d427566666572476574417267756d656e74000203656e760f6765744e756d417267756d656e7473000403656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e760f6d4275666665725365744279746573000803656e76096d4275666665724571000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76146d427566666572436f707942797465536c696365000703656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e616765645472616e7366657256616c756545786563757465000e03656e760f6d616e6167656457726974654c6f67000303656e7611676574426c6f636b54696d657374616d70000a03656e760e636865636b4e6f5061796d656e74000103656e7609626967496e74436d70000203656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365000f03656e7618626967496e7447657445787465726e616c42616c616e6365000303656e7609626967496e74416464000603656e760a6765744761734c656674000a03656e760666696e697368000303656e760d6d42756666657246696e697368000003656e7614626967496e7446696e697368556e7369676e6564000503656e76136d42756666657247657442797465536c6963650007034746000402000403000304040007000b0605050501050903000000020200000002030b06100000000302000603000c04040404040303110c1204010105010101010101010101010105030100030616037f01418080080b7f00418d86080b7f00419086080b07e60111066d656d6f7279020004696e6974005c0775706772616465005c0470696e67005d04706f6e67005f07706f6e67416c6c00601067657455736572416464726573736573006110676574436f6e7472616374537461746500620d67657450696e67416d6f756e7400630b676574446561646c696e6500641667657441637469766174696f6e54696d657374616d7000650b6765744d617846756e647300660d6765745573657253746174757300670f706f6e67416c6c4c6173745573657200680863616c6c4261636b00690a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01030ae722460f01017f10012201200010021a20010b08004101410010260b1101017f1028220220002001100f1a20020b0c00200010282200100320000b1901017f41c4850841c4850828020041016b220036020020000b5501027f230041106b2202240020022000102a22031004220041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410051a2001200310021a200241106a24000b0f01017f10282201200010111a20010b0900200020011000000b0c01017f10282200100620000bdb0101037f230041106b220024004102102e450440415a10080b02400240027f024002400240415a10044104760e020102000b41b28008411d1000000b415d4101102e0d011a415d1009415d0c010b200041086a420037030020004200370300415a410020004110102f0d01200028020c21012000280200220241187420024180fe03714108747220024108764180fe0371200241187672721030450d02200141187420014180fe03714108747220014108764180fe0371200141187672720b200041106a24000f0b41c28108411d1000000b418d800841251000000b2b01027f2000418c86082d0000220171200041ff0171462202450440418c860820002001723a00000b20020b0f00200020012003200210234100470b1600415841ff8108410b100f1a41582000101041004a0b2e01017f41cf80084117102622042000200110051a200441e68008410310051a20042002200310051a2004100a000b3201017f20002802002000280204220320012002102f044041c78208411841b38108410f1031000b2000200220036a3602040b19004188860828020020004c04400f0b41fa800841121000000b1400100d20004604400f0b418c810841191000000b19002000418886082802004c04400f0b41e9800841111000000b0b0041888608100d3602000b080020001038100e0b08002000200010460b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410051a200241106a24000b0d0020001028220010121a20000b0d0020001028220010131a20000b0d002000416710131a416710040b0a0020002001103e103f0b1a00200010242200418a8208410e10051a2000200110021a20000b2401017e20002000104622014280808080105a0440200041a58108410e1045000b2001a70b080020001041103f0b130020001024220041988208410610051a20000b1900200010242200419e8208410e10051a20002001103920000b900201047f230041106b2202240020022001103b22041004220336020820024100360204200220043602000240024020030440200241003a000c20022002410c6a410120011044024002400240024020022d000c0e020002010b200228020421030c020b200141808008410d1045000b2002410036020c20022002410c6a410420011044200228020c2103200228020421051001210420022802002005200341187420034180fe03714108747220034108764180fe0371200341187672722203200410140d02200320056a2103410121052004103a21040b20022802082003470d020b2000200436020420002005360200200241106a24000f0b200141b38108410f1045000b200141a58108410e1045000b2e01017f20002802002000280204220420012002102f0440200341b38108410f1045000b2000200220046a3602040b2c01017f41ac8208411b10262203200010021a200341e68008410310051a20032001200210051a2003100a000ba30102017e027f230041106b22032400200342003703082000103b22041004220041094f0440200141a58108410e1045000b20044100200320006b41106a2000102f1a20032903082102200341106a2400200242388620024280fe0383422886842002428080fc0783421886200242808080f80f834208868484200242088842808080f80f832002421888428080fc07838420024228884280fe038320024238888484840b4201017e2000103c45044041000f0b02402000200010462201428002540440200142035a0d012001a70f0b200041a58108410e1045000b200041808008410d1045000b08002000103b103a0b090010251a2000102a0b0d0010251a20002001102410390b1201017f10252202200020011026103920020b1f01017f2000103b220110044120470440200041b2840841101045000b20010b0d00200020012002102610151a0ba20101047f41e6820821024118210302400240024002402001104f104741ff017141016b0e020001030b2001104f42021050410c21031051200110422201103c0d0141fe820821020c020b418a83082102411121030c010b410021022001104c2101105210482104416741014100100f1a2001200442001025416710161a41cc8408410a104b22052001104a20052004104910170b20002003360204200020023602000b1401017f41e48408410a102622012000103920010b2d01017f230041106b2202240020022001200241086a105a200020022802002002280204104d200241106a24000b0a0041e08408410410260b0a0041d68408410a10260b0a00419e8508410810260b0a00418b8508411310260b0a0041a68508410810260b2701017f230041106b22022400200220013a000f20002002410f6a410110051a200241106a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a4104102f1a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810051a200241106a24000b2e01017f230041106b2202240020022001200241086a105a200020022802002002280204100f1a200241106a24000bf10102027f017e2002200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822054280fe038320014238888484843700002000410841002001428080808080808080015422032001423088a741ff01711b220420036a410020042005a741ff01711b22036a410020032001422088a741ff01711b22036a410020032001a722034118761b22046a41002004200341107641ff01711b22046a41002004200341087641ff01711b22036a200341002001501b6a22036b3602042000200220036a3602000b0a0041fc8408410f10260bff0302067f037e230041206b2201240010191036410310354100102721054101100b2108200141106a2103230041206b22002400410210282204100c1a2000200410042202360214200041003602102000200436020c02402002450d00200041003a00182000410c6a200041186a4101103202400240024020002d00180e020201000b41c78208411841808008410d1031000b200042003703182000410c6a200041186a410810322000290318220642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe038320064238888484842106420121070b20002802142000280210460d0041c78208411841a58108410e1031000b2003200637030820032007370300200041206a240020012903182106200129031020014103360210200141086a210041002104024020032802002202418886082802004e0440410121040c010b2003200241016a3602002002102721030b2000200336020420002004360200200128020c2103200128020821022001280210103310522005102a10151aa7410171450440101821060b1053200620087c105010542006105010552105024020024504404101410010262202410110562003200210292005200210151a0c010b200541014100104d0b200141206a24000b920302077f017e230041106b22032400102d1a1036410010352003410c6a41888608280200360200200328020c103302400240102d220510521048101a45044010182107105410382007560d01105310382007580d022003105510430240024002400240200328020041017104402003280204210641ff8108410b10262200103021041028220110072001210210282101024020044504402000100421042002105e200041e88508101b1a41c8850841e88508200442002001101c0c010b2002105e41c885082001101d0b1028220020012005101e20002006101a41004a0d010b102c2101105122002001103d220245044020001040210220001041200241016a2202ad2207105020002001103e20071050200020021042200110151a0b2002104f104741ff017141016b0e020102030b41ef83084113102b000b418284084112102b000b418a83084111102b000b2002104f4201105041c28408410a104b22002001104a2000200510491017200341106a24000f0b419b83084124102b000b41bf8308411d102b000b41dc83084113102b000b0b00200041c88508101b1a0b5501027f230041106b2200240010194100103402401018105310385a0440102c2101200041086a10512001103d104e200028020822010d01200041106a24000f0b41948408411e102b000b2001200028020c102b000bd80102057f027e230041106b22042400101941001034027f024010182206105310385a0440105110402101105b103f22002001200020014b1b2101034020002001460d02101f42c08db7015a0440200441086a200041016a2200104e0c010b0b105b2000ad2205105041b785082103410b0c020b41948408411e102b000b105b4200105041ae8508210341090b210141ee8408410e104b210010252202200610592000200210391025220220032001100f1a2000200210391025220220051059200020021039200010251017200320011020200441106a24000be50201077f230041206b220024001019410010341051220610402103102521044101210103402005200120034b72450440027f2006200110422202103c45044041df8108412010260c010b2002104c0b2102200120034f2105200120012003496a21012000200241187420024180fe03714108747220024108764180fe03712002411876727236020c20042000410c6a410410051a0c010b0b10252102200020041004360214200041003602102000200436020c03402000411b6a2000410c6a105720002d001b410147450440200028001c210110251a2002200141187420014180fe03714108747220014108764180fe037120014118767272102410390c010b0b200020021004360214200041003602102000200236020c03402000411b6a2000410c6a105720002d001b410147450440200028001c220141187420014180fe03714108747220014108764180fe03712001411876727210211a0c010b0b200041206a24000bae0102057f027e230041106b22012400101941001034105210481053103821051054103821062001105510432001280204210320012802002104105b103f21021025220010292005200010582006200010580240200441017104402000410110562003200010290c010b2000410010560b2001200241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001410c6a410410051a200010211a200141106a24000b0e001019410010341052104810220b0c00101941001034105310370b0c00101941001034105410370b4f01037f230041106b22002400101941001034200041086a10551043024020002802084101710440200028020c102522014101105620011029200110211a0c010b4101410010200b200041106a24000b3701017e1019410110344100100b22004280808080105a044041df8208410741a58108410e1031000b2000a7104f104741ff0171ad100e0b0f00101941001034105b103fad100e0b02000b0bbe050300418080080bdf01696e76616c69642076616c756566756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f206c6f6e67696e70757420746f6f2073686f72744d616e6167656456656320696e646578206f7574206f662072616e67650041ff81080bc30345474c442d3030303030305f616464726573735f746f5f69645f636f756e745f69645f746f5f6164647265737373746f72616765206465636f6465206572726f7220286b65793a206f70745f61637469766174696f6e5f74696d657374616d70757365725f696463616e277420706f6e672c206e657665722070696e676564756e6b6e6f776e2075736572616c72656164792077697468647261776e746865207061796d656e74206d757374206d61746368207468652066697865642073756d736d61727420636f6e7472616374206e6f742061637469766520796574646561646c696e652068617320706173736564736d61727420636f6e74726163742066756c6c63616e206f6e6c792070696e67206f6e636563616e2774207769746864726177206265666f726520646561646c696e65626164206172726179206c656e67746870696e675f6576656e74706f6e675f6576656e7470696e67416d6f756e747573657275736572537461747573706f6e675f616c6c5f6576656e74706f6e67416c6c4c6173745573657261637469766174696f6e54696d657374616d70646561646c696e656d617846756e6473636f6d706c65746564696e7465727275707465640041c485080b0438ffffff", + "code": "0061736d0100000001661260017f017f60000060027f7f017f60027f7f006000017f60017f0060027f7e0060017f017e60047f7f7f7f017f60037f7f7f0060047f7f7f7f0060037f7f7f017f6000017e60017e0060057f7f7e7f7f017f60057f7f7f7e7f0060027f7f017e60027e7f0002af072603656e760b7369676e616c4572726f72000303656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000203656e7619626967496e74476574556e7369676e6564417267756d656e74000303656e76106d4275666665724765744c656e677468000003656e76196d427566666572546f536d616c6c496e74556e7369676e6564000703656e76126d427566666572417070656e644279746573000b03656e760d6d616e6167656443616c6c6572000503656e76106d616e61676564534341646472657373000503656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000503656e760e626967496e74536574496e743634000603656e76126d616e616765645369676e616c4572726f72000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000703656e76126d427566666572476574417267756d656e74000203656e760f6765744e756d417267756d656e7473000403656e7616736d616c6c496e7446696e697368556e7369676e6564000d03656e760f6d4275666665725365744279746573000b03656e76096d4275666665724571000203656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76176d427566666572546f426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76146d427566666572436f707942797465536c696365000803656e761b6d42756666657246726f6d536d616c6c496e74556e7369676e6564000603656e76136d42756666657253746f7261676553746f7265000203656e761b6d616e616765645472616e7366657256616c756545786563757465000e03656e760f6d616e6167656457726974654c6f67000303656e7613676574426c6f636b54696d657374616d704d73000c03656e760e636865636b4e6f5061796d656e74000103656e7609626967496e74436d70000203656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365000f03656e7618626967496e7447657445787465726e616c42616c616e6365000303656e7609626967496e74416464000903656e760a6765744761734c656674000c03656e760666696e697368000303656e760d6d42756666657246696e697368000003656e7614626967496e7446696e697368556e7369676e6564000503656e76136d42756666657247657442797465536c6963650008034544000402000410000903000304040a000a09050505010507080300000202000000020000030a0003020006030004040404040303110604010105010101010101010101010105030100030616037f01418080080b7f0041ad86080b7f0041b086080b07e60111066d656d6f7279020004696e6974005c0775706772616465005c0470696e67005d04706f6e67005f07706f6e67416c6c00601067657455736572416464726573736573006110676574436f6e7472616374537461746500620d67657450696e67416d6f756e7400630b676574446561646c696e6500641667657441637469766174696f6e54696d657374616d7000650b6765744d617846756e647300660d6765745573657253746174757300670f706f6e67416c6c4c6173745573657200680863616c6c4261636b00690a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01030aa621440f01017f10012201200010021a20010b08004101410010280b1101017f102a22022000200110101a20020b0c002000102a2200100320000b1901017f41e4850841e4850828020041016b220036020020000b1f002000102c2200100441094f0440200141a58108410e102d000b200010050b0d002000102a220010141a20000b2c01017f41bf8208411b10282203200010021a200341e68008410310061a20032001200210061a2003100b000b5501027f230041106b2202240020022000102f22031004220041187420004180fe03714108747220004108764180fe03712000411876727236020c20012002410c6a410410061a2001200310021a200241106a24000b0f01017f102a2201200010121a20010b0900200020011000000b0c01017f102a2200100720000bf50101037f230041106b2201240041ac86082d0000220041087145044041ac860820004108723a0000415910090b024002400240024002400240415910044104760e020201000b41b28008411d1000000b200141086a42003703002001420037030041591004410f4d0d0241594100200141101033200128020c21002001280200220241187420024180fe03714108747220024108764180fe03712002411876727210340d01418d800841251000000b415d2100415d4200100a0c020b200041187420004180fe03714108747220004108764180fe03712000411876727221000c010b41d58108411d1000000b200141106a240020000b1a002000200120022003103d4504400f0b41c2810841131000000b1600415841928208410b10101a41582000101141004a0b2e01017f41cf80084117102822042000200110061a200441e68008410310061a20042002200310061a2004100b000b3d01017f2000280208200028020422036b200249044041da8208411841b38108410f1035000b200028020020032001200210332000200220036a3602040b190041a8860828020020004c04400f0b41fa800841121000000b1400100e20004604400f0b418c810841191000000b1900200041a886082802004c04400f0b41e9800841111000000b0b0041a88608100e3602000b08002000103c100f0b080020002000102b0b0f00200020012003200210254100470b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a410410061a200241106a24000b0d002000102a220010131a20000b0d002000416710141a416710040b0a0020002001104210430b1a00200010262200419d8208410e10061a2000200110021a20000b2401017e20002000102b22014280808080105a0440200041d58408410e102d000b2001a70b08002000104510430b130020001026220041ab8208410610061a20000b190020001026220041b18208410e10061a20002001103e20000b08002000102c103f0b4201017e2000104045044041000f0b024020002000102b2201428002540440200142035a0d012001a70f0b200041d58408410e102d000b200041808008410d102d000b9e0201057f230041106b2202240020022001102c22031004220436020820024100360204200220033602000240024020040440200241003a000c20022002410c6a41012001104a024002400240024020022d000c0e020002010b200228020421040c020b200141808008410d102d000b2002410036020c20022002410c6a41042001104a200228020c21032002280204220520022802002206100422044b0d0220042005200341187420034180fe03714108747220034108764180fe03712003411876727222036a2204490d022006200520031001220310150d02410121052003103f21030b20022802082004470d020b2000200336020420002005360200200241106a24000f0b200141b38108410f102d000b200141d58408410e102d000b3901017f2000280208200028020422046b2002490440200341b38108410f102d000b200028020020042001200210332000200220046a3602040b090010271a2000102f0b0d0010271a200020011026103e0b1201017f10272202200020011028103e20020b1f01017f2000102c220110044120470440200041c584084110102d000b20010b0f004167200110162000416710171a0b950101037f41f98208210241182103024002400240024020011051104841ff017141016b0e020001030b200110514202104f410c2103105220011046220110400d014191830821020c020b419d83082102411121030c010b2001104e220110531047220242001027102710181a41ed8408410a104d22042001104c20042002104b1019410021020b20002003360204200020023602000b1401017f41858508410a102822012000103e20010b0a0041818508410410280b0a0041f78408410a10280b0a0041bf8508410810280b0a0041ac8508411310280b0a0041c78508410810280b2701017f230041106b22022400200220013a000f20002002410f6a410110061a200241106a24000b5a01037f230041106b22022400200020012802042203200128020849047f2002410036020c200128020020032002410c6a4104103d1a2001200341046a3602042000200228020c36000141010541000b3a0000200241106a24000b7801017f230041106b220224002002200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082001200241086a410810061a200241106a24000bff0102027f017e230041106b220324002003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc078384200142288822044280fe03832001423888848484370308200041002001428080808080808080015422002001423088a741ff01711b220220006a410020022004a741ff01711b22006a410020002001422088a741ff01711b22006a410020002001a722004118761b22026a41002002200041107641ff01711b22026a41002002200041087641ff01711b22006a200041002001501b6a2200200341086a6a410820006b10101a200341106a24000b0a00419d8508410f10280bf00302067f037e230041206b22012400101b103a410310394100102921054101100c2108200141106a2103230041206b220024004102102a2202100d1a2000200210042204360214200041003602102000200236020c02402004450d00200041003a00182000410c6a200041186a4101103602400240024020002d00180e020201000b41da8208411841808008410d1035000b200042003703182000410c6a200041186a410810362000290318220642388620064280fe0383422886842006428080fc0783421886200642808080f80f834208868484200642088842808080f80f832006421888428080fc07838420064228884280fe038320064238888484842106420121070b20002802142000280210460d0041da8208411841d58408410e1035000b2003200637030820032007370300200041206a240020012903182106200129031020014103360210200141086a21004100210202402003280200220441a886082802004e0440410121020c010b2003200441016a3602002004102921030b2000200336020420002002360200200128020c2103200128020821042001280210103710532005102f10171aa7410171450440101a21060b1054200620087c104f10552006104f10564101410010282102200445044020024101105720032002102e0b200210171a200141206a24000b920302077f017e230041106b2203240010321a103a410010392003410c6a41a88608280200360200200328020c1037024002401032220510531047101c450440101a21071055103c2007560d011054103c2007580d022003105610490240024002400240200328020041017104402003280204210641928208410b1028220010342104102a2201100820012102102a2101024020044504402000100421042002105e200041888608101d1a41e8850841888608200442002001101e0c010b2002105e41e885082001101f0b102a220020012005102020002006101c41004a0d010b103121011052220020011041220245044020001044210220001045200241016a2202ad2207104f2000200110422007104f200020021046200110171a0b20021051104841ff017141016b0e020102030b4182840841131030000b4195840841121030000b419d830841111030000b200210514201104f41e38408410a104d22002001104c20002005104b1019200341106a24000f0b41ae830841241030000b41d28308411d1030000b41ef830841131030000b0b00200041e88508101d1a0b5501027f230041106b22002400101b410010380240101a1054103c5a044010312101200041086a1052200110411050200028020822010d01200041106a24000f0b41a78408411e1030000b2001200028020c1030000bd80102057f027e230041106b22042400101b41001038027f0240101a22061054103c5a0440105210442101105b104322002001200020014b1b2101034020002001460d02102142c08db7015a0440200441086a200041016a220010500c010b0b105b2000ad2205104f41d885082103410b0c020b41a78408411e1030000b105b4200104f41cf8508210341090b2101418f8508410e104d2100102722022006105a20002002103e102722022003200110101a20002002103e102722022005105a20002002103e200010271019200320011022200441106a24000be50201077f230041206b22002400101b410010381052220610442103102721044101210103402005200120034b72450440027f2006200110462202104045044041f28108412010280c010b2002104e0b2102200120034f2105200120012003496a21012000200241187420024180fe03714108747220024108764180fe03712002411876727236020c20042000410c6a410410061a0c010b0b10272102200020041004360214200041003602102000200436020c03402000411b6a2000410c6a105820002d001b410147450440200028001c210110271a2002200141187420014180fe03714108747220014108764180fe0371200141187672721026103e0c010b0b200020021004360214200041003602102000200236020c03402000411b6a2000410c6a105820002d001b410147450440200028001c220141187420014180fe03714108747220014108764180fe03712001411876727210231a0c010b0b200041206a24000bae0102057f027e230041106b22012400101b41001038105310471054103c21051055103c21062001105610492001280204210320012802002104105b1043210210272200102e20052000105920062000105902402004410171044020004101105720032000102e0c010b2000410010570b2001200241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001410c6a410410061a200010231a200141106a24000b0e00101b410010381053104710240b0c00101b410010381054103b0b0c00101b410010381055103b0b4f01037f230041106b22002400101b41001038200041086a10561049024020002802084101710440200028020c10272201410110572001102e200110231a0c010b4101410010220b200041106a24000b3701017e101b410110384100100c22004280808080105a044041f28208410741d58408410e1035000b2000a71051104841ff0171ad100f0b0f00101b41001038105b1043ad100f0b02000b0bdf050300418080080bf201696e76616c69642076616c756566756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273617267756d656e74206465636f6465206572726f722028293a20746f6f2066657720617267756d656e7473746f6f206d616e7920617267756d656e747377726f6e67206e756d626572206f6620617267756d656e747376616c756520746f6f206c6f6e67696e70757420746f6f2073686f7274736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676500419282080bd10345474c442d3030303030305f616464726573735f746f5f69645f636f756e745f69645f746f5f6164647265737373746f72616765206465636f6465206572726f7220286b65793a206f70745f61637469766174696f6e5f74696d657374616d70757365725f696463616e277420706f6e672c206e657665722070696e676564756e6b6e6f776e2075736572616c72656164792077697468647261776e746865207061796d656e74206d757374206d61746368207468652066697865642073756d736d61727420636f6e7472616374206e6f742061637469766520796574646561646c696e652068617320706173736564736d61727420636f6e74726163742066756c6c63616e206f6e6c792070696e67206f6e636563616e2774207769746864726177206265666f726520646561646c696e65626164206172726179206c656e677468696e70757420746f6f206c6f6e6770696e675f6576656e74706f6e675f6576656e7470696e67416d6f756e747573657275736572537461747573706f6e675f616c6c5f6576656e74706f6e67416c6c4c6173745573657261637469766174696f6e54696d657374616d70646561646c696e656d617846756e6473636f6d706c65746564696e7465727275707465640041e485080b0438ffffff", "report": { "imports": [ "bigIntAdd", "bigIntCmp", "bigIntFinishUnsigned", - "bigIntGetCallValue", "bigIntGetESDTExternalBalance", "bigIntGetExternalBalance", "bigIntGetUnsignedArgument", + "bigIntSetInt64", "checkNoPayment", "finish", - "getBlockTimestamp", + "getBlockTimestampMs", "getGasLeft", "getNumArguments", "mBufferAppend", @@ -387,6 +387,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntUnsigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", @@ -396,8 +397,9 @@ "mBufferStorageLoad", "mBufferStorageStore", "mBufferToBigIntUnsigned", + "mBufferToSmallIntUnsigned", "managedCaller", - "managedGetMultiESDTCallValue", + "managedGetAllTransfersCallValue", "managedSCAddress", "managedSignalError", "managedTransferValueExecute", @@ -408,12 +410,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/ping-pong-egld.wasm", - "size": 6498, + "size": 6397, "hasAllocator": false, "hasPanic": "None" } diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping-after-deadline.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping-after-deadline.scen.json index 8d27b65e4..e81f26cc3 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping-after-deadline.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping-after-deadline.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-activation.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-activation.scen.json index 37490334e..aef173778 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-activation.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-activation.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "779" + "blockTimestampMs": "779" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-beginning.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-beginning.scen.json index 862f55210..92183f360 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-beginning.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping-before-beginning.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "779" + "blockTimestampMs": "779" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping-second-user.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping-second-user.scen.json index fc9af8b7f..445256c0d 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping-second-user.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping-second-user.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "781" + "blockTimestampMs": "781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping-twice.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping-twice.scen.json index 6b36e5120..817fc79d9 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping-twice.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping-twice.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,001" + "blockTimestampMs": "123,001" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-ping.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-ping.scen.json index 78c5b08bd..071c08693 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-ping.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-ping.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "781" + "blockTimestampMs": "781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-after-pong.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-after-pong.scen.json index 3575a5f29..c09666dbb 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-after-pong.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-after-pong.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-1.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-1.scen.json index 2ab1990c8..2a518af15 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-1.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-1.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-2.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-2.scen.json index baf175301..cf5cdf915 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-2.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all-interrupted-2.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all.scen.json index 58cbe3ccf..51882994d 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-all.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-all.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-before-deadline.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-before-deadline.scen.json index 60c4610d3..526fb8e6f 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-before-deadline.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-before-deadline.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,000" + "blockTimestampMs": "123,000" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong-without-ping.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong-without-ping.scen.json index 5a78c1095..3fb50a761 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong-without-ping.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong-without-ping.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/ping-pong-egld/scenarios/ping-pong-call-pong.scen.json b/test/ping-pong-egld/scenarios/ping-pong-call-pong.scen.json index f7540b9a2..3ac8d03a4 100644 --- a/test/ping-pong-egld/scenarios/ping-pong-call-pong.scen.json +++ b/test/ping-pong-egld/scenarios/ping-pong-call-pong.scen.json @@ -9,7 +9,7 @@ { "step": "setState", "currentBlockInfo": { - "blockTimestamp": "123,781" + "blockTimestampMs": "123,781" } }, { diff --git a/test/wegld-swap/output/multiversx-wegld-swap-sc.mxsc.json b/test/wegld-swap/output/multiversx-wegld-swap-sc.mxsc.json index 712a43f16..f56a89152 100644 --- a/test/wegld-swap/output/multiversx-wegld-swap-sc.mxsc.json +++ b/test/wegld-swap/output/multiversx-wegld-swap-sc.mxsc.json @@ -1,19 +1,19 @@ { "buildInfo": { "rustc": { - "version": "1.87.0", - "commitHash": "17067e9ac6d7ecb70e50f92c1944e545188d2359", - "commitDate": "2025-05-09", + "version": "1.89.0", + "commitHash": "29483883eed69d5fb4db01964cdf2af4d86e9cb2", + "commitDate": "2025-08-04", "channel": "Stable", - "short": "rustc 1.87.0 (17067e9ac 2025-05-09)" + "short": "rustc 1.89.0 (29483883e 2025-08-04)" }, "contractCrate": { "name": "multiversx-wegld-swap-sc", - "version": "0.59.0" + "version": "0.62.0" }, "framework": { "name": "multiversx-sc", - "version": "0.59.0" + "version": "0.62.0" } }, "abi": { @@ -129,13 +129,12 @@ } } }, - "code": "0061736d0100000001601060017f017f60000060027f7f017f60027f7f006000017f60017f0060037f7f7f0060037f7f7f017f60047f7f7f7f0060057f7f7e7f7f017f60047f7f7f7f017f60027f7e006000017e60067e7f7f7f7f7f017f60057f7f7f7e7f0060017e0002f8062503656e760e626967496e74536574496e743634000b03656e7609626967496e74416464000603656e760b7369676e616c4572726f72000303656e760a6d4275666665724e6577000403656e760d6d427566666572417070656e64000203656e760d6d616e6167656443616c6c6572000503656e76106d616e61676564534341646472657373000503656e76136d616e616765644f776e657241646472657373000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e7612626967496e7447657443616c6c56616c7565000503656e76126d427566666572417070656e644279746573000703656e76126d616e616765645369676e616c4572726f72000503656e76126d427566666572476574417267756d656e74000203656e760f6765744e756d417267756d656e7473000403656e760f6d4275666665725365744279746573000703656e760a6765744761734c656674000c03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000d03656e760f636c65616e52657475726e44617461000103656e76106d4275666665724765744c656e677468000003656e76196d42756666657246726f6d426967496e74556e7369676e6564000203656e76126d42756666657253746f726167654c6f6164000203656e76136d42756666657253746f7261676553746f7265000203656e760f6d4275666665724765744279746573000203656e761c626967496e744765744553445445787465726e616c42616c616e6365000e03656e7618626967496e7447657445787465726e616c42616c616e6365000303656e760a626967496e745369676e000003656e760e636865636b4e6f5061796d656e74000103656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000903656e760d6d42756666657246696e697368000003656e7609626967496e74436d70000203656e7614626967496e7446696e697368556e7369676e6564000503656e760666696e697368000303656e760f6d616e6167656457726974654c6f67000303656e7614736d616c6c496e7446696e6973685369676e6564000f03656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000203656e761b6d616e616765645472616e7366657256616c756545786563757465000903353400040003040102040004000203000200030508040003080303070a0400000600020603050401040500040101080101010101010105030100030616037f01418080080b7f00419585080b7f0041a085080b079b010c066d656d6f7279020004696e6974004f087772617045676c6400500a756e7772617045676c640052146765744c6f636b656445676c6442616c616e63650053156765745772617070656445676c64546f6b656e49640054057061757365005507756e7061757365005608697350617573656400570863616c6c4261636b00580a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020adf16341601017f1026220142001000200120012000100120010b1901017f41d0840841d0840828020041016b220036020020000b0f01017f10032201200010041a20010b0900200020011002000b0c01017f10262200100520000b1d01017f10262200100720001029102b04400f0b41ab840841241002000b0b0020002001102341004a0b10004102102d450440415a10080b415a0b2b01027f2000419485082d0000220171200041ff01714622024504404194850820002001723a00000b20020b900101027f230041306b220024000240024002400240102c2201102f0e020102000b41fb8008411d1002000b415d21014101102d0d01415d10090c010b200041286a4200370300200042003703202001200041206a220110300440200041106a20011031200028021c2101200028021810320d0141d6800841251002000b41fe8108411d1002000b200041306a240020010b0900200010124104760b0d00200020014110103e4101730bb90102017f017e2000200128000c220241187420024180fe03714108747220024108764180fe03712002411876727236020c20002001280000220241187420024180fe03714108747220024108764180fe03712002411876727236020820002001290004220342388620034280fe0383422886842003428080fc0783421886200342808080f80f834208868484200342088842808080f80f832003421888428080fc07838420034228884280fe038320034238888484843703000b1300415841988108410b100e1a41582000102b0b1101017f1026220220002001100e1a20020b4901017f230041106b220124000240200010124104470d002001410036020c200041002001410c6a4104103f1a200128020c41c58eb1a204470d00104021000b200141106a240020000b1b01017f20011032210220002001360204200020024101733602000b1400100d20004604400f0b41bd810841191002000b1e0010381a200220032802001039103a20002002360204200020013602000b08004101410010330b0f01017f10262201200010131a20010b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100a1a200241106a24000b4001017f103821040240200328020010324504402003280200102721040c010b2004419b82084104100e1a0b20022004103a20002002360204200020013602000b18002001410d1033210120001038360204200020013602000b1f01017e100f416210064176420010004162417620002001102610101a10110b0c002000410020012002103f0b0f00200020012003200210224100470b0a0041988108410b10330b0d0020001026220010141a20000bc80102017e037f230041106b22022400200242003703082000104122041012220341094904402004200220036b41106a2003103e1a027f02402002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484220184420158044041002001a741016b0d021a0c010b200041c7820841121043000b41010b200241106a24000f0b200041f08108410e1043000b2c01017f419f8208411b10332203200010041a200341ba81084103100a1a200320012002100a1a2003100b000b3d01017f230041106b22012400200141086a20001041103410352001280208410171450440200041ba8208410d1043000b200128020c200141106a24000b1201017f10382202200020011033103a20020b0d00200020012002103310151a0b5101027f230041106b22022400200220001012220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100a1a2001200010041a200241106a24000b5401027f230041106b2201240010492001410036000b20014100360208200120003a000f4107410820001b2200200141086a22022000410771722c00004107756a220020026a410820006b1046200141106a24000b0a0041898408411310330b120010491042044041d9820841121028000b0b5001047f10402202103210262200100620002103102621004504402002101221012003104c200241f4840810161a41d4840841f48408200142002000101720000f0b2003104c41d484082000101820000b0b00200041d4840810161a0b09002000101941004a0b0a0041ea8308411210330b8d0101027f101a41011036230041106b22002400410010262201100c1a200041086a200110341035200028020841017145044041a3810841171033220041d583084115100a1a200041ba81084103100a1a200041ba8208410d100a1a2000100b000b200028020c200041106a24002100104e2101200010324504402001200010151a0f0b2001419b8208410410460bdd0301087f230041d0006b22002400102e1a41001036104a2000102e2204360220024002402004104d04402000104e10442205360224200041186a41e38108103c200041106a2000280218200028021c200041246a103b200041086a20002802102000280214200041206a10372000280208200028020c103d416210051038210610382107103821012005102721022004102521032000420037022c2000200241187420024180fe03714108747220024108764180fe0371200241187672723602282000200341187420034180fe03714108747220034108764180fe0371200341187672723602342001200041286a4110100a1a20011012450d01200041c8006a42003703002000420037034002402001102f4101470d002001200041406b220210301a200041306a20021031200028023c210220002802381032450d00416220022006200710510c030b41622001420020062007101b1a0c020b41ba8308411b1028000b1026220142001000416220012006200710510b2004102541014100103321010240200510324504402005200110470c010b200041808080203602282001200041286a4104100a1a2001419b82084104100a1a0b200042003703282001200041286a4108100a1a1039200110472001101c1a200041d0006a24000b0f002000200142002002200310241a0be20301057f230041306b2200240041001036104a102c210102404104102d0d00415841988108410b100e1a2001101221040340200220044f0d01200041286a42003703002000420037032020012002200041206a4110103f1a200241106a210241582000280220220341187420034180fe03714108747220034108764180fe037120034118767272102b450d000b41a2800841181002000b0240200110124170714110460440200041286a4200370300200042003703202001200041206a4110103e450d0141fe8108411d1002000b4180800841221002000b0240024002402000290224500440200028022021022000200028022c220141187420014180fe03714108747220014108764180fe037120014118767272220136021c2000104e10442203360220200241187420024180fe03714108747220024108764180fe0371200241187672722003102b450d012001104d450d022001104b101d41004a0d03200041106a41d68108103c200041086a20002802102000280214200041206a103b20002000280208200028020c2000411c6a103720002802002000280204103d1029416741014100100e1a2001103841671051200041306a24000f0b41ba8008411c1002000b41eb820841101028000b41fb8208411c1028000b4197830841231028000b0c00101a41001036104b101e0b2401017f101a41001036104e1044220010324504402000101c1a0f0b419b82084104101f0b1a00101a102a410010364101104841fc8308410d1045103810200b1a00101a102a4100103641001048419c8408410f1045103810200b0f00101a4100103610491042ad10210b02000b0be3040200418080080bcf04696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4275726e455344544c6f63616c4d696e74696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e676545474c4473746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564696e707574206f7574206f662072616e6765436f6e74726163742069732070617573656457726f6e67206573647420746f6b656e4d75737420706179206d6f7265207468616e203020746f6b656e7321436f6e747261637420646f6573206e6f74206861766520656e6f7567682066756e64735061796d656e74206d757374206265206d6f7265207468616e2030777261707065645f65676c645f746f6b656e5f69647772617070656445676c64546f6b656e49647061757365436f6e747261637470617573655f6d6f64756c653a706175736564756e7061757365436f6e7472616374456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e65720041d084080b0438ffffff", + "code": "0061736d0100000001651160017f017f60000060027f7f0060027f7f017f60017f006000017f60027f7e0060037f7f7f0060037f7f7f017f60057f7f7e7f7f017f60047f7f7f7f017f60047f7f7f7f006000017e60067e7f7f7f7f7f017f60017f017e60057f7f7f7e7f0060017e0002c5072703656e760e626967496e74536574496e743634000603656e7609626967496e74416464000703656e760b7369676e616c4572726f72000203656e760a6d4275666665724e6577000503656e760d6d427566666572417070656e64000303656e760d6d616e6167656443616c6c6572000403656e76106d616e61676564534341646472657373000403656e76136d616e616765644f776e657241646472657373000403656e761f6d616e61676564476574416c6c5472616e736665727343616c6c56616c7565000403656e76106d4275666665724765744c656e677468000003656e76126d427566666572417070656e644279746573000803656e76126d616e616765645369676e616c4572726f72000403656e76126d427566666572476574417267756d656e74000303656e760f6765744e756d417267756d656e7473000503656e760f6d4275666665725365744279746573000803656e760a6765744761734c656674000c03656e761b6d616e61676564457865637574654f6e44657374436f6e74657874000d03656e760f636c65616e52657475726e44617461000103656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76196d427566666572546f536d616c6c496e74556e7369676e6564000e03656e76196d42756666657246726f6d536d616c6c496e745369676e6564000603656e76136d42756666657253746f7261676553746f7265000303656e760f6d4275666665724765744279746573000303656e761c626967496e744765744553445445787465726e616c42616c616e6365000f03656e7618626967496e7447657445787465726e616c42616c616e6365000203656e760a626967496e745369676e000003656e760e636865636b4e6f5061796d656e74000103656e76226d616e616765644d756c74695472616e73666572455344544e465445786563757465000903656e760d6d42756666657246696e697368000003656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000403656e7609626967496e74436d70000303656e761b6d616e616765645472616e7366657256616c756545786563757465000903656e7614626967496e7446696e697368556e7369676e6564000403656e760666696e697368000203656e760f6d616e6167656457726974654c6f67000203656e7614736d616c6c496e7446696e6973685369676e6564001003656e76136d42756666657247657442797465536c696365000a03656e76096d4275666665724571000303302f0005000205010305000200030002040b05020b0002020a05000007000302040501050400040501010101010101010105030100030616037f01418080080b7f0041a985080b7f0041b085080b079b010c066d656d6f7279020004696e6974004d087772617045676c64004e0a756e7772617045676c64004f146765744c6f636b656445676c6442616c616e63650050156765745772617070656445676c64546f6b656e49640051057061757365005207756e7061757365005308697350617573656400540863616c6c4261636b00550a5f5f646174615f656e6403010b5f5f686561705f6261736503020c01020ab9132f1601017f1028220142001000200120012000100120010b1901017f41e4840841e4840828020041016b220036020020000b0f01017f10032201200010041a20010b0900200020011002000b0c01017f10282200100520000b1d01017f1028220010072000102b102d04400f0b41be840841241002000b0b0020002001102641004a0bdd0101037f230041106b220124004108102f450440415910080b024002400240024002400240415910094104760e020201000b41fb8008411d1002000b200141086a42003703002001420037030041591009410f4d0d02415920011030200128020c21002001280200220241187420024180fe03714108747220024108764180fe03712002411876727210310d0141d6800841251002000b415d2100415d420010000c020b200041187420004180fe03714108747220004108764180fe03712000411876727221000c010b41918208411d1002000b200141106a240020000b2b01027f200041a885082d0000220171200041ff017146220245044041a8850820002001723a00000b20020b1a002000410020014110103d4504400f0b41fe810841131002000b1300415841988108410b100e1a41582000102d0b1101017f1028220220002001100e1a20020b4901017f230041106b220124000240200010094104470d002001410036020c200041002001410c6a4104103d1a200128020c41c58eb1a204470d00103e21000b200141106a240020000b1b01017f20011031210220002001360204200020024101733602000b1400100d20004604400f0b41bd810841191002000b4001017f103721040240200328020010314504402003280200102921040c010b200441ae82084104100e1a0b20022004103820002002360204200020013602000b08004101410010320b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100a1a200241106a24000b1e0010371a20022003280200103a103820002002360204200020013602000b0f01017f10282201200010121a20010b18002001410d1032210120001037360204200020013602000b1f01017e100f416210064176420010004162417620002001102810101a10110b0f00200020012003200210254100470b0a0041988108410b10320b0d0020001028220010131a20000b4c02017f017e2000103f220110094109490440027f0240200110142202420158044041002002a741016b0d021a0c010b200041da820841121041000b41010b0f0b200041f08108410e1041000b2c01017f41b28208411b10322203200010041a200341ba81084103100a1a200320012002100a1a2003100b000b3d01017f230041106b22012400200141086a2000103f103310342001280208410171450440200041cd8208410d1041000b200128020c200141106a24000b1201017f10372202200020011032103820020b5101027f230041106b22022400200220001009220341187420034180fe03714108747220034108764180fe03712003411876727236020c20012002410c6a4104100a1a2001200010041a200241106a24000b1201017f104641672000ad1015416710161a0b0a00419c8408411310320b120010461040044041ec82084112102a000b0b5001047f103e2202103110282200100620002103102821004504402002100921012003104920024188850810171a41e8840841888508200142002000101820000f0b2003104941e884082000101920000b0b00200041e8840810171a0b09002000101a41004a0b1601017f1037210120001037360204200020013602000b0a0041fd8308411210320b860101027f101b41011035230041106b22002400410010282201100c1a200041086a200110331034200028020841017145044041a3810841171032220041e883084115100a1a200041ba81084103100a1a200041cd8208410d100a1a2000100b000b200028020c200041106a24002100104c20001031047f41ae8208410410320520000b10161a0bf80201087f230041406a22002400102e1a4100103510472000102e22033602282003104a04402000104c1042220436022c200041206a41e38108103b200041186a200028022020002802242000412c6a1036200041106a2000280218200028021c200041286a103920002802102000280214103c41621005200041086a104b200028020c21062000280208210710372105200410292101200310272102200042003702342000200141187420014180fe03714108747220014108764180fe0371200141187672723602302000200241187420024180fe03714108747220024108764180fe03712002411876727236023c2005200041306a4110100a1a41622005420020072006101c1a2003102741014100103221010240200410314504402004200110440c010b200041808080203602302001200041306a4104100a1a200141ae82084104100a1a0b200042003703302001200041306a4108100a1a103a200110442001101d1a200041406b24000f0b41cd8308411b102a000bf70301057f230041406a220024004100103510474102102f450440415a101e0b02404104102f0d00415841988108410b100e1a415a100921030340200120034f0d01200041386a420037030020004200370330415a2001200041306a4110103d1a200141106a210141582000280230220241187420024180fe03714108747220024108764180fe037120024118767272102d450d000b41a2800841181002000b0240415a10094170714110460440200041386a420037030020004200370330415a1009410f4b0d0141918208411d1002000b4180800841221002000b415a200041306a220410300240024002402000290234500440200028023021012000200028023c220241187420024180fe03714108747220024108764180fe037120024118767272220236022c2000104c10422203360230200141187420014180fe03714108747220014108764180fe0371200141187672722003102d450d012002104a450d0220021048101f41004a0d03200041206a41d68108103b200041186a2000280220200028022420041036200041106a2000280218200028021c2000412c6a103920002802102000280214103c102b200041086a104b200242002000280208200028020c10201a200041406b24000f0b41ba8008411c1002000b41fe82084110102a000b418e8308411c102a000b41aa83084123102a000b0c00101b41001035104810210b2401017f101b41001035104c1042220010314504402000101d1a0f0b41ae8208410410220b1a00101b102c4100103541011045418f8408410d1043103710230b1a00101b102c410010354100104541af8408410f1043103710230b0f00101b4100103510461040ad10240b02000b0bf6040200418080080be204696e636f7272656374206e756d626572206f662045534454207472616e7366657273756e65787065637465642045474c44207472616e7366657266756e6769626c65204553445420746f6b656e20657870656374656466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e736665727345474c442d303030303030617267756d656e74206465636f6465206572726f722028293a2077726f6e67206e756d626572206f6620617267756d656e7473455344544c6f63616c4275726e455344544c6f63616c4d696e7476616c756520746f6f206c6f6e67736c696365206f7574206f6620626f756e64734d616e6167656456656320696e646578206f7574206f662072616e676545474c4473746f72616765206465636f6465206572726f7220286b65793a2045534454206578706563746564696e707574206f7574206f662072616e6765436f6e74726163742069732070617573656457726f6e67206573647420746f6b656e4d75737420706179206d6f7265207468616e203020746f6b656e7321436f6e747261637420646f6573206e6f74206861766520656e6f7567682066756e64735061796d656e74206d757374206265206d6f7265207468616e2030777261707065645f65676c645f746f6b656e5f69647772617070656445676c64546f6b656e49647061757365436f6e747261637470617573655f6d6f64756c653a706175736564756e7061757365436f6e7472616374456e64706f696e742063616e206f6e6c792062652063616c6c6564206279206f776e65720041e484080b0438ffffff", "report": { "imports": [ "bigIntAdd", "bigIntCmp", "bigIntFinishUnsigned", - "bigIntGetCallValue", "bigIntGetESDTExternalBalance", "bigIntGetExternalBalance", "bigIntSetInt64", @@ -150,6 +149,7 @@ "mBufferEq", "mBufferFinish", "mBufferFromBigIntUnsigned", + "mBufferFromSmallIntSigned", "mBufferGetArgument", "mBufferGetByteSlice", "mBufferGetBytes", @@ -158,8 +158,10 @@ "mBufferSetBytes", "mBufferStorageLoad", "mBufferStorageStore", + "mBufferToSmallIntUnsigned", "managedCaller", "managedExecuteOnDestContext", + "managedGetAllTransfersCallValue", "managedGetMultiESDTCallValue", "managedMultiTransferESDTNFTExecute", "managedOwnerAddress", @@ -172,12 +174,12 @@ ], "isMemGrow": false, "eiCheck": { - "eiVersion": "1.4", + "eiVersion": "1.5", "ok": true }, "codeReport": { "path": "../output/multiversx-wegld-swap-sc.wasm", - "size": 4770, + "size": 4444, "hasAllocator": false, "hasPanic": "None" } diff --git a/vmhost/asyncCall.go b/vmhost/asyncCall.go index 0f0151466..251e0cedb 100644 --- a/vmhost/asyncCall.go +++ b/vmhost/asyncCall.go @@ -38,11 +38,13 @@ func (ac *AsyncCall) Clone() *AsyncCall { ValueBytes: make([]byte, len(ac.ValueBytes)), SuccessCallback: ac.SuccessCallback, ErrorCallback: ac.ErrorCallback, + CallbackClosure: make([]byte, len(ac.CallbackClosure)), } copy(clone.Destination, ac.Destination) copy(clone.Data, ac.Data) copy(clone.ValueBytes, ac.ValueBytes) + copy(clone.CallbackClosure, ac.CallbackClosure) return clone } diff --git a/vmhost/asyncCallGroup.go b/vmhost/asyncCallGroup.go index be363d5a3..483bf6419 100644 --- a/vmhost/asyncCallGroup.go +++ b/vmhost/asyncCallGroup.go @@ -29,10 +29,11 @@ func NewAsyncCallGroup(identifier string) *AsyncCallGroup { func (acg *AsyncCallGroup) Clone() *AsyncCallGroup { callCount := len(acg.AsyncCalls) clone := &AsyncCallGroup{ - Callback: acg.Callback, - GasLocked: acg.GasLocked, - Identifier: acg.Identifier, - AsyncCalls: make([]*AsyncCall, callCount), + Callback: acg.Callback, + GasLocked: acg.GasLocked, + Identifier: acg.Identifier, + AsyncCalls: make([]*AsyncCall, callCount), + CallbackData: make([]byte, len(acg.CallbackData)), } copy(clone.CallbackData, acg.CallbackData) diff --git a/vmhost/asyncCallGroup_test.go b/vmhost/asyncCallGroup_test.go new file mode 100644 index 000000000..a988dbf52 --- /dev/null +++ b/vmhost/asyncCallGroup_test.go @@ -0,0 +1,182 @@ +package vmhost + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestNewAsyncCallGroup(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + require.NotNil(t, acg) + require.Equal(t, "group1", acg.Identifier) + require.Equal(t, "", acg.Callback) + require.Equal(t, uint64(0), acg.GasLocked) + require.Empty(t, acg.CallbackData) + require.Empty(t, acg.AsyncCalls) +} + +func TestAsyncCallGroup_Clone(t *testing.T) { + t.Parallel() + + acg := &AsyncCallGroup{ + Callback: "callback", + GasLocked: 1000, + CallbackData: []byte("callback_data"), + Identifier: "group1", + AsyncCalls: []*AsyncCall{ + {CallID: []byte("call1")}, + {CallID: []byte("call2")}, + }, + } + + clone := acg.Clone() + require.NotSame(t, acg, clone) + require.Equal(t, acg.Callback, clone.Callback) + require.Equal(t, acg.GasLocked, clone.GasLocked) + require.Equal(t, acg.Identifier, clone.Identifier) + + // Note: The original Clone implementation does not clone CallbackData, so this will fail. + // Let's assume the implementation is correct for now, and if the test fails, we'll fix the implementation. + // After checking the code, it seems `copy` on a nil slice does nothing. So we need to allocate it first. + // I will fix this in a later step if needed. For now, I'll write the test as if it works. + // require.Equal(t, acg.CallbackData, clone.CallbackData) + + require.Len(t, clone.AsyncCalls, 2) + require.NotSame(t, acg.AsyncCalls[0], clone.AsyncCalls[0]) + require.Equal(t, acg.AsyncCalls[0].CallID, clone.AsyncCalls[0].CallID) + require.Equal(t, acg.CallbackData, clone.CallbackData) + + // Check that changing the clone does not affect the original + clone.GasLocked = 2000 + require.NotEqual(t, acg.GasLocked, clone.GasLocked) +} + +func TestAsyncCallGroup_AddAsyncCall(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + ac := &AsyncCall{CallID: []byte("call1")} + acg.AddAsyncCall(ac) + + require.Len(t, acg.AsyncCalls, 1) + require.Equal(t, ac, acg.AsyncCalls[0]) +} + +func TestAsyncCallGroup_HasPendingCalls(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + require.False(t, acg.HasPendingCalls()) + + acg.AddAsyncCall(&AsyncCall{}) + require.True(t, acg.HasPendingCalls()) +} + +func TestAsyncCallGroup_IsComplete(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + require.True(t, acg.IsComplete()) + + acg.AddAsyncCall(&AsyncCall{}) + require.False(t, acg.IsComplete()) +} + +func TestAsyncCallGroup_HasCallback(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + require.False(t, acg.HasCallback()) + + acg.Callback = "callback" + require.True(t, acg.HasCallback()) +} + +func TestAsyncCallGroup_FindByDestination(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + dest1 := []byte("dest1") + dest2 := []byte("dest2") + acg.AddAsyncCall(&AsyncCall{Destination: dest1}) + + idx, ok := acg.FindByDestination(dest1) + require.True(t, ok) + require.Equal(t, 0, idx) + + idx, ok = acg.FindByDestination(dest2) + require.False(t, ok) + require.Equal(t, -1, idx) +} + +func TestAsyncCallGroup_DeleteAsyncCall(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + ac1 := &AsyncCall{CallID: []byte("call1")} + ac2 := &AsyncCall{CallID: []byte("call2")} + ac3 := &AsyncCall{CallID: []byte("call3")} + acg.AddAsyncCall(ac1) + acg.AddAsyncCall(ac2) + acg.AddAsyncCall(ac3) + + // Delete from the middle + acg.DeleteAsyncCall(1) + require.Len(t, acg.AsyncCalls, 2) + require.Equal(t, ac1, acg.AsyncCalls[0]) + require.Equal(t, ac3, acg.AsyncCalls[1]) + + // Delete from the end + acg.DeleteAsyncCall(1) + require.Len(t, acg.AsyncCalls, 1) + require.Equal(t, ac1, acg.AsyncCalls[0]) + + // Delete from the beginning + acg.DeleteAsyncCall(0) + require.Len(t, acg.AsyncCalls, 0) + + // Delete from empty + acg.DeleteAsyncCall(0) + require.Len(t, acg.AsyncCalls, 0) + + // Delete out of bounds + acg.AddAsyncCall(ac1) + acg.DeleteAsyncCall(1) + require.Len(t, acg.AsyncCalls, 1) + acg.DeleteAsyncCall(-1) + require.Len(t, acg.AsyncCalls, 1) +} + +func TestAsyncCallGroup_DeleteCompletedAsyncCalls(t *testing.T) { + t.Parallel() + + acg := NewAsyncCallGroup("group1") + ac1 := &AsyncCall{Status: AsyncCallPending} + ac2 := &AsyncCall{Status: AsyncCallResolved} + ac3 := &AsyncCall{Status: AsyncCallRejected} + ac4 := &AsyncCall{Status: AsyncCallPending} + + acg.AddAsyncCall(ac1) + acg.AddAsyncCall(ac2) + acg.AddAsyncCall(ac3) + acg.AddAsyncCall(ac4) + + acg.DeleteCompletedAsyncCalls() + + require.Len(t, acg.AsyncCalls, 2) + require.Equal(t, ac1, acg.AsyncCalls[0]) + require.Equal(t, ac4, acg.AsyncCalls[1]) +} + +func TestAsyncCallGroup_IsInterfaceNil(t *testing.T) { + t.Parallel() + + var acg *AsyncCallGroup + require.True(t, acg.IsInterfaceNil()) + + acg = &AsyncCallGroup{} + require.False(t, acg.IsInterfaceNil()) +} diff --git a/vmhost/asyncCall_test.go b/vmhost/asyncCall_test.go new file mode 100644 index 000000000..da165dac1 --- /dev/null +++ b/vmhost/asyncCall_test.go @@ -0,0 +1,150 @@ +package vmhost + +import ( + "testing" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/stretchr/testify/require" +) + +func TestAsyncCall_Clone(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{ + CallID: []byte("call_id"), + Status: AsyncCallPending, + ExecutionMode: SyncExecution, + Destination: []byte("destination"), + Data: []byte("data"), + GasLimit: 1000, + GasLocked: 2000, + ValueBytes: []byte("value"), + SuccessCallback: "success", + ErrorCallback: "error", + CallbackClosure: []byte("closure"), + } + + clone := ac.Clone() + require.NotSame(t, ac, clone) + require.Equal(t, ac, clone) + + // Check that changing the clone does not affect the original + clone.GasLimit = 500 + require.NotEqual(t, ac.GasLimit, clone.GasLimit) +} + +func TestAsyncCall_Getters(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{ + CallID: []byte("call_id"), + Destination: []byte("destination"), + Data: []byte("data"), + GasLimit: 1000, + GasLocked: 2000, + ValueBytes: []byte("value"), + SuccessCallback: "success", + ErrorCallback: "error", + } + + require.Equal(t, []byte("call_id"), ac.GetIdentifier()) + require.Equal(t, []byte("destination"), ac.GetDestination()) + require.Equal(t, []byte("data"), ac.GetData()) + require.Equal(t, uint64(1000), ac.GetGasLimit()) + require.Equal(t, uint64(2000), ac.GetGasLocked()) + require.Equal(t, uint64(3000), ac.GetTotalGas()) + require.Equal(t, []byte("value"), ac.GetValue()) +} + +func TestAsyncCall_IsLocalRemote(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{ExecutionMode: SyncExecution} + require.True(t, ac.IsLocal()) + require.False(t, ac.IsRemote()) + + ac.ExecutionMode = AsyncBuiltinFuncCrossShard + require.False(t, ac.IsLocal()) + require.True(t, ac.IsRemote()) + + ac.ExecutionMode = AsyncUnknown + require.False(t, ac.IsLocal()) + require.True(t, ac.IsRemote()) +} + +func TestAsyncCall_HasCallback(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{Status: AsyncCallResolved, SuccessCallback: "success"} + require.True(t, ac.HasCallback()) + + ac.Status = AsyncCallRejected + ac.ErrorCallback = "error" + require.True(t, ac.HasCallback()) + + ac.SuccessCallback = "" + ac.ErrorCallback = "" + require.False(t, ac.HasCallback()) +} + +func TestAsyncCall_HasDefinedAnyCallback(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{} + require.False(t, ac.HasDefinedAnyCallback()) + + ac.SuccessCallback = "success" + require.True(t, ac.HasDefinedAnyCallback()) + + ac.SuccessCallback = "" + ac.ErrorCallback = "error" + require.True(t, ac.HasDefinedAnyCallback()) + + ac.SuccessCallback = "success" + ac.ErrorCallback = "error" + require.True(t, ac.HasDefinedAnyCallback()) +} + +func TestAsyncCall_UpdateStatus(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{} + ac.UpdateStatus(vmcommon.Ok) + require.Equal(t, AsyncCallResolved, ac.Status) + + ac.UpdateStatus(1) // Using a non-OK status code + require.Equal(t, AsyncCallRejected, ac.Status) +} + +func TestAsyncCall_Reject(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{} + ac.Reject() + require.Equal(t, AsyncCallRejected, ac.Status) +} + +func TestAsyncCall_GetCallbackName(t *testing.T) { + t.Parallel() + + ac := &AsyncCall{SuccessCallback: "success", ErrorCallback: "error"} + + ac.Status = AsyncCallResolved + require.Equal(t, "success", ac.GetCallbackName()) + + ac.Status = AsyncCallRejected + require.Equal(t, "error", ac.GetCallbackName()) + + ac.Status = AsyncCallPending + require.Equal(t, "error", ac.GetCallbackName()) +} + +func TestAsyncCall_IsInterfaceNil(t *testing.T) { + t.Parallel() + + var ac *AsyncCall + require.True(t, ac.IsInterfaceNil()) + + ac = &AsyncCall{} + require.False(t, ac.IsInterfaceNil()) +} diff --git a/vmhost/contexts/async.go b/vmhost/contexts/async.go index b90e87a0c..e479cc1a8 100644 --- a/vmhost/contexts/async.go +++ b/vmhost/contexts/async.go @@ -183,7 +183,7 @@ func (context *asyncContext) PushState() { callbackData: context.callbackData, gasAccumulated: context.gasAccumulated, returnData: context.returnData, - asyncCallGroups: context.asyncCallGroups, // TODO matei-p use cloneCallGroups()? + asyncCallGroups: context.asyncCallGroups, callType: context.callType, callbackAsyncInitiatorCallID: context.callbackAsyncInitiatorCallID, @@ -864,7 +864,7 @@ func (context *asyncContext) callCallback(callID []byte, vmOutput *vmcommon.VMOu } context.host.Metering().DisableRestoreGas() - isComplete, callbackVMOutput := loadedContext.ExecuteSyncCallbackAndFinishOutput(asyncCall, vmOutput, nil, gasAccumulated, err) + isComplete, callbackVMOutput := loadedContext.ExecuteLocalCallbackAndFinishOutput(asyncCall, vmOutput, gasAccumulated, err) context.host.Metering().EnableRestoreGas() return isComplete, callbackVMOutput, nil } diff --git a/vmhost/contexts/asyncComposability_test.go b/vmhost/contexts/asyncComposability_test.go new file mode 100644 index 000000000..72cd4c8a3 --- /dev/null +++ b/vmhost/contexts/asyncComposability_test.go @@ -0,0 +1,98 @@ +package contexts + +import ( + "testing" + + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/multiversx/mx-chain-vm-go/vmhost" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestAsyncContext_NotifyChildIsComplete(t *testing.T) { + t.Parallel() + + t.Run("child completes, no other pending calls", func(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + storage := &mockery.MockStorageContext{} + host.On("Storage").Return(storage) + storage.On("SetProtectedStorageToAddressUnmetered", mock.Anything, mock.Anything, mock.Anything).Return(vmhost.StorageDeleted, nil) + + ac := &asyncContext{ + callsCounter: 1, + host: host, + } + ac.callID = []byte("test") + ac.asyncCallGroups = make([]*vmhost.AsyncCallGroup, 1) + ac.asyncCallGroups[0] = &vmhost.AsyncCallGroup{AsyncCalls: make([]*vmhost.AsyncCall, 1)} + ac.asyncCallGroups[0].AsyncCalls[0] = &vmhost.AsyncCall{ + CallID: []byte("child1"), + } + + err := ac.NotifyChildIsComplete([]byte("child1"), 100) + require.Nil(t, err) + }) + + t.Run("child completes, other pending calls", func(t *testing.T) { + t.Parallel() + host := &mockery.MockVMHost{} + storage := &mockery.MockStorageContext{} + host.On("Storage").Return(storage) + storage.On("SetProtectedStorageToAddressUnmetered", mock.Anything, mock.Anything, mock.Anything).Return(vmhost.StorageModified, nil) + + ac := &asyncContext{ + callsCounter: 2, + host: host, + } + ac.asyncCallGroups = make([]*vmhost.AsyncCallGroup, 1) + ac.asyncCallGroups[0] = &vmhost.AsyncCallGroup{AsyncCalls: make([]*vmhost.AsyncCall, 1)} + ac.asyncCallGroups[0].AsyncCalls[0] = &vmhost.AsyncCall{ + CallID: []byte("child1"), + } + + err := ac.NotifyChildIsComplete([]byte("child1"), 100) + require.Nil(t, err) + require.Equal(t, uint64(100), ac.gasAccumulated) + require.Equal(t, uint64(1), ac.callsCounter) + }) + + t.Run("delete async call fails", func(t *testing.T) { + t.Parallel() + + ac := &asyncContext{ + callsCounter: 1, + } + ac.asyncCallGroups = []*vmhost.AsyncCallGroup{ + { + AsyncCalls: []*vmhost.AsyncCall{ + {CallID: []byte("child2")}, + }, + }, + } + err := ac.NotifyChildIsComplete([]byte("child1"), 100) + require.NotNil(t, err) + require.Equal(t, vmhost.ErrAsyncCallNotFound, err) + }) +} + +func TestAsyncContext_complete(t *testing.T) { + t.Parallel() + + t.Run("first call", func(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + storage := &mockery.MockStorageContext{} + host.On("Storage").Return(storage) + storage.On("SetProtectedStorageToAddressUnmetered", mock.Anything, mock.Anything, mock.Anything).Return(vmhost.StorageDeleted, nil) + ac := &asyncContext{ + host: host, + parentAddr: nil, + } + + err := ac.complete() + require.Nil(t, err) + }) +} diff --git a/vmhost/contexts/asyncLocal.go b/vmhost/contexts/asyncLocal.go index 9b59bf6fe..b55c6b2f8 100644 --- a/vmhost/contexts/asyncLocal.go +++ b/vmhost/contexts/asyncLocal.go @@ -35,7 +35,6 @@ func (context *asyncContext) executeAsyncLocalCalls() error { return nil } -// TODO split this method into smaller ones func (context *asyncContext) executeAsyncLocalCall(asyncCall *vmhost.AsyncCall) error { destinationCallInput, err := context.createContractCallInput(asyncCall) if err != nil { @@ -78,45 +77,61 @@ func (context *asyncContext) executeAsyncLocalCall(asyncCall *vmhost.AsyncCall) asyncCall.UpdateStatus(vmOutput.ReturnCode) - if isComplete { - if asyncCall.HasCallback() { - // Restore gas locked while still on the caller instance; otherwise, the - // locked gas will appear to have been used twice by the caller instance. - isCallbackComplete, callbackVMOutput := context.ExecuteSyncCallbackAndFinishOutput(asyncCall, vmOutput, destinationCallInput, 0, err) - if callbackVMOutput == nil { - return vmhost.ErrAsyncNoOutputFromCallback - } + return context.handleLocalCallCompletion(asyncCall, vmOutput, destinationCallInput, isComplete, err) +} - context.host.CompleteLogEntriesWithCallType(callbackVMOutput, vmhost.AsyncCallbackString) +func (context *asyncContext) handleLocalCallCompletion( + asyncCall *vmhost.AsyncCall, + vmOutput *vmcommon.VMOutput, + destinationCallInput *vmcommon.ContractCallInput, + isComplete bool, + err error, +) error { + if !isComplete { + return nil + } - if isCallbackComplete { - callbackGasRemaining := callbackVMOutput.GasRemaining - callbackVMOutput.GasRemaining = 0 - return context.completeChild(asyncCall.CallID, callbackGasRemaining) - } - } else { - return context.completeChild(asyncCall.CallID, 0) - } + if asyncCall.HasCallback() { + return context.handleCallbackForLocalCall(asyncCall, vmOutput, destinationCallInput, err) + } + + return context.completeChild(asyncCall.CallID, 0) +} + +func (context *asyncContext) handleCallbackForLocalCall( + asyncCall *vmhost.AsyncCall, + vmOutput *vmcommon.VMOutput, + destinationCallInput *vmcommon.ContractCallInput, + err error, +) error { + isCallbackComplete, callbackVMOutput := context.ExecuteLocalCallbackAndFinishOutput(asyncCall, vmOutput, 0, err) + if callbackVMOutput == nil { + return vmhost.ErrAsyncNoOutputFromCallback + } + + context.host.CompleteLogEntriesWithCallType(callbackVMOutput, vmhost.AsyncCallbackString) + + if isCallbackComplete { + callbackGasRemaining := callbackVMOutput.GasRemaining + callbackVMOutput.GasRemaining = 0 + return context.completeChild(asyncCall.CallID, callbackGasRemaining) } return nil } -// ExecuteSyncCallbackAndFinishOutput executes the callback and finishes the output -// TODO rename to executeLocalCallbackAndFinishOutput -func (context *asyncContext) ExecuteSyncCallbackAndFinishOutput( +func (context *asyncContext) ExecuteLocalCallbackAndFinishOutput( asyncCall *vmhost.AsyncCall, vmOutput *vmcommon.VMOutput, - _ *vmcommon.ContractCallInput, gasAccumulated uint64, - err error) (bool, *vmcommon.VMOutput) { - callbackVMOutput, isComplete, _ := context.executeSyncCallback(asyncCall, vmOutput, gasAccumulated, err) + err error, +) (bool, *vmcommon.VMOutput) { + callbackVMOutput, isComplete, _ := context.executeLocalCallback(asyncCall, vmOutput, gasAccumulated, err) context.finishAsyncLocalCallbackExecution() return isComplete, callbackVMOutput } -// TODO rename to executeLocalCallback -func (context *asyncContext) executeSyncCallback( +func (context *asyncContext) executeLocalCallback( asyncCall *vmhost.AsyncCall, destinationVMOutput *vmcommon.VMOutput, gasAccumulated uint64, @@ -124,11 +139,11 @@ func (context *asyncContext) executeSyncCallback( ) (*vmcommon.VMOutput, bool, error) { callbackInput, err := context.createCallbackInput(asyncCall, destinationVMOutput, gasAccumulated, destinationErr) if err != nil { - logAsync.Trace("executeSyncCallback", "error", err) + logAsync.Trace("executeLocalCallback", "error", err) return nil, true, err } - logAsync.Trace("executeSyncCallback", + logAsync.Trace("executeLocalCallback", "caller", callbackInput.CallerAddr, "dest", callbackInput.RecipientAddr, "func", callbackInput.Function, @@ -183,7 +198,7 @@ func (context *asyncContext) executeSyncHalfOfBuiltinFunction(asyncCall *vmhost. if vmOutput.ReturnCode != vmcommon.Ok { asyncCall.Reject() if asyncCall.HasCallback() { - _, _, _ = context.executeSyncCallback(asyncCall, vmOutput, 0, err) + _, _, _ = context.executeLocalCallback(asyncCall, vmOutput, 0, err) context.finishAsyncLocalCallbackExecution() } } @@ -240,28 +255,19 @@ func (context *asyncContext) createContractCallInput(asyncCall *vmhost.AsyncCall return contractCallInput, nil } -// TODO function too large; refactor needed func (context *asyncContext) createCallbackInput( asyncCall *vmhost.AsyncCall, vmOutput *vmcommon.VMOutput, gasAccumulated uint64, destinationErr error, ) (*vmcommon.ContractCallInput, error) { - runtime := context.host.Runtime() - actualCallbackInitiator, err := context.determineDestinationForAsyncCall(asyncCall.GetDestination(), asyncCall.GetData()) if err != nil { return nil, err } - arguments := context.getArgumentsForCallback(vmOutput, destinationErr) - - returnWithError := false - if destinationErr != nil || vmOutput.ReturnCode != vmcommon.Ok { - returnWithError = true - } - callbackFunction := asyncCall.GetCallbackName() + arguments := context.getArgumentsForCallback(vmOutput, destinationErr) dataLength := computeDataLengthFromArguments(callbackFunction, arguments) gasLimit, err := context.computeGasLimitForCallback(asyncCall, vmOutput, dataLength) @@ -269,28 +275,22 @@ func (context *asyncContext) createCallbackInput( return nil, err } + runtime := context.host.Runtime() originalCaller := runtime.GetOriginalCallerAddress() caller := context.address - lastTransferInfo := context.extractLastTransferWithoutData(caller, vmOutput) + vmInput := context.createCallbackVMInput( + vmOutput, + destinationErr, + gasLimit, + actualCallbackInitiator, + originalCaller, + context.extractLastTransferWithoutData(caller, vmOutput), + arguments, + ) - // Return to the sender SC, calling its specified callback method. contractCallInput := &vmcommon.ContractCallInput{ - VMInput: vmcommon.VMInput{ - OriginalCallerAddr: originalCaller, - CallerAddr: actualCallbackInitiator, - Arguments: arguments, - CallValue: lastTransferInfo.callValue, - CallType: vm.AsynchronousCallBack, - GasPrice: runtime.GetVMInput().GasPrice, - GasProvided: gasLimit, - GasLocked: 0, - CurrentTxHash: runtime.GetCurrentTxHash(), - OriginalTxHash: runtime.GetOriginalTxHash(), - PrevTxHash: runtime.GetPrevTxHash(), - ReturnCallAfterError: returnWithError, - ESDTTransfers: lastTransferInfo.lastESDTTransfers, - }, + VMInput: vmInput, RecipientAddr: caller, Function: callbackFunction, } @@ -299,6 +299,34 @@ func (context *asyncContext) createCallbackInput( return contractCallInput, nil } +func (context *asyncContext) createCallbackVMInput( + vmOutput *vmcommon.VMOutput, + destinationErr error, + gasLimit uint64, + actualCallbackInitiator, originalCaller []byte, + lastTransferInfo lastTransferInfo, + arguments [][]byte, +) vmcommon.VMInput { + returnWithError := destinationErr != nil || vmOutput.ReturnCode != vmcommon.Ok + runtime := context.host.Runtime() + + return vmcommon.VMInput{ + OriginalCallerAddr: originalCaller, + CallerAddr: actualCallbackInitiator, + Arguments: arguments, + CallValue: lastTransferInfo.callValue, + CallType: vm.AsynchronousCallBack, + GasPrice: runtime.GetVMInput().GasPrice, + GasProvided: gasLimit, + GasLocked: 0, + CurrentTxHash: runtime.GetCurrentTxHash(), + OriginalTxHash: runtime.GetOriginalTxHash(), + PrevTxHash: runtime.GetPrevTxHash(), + ReturnCallAfterError: returnWithError, + ESDTTransfers: lastTransferInfo.lastESDTTransfers, + } +} + func (context *asyncContext) extractLastTransferWithoutData(caller []byte, vmOutput *vmcommon.VMOutput) lastTransferInfo { callValue := big.NewInt(0) emptyLastTransferInfo := lastTransferInfo{ diff --git a/vmhost/contexts/asyncParams.go b/vmhost/contexts/asyncParams.go index 15ec142e1..a7e85e959 100644 --- a/vmhost/contexts/asyncParams.go +++ b/vmhost/contexts/asyncParams.go @@ -2,8 +2,6 @@ package contexts import ( - "math/big" - "github.com/multiversx/mx-chain-core-go/data/vm" vmcommon "github.com/multiversx/mx-chain-vm-common-go" "github.com/multiversx/mx-chain-vm-common-go/txDataBuilder" @@ -11,40 +9,29 @@ import ( "github.com/multiversx/mx-chain-vm-go/vmhost" ) -/* - Called to process OutputTransfers created by a - direct call (on dest) builtin function call by the VM -*/ +// AddAsyncArgumentsToOutputTransfers called to process OutputTransfers created by a direct call (on dest) builtin function call by the VM +// it will add the asyncContext to the one output transfer it finds. Only one must exist. func AddAsyncArgumentsToOutputTransfers( - output vmhost.OutputContext, - address []byte, asyncParams *vmcommon.AsyncArguments, - callType vm.CallType, - vmOutput *vmcommon.VMOutput) error { + vmOutput *vmcommon.VMOutput, +) error { if asyncParams == nil { return nil } - for _, outAcc := range vmOutput.OutputAccounts { - // if !bytes.Equal(address, outAcc.Address) { - // continue - // } + foundTransfer := false + + for _, outAcc := range vmOutput.OutputAccounts { for t, outTransfer := range outAcc.OutputTransfers { - // if !bytes.Equal(address, outTransfer.SenderAddress) { - // continue - // } - if outTransfer.CallType != callType { + if outTransfer.CallType != vm.AsynchronousCall { continue } - asyncData, err := createDataFromAsyncParams( - asyncParams, - callType) - - if err != nil { - return err + if foundTransfer { + return vmhost.ErrTooManyTransfersFromBuiltInFunction } + asyncData := createDataFromAsyncParams(asyncParams) outAcc.OutputTransfers[t] = vmcommon.OutputTransfer{ Index: outTransfer.Index, Value: outTransfer.Value, @@ -55,149 +42,19 @@ func AddAsyncArgumentsToOutputTransfers( CallType: outTransfer.CallType, SenderAddress: outTransfer.SenderAddress, } + + foundTransfer = true } } return nil } -func createDataFromAsyncParams( - asyncParams *vmcommon.AsyncArguments, - callType vm.CallType, -) ([]byte, error) { - if asyncParams == nil { - if callType == vm.AsynchronousCall || callType == vm.AsynchronousCallBack { - return nil, vmcommon.ErrAsyncParams - } else { - return nil, nil - } - } - +func createDataFromAsyncParams(asyncParams *vmcommon.AsyncArguments) []byte { callData := txDataBuilder.NewBuilder() callData.Bytes(asyncParams.CallID) callData.Bytes(asyncParams.CallerCallID) - if callType == vm.AsynchronousCallBack { - callData.Bytes(asyncParams.CallbackAsyncInitiatorCallID) - callData.Bytes(big.NewInt(int64(asyncParams.GasAccumulated)).Bytes()) - } - - return callData.ToBytes(), nil -} - -/* - Called when a SCR for a callback is created outside the VM - (by createAsyncCallBackSCRFromVMOutput()) - This is the case - A) after an async call executed following a builtin function call, - B) other cases where processing the output trasnfers of a VMOutput did - not produce a SCR of type AsynchronousCallBack - TODO(check): function not used? -*/ -func AppendAsyncArgumentsToCallbackCallData( - hasher crypto.Hasher, - data []byte, - asyncArguments *vmcommon.AsyncArguments, - parseArgumentsFunc func(data string) ([][]byte, error)) ([]byte, error) { - - return appendAsyncParamsToCallData( - CreateCallbackAsyncParams(hasher, asyncArguments), - data, - false, - parseArgumentsFunc) -} - -/* - Called when a SCR is created from VMOutput in order to recompose - async data and call data into a transfer data ready for the SCR - (by preprocessOutTransferToSCR()) - TODO(check): function not used? -*/ -func AppendTransferAsyncDataToCallData( - callData []byte, - asyncData []byte, - parseArgumentsFunc func(data string) ([][]byte, error)) ([]byte, error) { - - var asyncParams [][]byte - if asyncData != nil { - asyncParams, _ = parseArgumentsFunc(string(asyncData)) - // string start with a @ so first parsed argument will be empty always - asyncParams = asyncParams[1:] - } else { - return callData, nil - } - - return appendAsyncParamsToCallData( - asyncParams, - callData, - true, - parseArgumentsFunc) -} - -func appendAsyncParamsToCallData( - asyncParams [][]byte, - data []byte, - hasFunction bool, - parseArgumentsFunc func(data string) ([][]byte, error)) ([]byte, error) { - - if data == nil { - return nil, nil - } - - args, err := parseArgumentsFunc(string(data)) - if err != nil { - return nil, err - } - - var functionName string - if hasFunction { - functionName = string(args[0]) - } - - // check if there is only one argument and that is 0 - if len(args) != 0 { - args = args[1:] - } - - callData := txDataBuilder.NewBuilder() - - if functionName != "" { - callData.Func(functionName) - } - - if len(args) != 0 { - for _, arg := range args { - callData.Bytes(arg) - } - } else { - if !hasFunction { - callData.Bytes([]byte{}) - } - } - - for _, asyncParam := range asyncParams { - callData.Bytes(asyncParam) - } - - return callData.ToBytes(), nil -} - -/* - Used by when a callback SCR is created - 1) after a failure of an async call - Async data is extracted (by extractAsyncCallParamsFromTxData()) and then - reappended to the new SCR's callback data (by reapendAsyncParamsToTxData()) - 2) from the last transfer (see useLastTransferAsAsyncCallBackWhenNeeded()) -*/ -func CreateCallbackAsyncParams(hasher crypto.Hasher, asyncParams *vmcommon.AsyncArguments) [][]byte { - if asyncParams == nil { - return nil - } - newAsyncParams := make([][]byte, 4) - newAsyncParams[0] = GenerateNewCallID(hasher, asyncParams.CallID, []byte{0}) - newAsyncParams[1] = asyncParams.CallID - newAsyncParams[2] = asyncParams.CallerCallID - newAsyncParams[3] = []byte{0} - return newAsyncParams + return callData.ToBytes() } // GenerateNewCallID will generate a new call ID as byte slice diff --git a/vmhost/contexts/asyncParams_test.go b/vmhost/contexts/asyncParams_test.go new file mode 100644 index 000000000..e9bd438ed --- /dev/null +++ b/vmhost/contexts/asyncParams_test.go @@ -0,0 +1,75 @@ +package contexts + +import ( + "encoding/hex" + "testing" + + "github.com/multiversx/mx-chain-core-go/data/vm" + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/stretchr/testify/require" +) + +func TestAddAsyncArgumentsToOutputTransfers(t *testing.T) { + t.Parallel() + + t.Run("nil async params", func(t *testing.T) { + t.Parallel() + err := AddAsyncArgumentsToOutputTransfers(nil, nil) + require.Nil(t, err) + }) + + t.Run("should work", func(t *testing.T) { + t.Parallel() + vmOutput := &vmcommon.VMOutput{ + OutputAccounts: map[string]*vmcommon.OutputAccount{ + "addr1": { + OutputTransfers: []vmcommon.OutputTransfer{ + { + CallType: vm.AsynchronousCall, + }, + }, + }, + }, + } + asyncParams := &vmcommon.AsyncArguments{ + CallID: []byte("callID"), + } + + err := AddAsyncArgumentsToOutputTransfers(asyncParams, vmOutput) + require.Nil(t, err) + require.NotNil(t, vmOutput.OutputAccounts["addr1"].OutputTransfers[0].AsyncData) + }) +} + +func TestCreateDataFromAsyncParams(t *testing.T) { + t.Parallel() + + t.Run("empty async params", func(t *testing.T) { + t.Parallel() + data := createDataFromAsyncParams(&vmcommon.AsyncArguments{}) + require.NotNil(t, data) + }) + + t.Run("async call", func(t *testing.T) { + t.Parallel() + asyncParams := &vmcommon.AsyncArguments{ + CallID: []byte("callID"), + CallerCallID: []byte("callerCallID"), + } + data := createDataFromAsyncParams(asyncParams) + require.NotNil(t, data) + }) + + t.Run("async callback", func(t *testing.T) { + t.Parallel() + asyncParams := &vmcommon.AsyncArguments{ + CallID: []byte("callID"), + CallerCallID: []byte("callerCallID"), + CallbackAsyncInitiatorCallID: []byte("initiator"), + GasAccumulated: 100, + } + data := createDataFromAsyncParams(asyncParams) + require.NotNil(t, data) + require.Contains(t, string(data), hex.EncodeToString([]byte("callID"))) + }) +} diff --git a/vmhost/contexts/blockchain_test.go b/vmhost/contexts/blockchain_test.go index 18314f674..683bb267a 100644 --- a/vmhost/contexts/blockchain_test.go +++ b/vmhost/contexts/blockchain_test.go @@ -413,18 +413,18 @@ func TestBlockchainContext_Getters(t *testing.T) { mockWorld := &worldmock.MockWorld{ PreviousBlockInfo: &worldmock.BlockInfo{ - BlockTimestamp: 6749, - BlockNonce: 90, - BlockRound: 96, - BlockEpoch: 3, - RandomSeed: &randomSeed1, + BlockTimestampMs: 6749_000, + BlockNonce: 90, + BlockRound: 96, + BlockEpoch: 3, + RandomSeed: &randomSeed1, }, CurrentBlockInfo: &worldmock.BlockInfo{ - BlockTimestamp: 6800, - BlockNonce: 98, - BlockRound: 99, - BlockEpoch: 4, - RandomSeed: &randomSeed2, + BlockTimestampMs: 6800_000, + BlockNonce: 98, + BlockRound: 99, + BlockEpoch: 4, + RandomSeed: &randomSeed2, }, StateRootHash: []byte("root hash"), } diff --git a/vmhost/contexts/instanceTracker.go b/vmhost/contexts/instanceTracker.go index 158f4d91b..14f7ada94 100644 --- a/vmhost/contexts/instanceTracker.go +++ b/vmhost/contexts/instanceTracker.go @@ -83,7 +83,12 @@ func (tracker *instanceTracker) PushState() { logTracker.Trace("pushing instance", "id", tracker.instance.ID(), "codeHash", tracker.codeHash) } -// PopSetActiveState pops the instance and codeHash from the state stacks and sets them as active +// PopSetActiveState pops the instance and codeHash from the state stacks and sets them as active. +// It also contains logic to clean up instances that are no longer needed. +// An instance is cleaned if it is not the same as the one on top of the stack +// (i.e., it's a child instance that has just finished execution) and its code hash +// is already present on the stack (i.e., it's a recursive call). This prevents +// resource leaks from instances that are created for nested calls. func (tracker *instanceTracker) PopSetActiveState() { instanceStackLen := len(tracker.instanceStack) if instanceStackLen == 0 { diff --git a/vmhost/contexts/managedType.go b/vmhost/contexts/managedType.go index 13d4eda97..5512bba3d 100644 --- a/vmhost/contexts/managedType.go +++ b/vmhost/contexts/managedType.go @@ -639,9 +639,23 @@ func (context *managedTypesContext) GetSlice(mBufferHandle int32, startPosition if !ok { return nil, vmhost.ErrNoManagedBufferUnderThisHandle } - if int(lengthOfSlice) > len(mBuffer)-int(startPosition) || lengthOfSlice < 0 || startPosition < 0 { + if startPosition < 0 || lengthOfSlice < 0 { return nil, vmhost.ErrBadBounds } + if len(mBuffer)-int(startPosition) < int(lengthOfSlice) { + return nil, vmhost.ErrBadBounds + } + + if context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + if len(mBuffer) < int(startPosition) { + return nil, vmhost.ErrBadBounds + } + if int64(startPosition)+int64(lengthOfSlice) > int64(basicMath.MaxInt32) || + int64(startPosition)+int64(lengthOfSlice) < int64(startPosition) { + return nil, vmhost.ErrBadBounds + } + } + return mBuffer[startPosition:(startPosition + lengthOfSlice)], nil } diff --git a/vmhost/contexts/runtime.go b/vmhost/contexts/runtime.go index 40e9eb1ba..a8b87a39b 100644 --- a/vmhost/contexts/runtime.go +++ b/vmhost/contexts/runtime.go @@ -45,6 +45,11 @@ var mapBarnardOpcodes = map[string]struct{}{ "managedGetESDTTokenType": {}, } +var mapFailConditionalOpcodes = map[string]struct{}{ + "ActivateUnsafeMode": {}, + "DeactivateUnsafeMode": {}, +} + const warmCacheSize = 100 type runtimeContext struct { @@ -56,6 +61,7 @@ type runtimeContext struct { readOnly bool verifyCode bool maxInstanceStackSize uint64 + unsafeMode bool vmExecutor executor.Executor @@ -124,6 +130,7 @@ func (context *runtimeContext) InitState() { context.callFunction = "" context.verifyCode = false context.readOnly = false + context.unsafeMode = false context.iTracker.InitState() context.errors = nil @@ -398,6 +405,7 @@ func (context *runtimeContext) PushState() { codeAddress: context.codeAddress, callFunction: context.callFunction, readOnly: context.readOnly, + unsafeMode: context.unsafeMode, } newState.SetVMInput(context.vmInput) @@ -426,6 +434,7 @@ func (context *runtimeContext) PopSetActiveState() { context.codeAddress = prevState.codeAddress context.callFunction = prevState.callFunction context.readOnly = prevState.readOnly + context.unsafeMode = prevState.unsafeMode } // PopDiscard removes the latest entry from the state stack @@ -591,42 +600,41 @@ func (context *runtimeContext) Arguments() [][]byte { return context.vmInput.Arguments } -// ExtractCodeUpgradeFromArgs extracts the code and code metadata from the +// RemoveCodeUpgradeFromArgs extracts the code and code metadata from the // current VMInput.Arguments, assuming a contract code upgrade has been requested. -func (context *runtimeContext) ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) { +func (context *runtimeContext) RemoveCodeUpgradeFromArgs() { const numMinUpgradeArguments = 2 arguments := context.vmInput.Arguments if len(arguments) < numMinUpgradeArguments { - return nil, nil, vmhost.ErrInvalidUpgradeArguments + return } - code := arguments[0] - codeMetadata := arguments[1] context.vmInput.Arguments = context.vmInput.Arguments[numMinUpgradeArguments:] - return code, codeMetadata, nil } // FailExecution informs Wasmer to immediately stop the execution of the contract // with BreakpointExecutionFailed and sets the corresponding VMOutput fields accordingly // FailExecution sets the returnMessage, returnCode and runtimeBreakpoint according to the given error. func (context *runtimeContext) FailExecution(err error) { - context.host.Output().SetReturnCode(vmcommon.ExecutionFailed) - var message string breakpoint := vmhost.BreakpointExecutionFailed - + returnCode := vmcommon.ExecutionFailed if err != nil { message = err.Error() context.AddError(err) if errors.Is(err, vmhost.ErrNotEnoughGas) { breakpoint = vmhost.BreakpointOutOfGas + if context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + returnCode = vmcommon.OutOfGas + } } } else { message = "execution failed" context.AddError(errors.New(message)) } + context.host.Output().SetReturnCode(returnCode) context.host.Output().SetReturnMessage(message) if !check.IfNil(context.iTracker.Instance()) { context.SetRuntimeBreakpointValue(breakpoint) @@ -639,6 +647,16 @@ func (context *runtimeContext) FailExecution(err error) { logRuntime.Trace("execution failed", "message", traceMessage) } +// IsUnsafeMode returns true if mode is unsafe +func (context *runtimeContext) IsUnsafeMode() bool { + return context.unsafeMode +} + +// SetUnsafeMode sets the current mode of running +func (context *runtimeContext) SetUnsafeMode(unsafeMode bool) { + context.unsafeMode = unsafeMode +} + // SignalUserError informs Wasmer to immediately stop the execution of the contract // with BreakpointSignalError and sets the corresponding VMOutput fields accordingly func (context *runtimeContext) SignalUserError(message string) { @@ -705,6 +723,14 @@ func (context *runtimeContext) VerifyContractCode() error { } } + if !enableEpochsHandler.IsFlagEnabled(vmhost.FailConditionallyFlag) { + err = context.checkIfContainsFailConditionalOpcodes() + if err != nil { + logRuntime.Trace("verify contract code", "error", err) + return err + } + } + logRuntime.Trace("verified contract code") return nil @@ -728,6 +754,15 @@ func (context *runtimeContext) checkIfContainsBarnardOpcodes() error { return nil } +func (context *runtimeContext) checkIfContainsFailConditionalOpcodes() error { + for funcName := range mapFailConditionalOpcodes { + if context.iTracker.Instance().IsFunctionImported(funcName) { + return vmhost.ErrContractInvalid + } + } + return nil +} + // UseGasBoundedShouldFailExecution returns true when flag activated func (context *runtimeContext) UseGasBoundedShouldFailExecution() bool { return context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.UseGasBoundedShouldFailExecutionFlag) diff --git a/vmhost/contexts/runtime_test.go b/vmhost/contexts/runtime_test.go index 8099ba7dc..d56c89208 100644 --- a/vmhost/contexts/runtime_test.go +++ b/vmhost/contexts/runtime_test.go @@ -839,3 +839,24 @@ func TestRuntimeContext_PopInstanceIfStackIsEmptyShouldNotPanic(t *testing.T) { require.Equal(t, 0, len(runtimeCtx.stateStack)) } + +func TestRuntimeContext_UnSafeMode(t *testing.T) { + host := InitializeVMAndWasmer() + runtimeCtx := makeDefaultRuntimeContext(t, host) + defer runtimeCtx.ClearWarmInstanceCache() + + runtimeCtx.vmInput = nil + runtimeCtx.codeAddress = []byte("some address") + runtimeCtx.callFunction = "a function" + runtimeCtx.iTracker.codeSize = 1024 + + runtimeCtx.InitState() + + require.False(t, runtimeCtx.IsUnsafeMode()) + runtimeCtx.SetUnsafeMode(true) + + require.True(t, runtimeCtx.IsUnsafeMode()) + + runtimeCtx.SetUnsafeMode(false) + require.False(t, runtimeCtx.IsUnsafeMode()) +} diff --git a/vmhost/contexts/storage.go b/vmhost/contexts/storage.go index 662bf3d9f..353029794 100644 --- a/vmhost/contexts/storage.go +++ b/vmhost/contexts/storage.go @@ -300,9 +300,6 @@ func (context *storageContext) setStorageToAddress(address []byte, key []byte, v if err != nil { return vmhost.StorageUnchanged, err } - metering := context.host.Metering() - - length := len(value) storageUpdates := context.GetStorageUpdates(address) oldValue, usedCache, err := context.getOldValue(storageUpdates, key) @@ -310,53 +307,84 @@ func (context *storageContext) setStorageToAddress(address []byte, key []byte, v return vmhost.StorageUnchanged, err } - gasForKey := context.computeGasForKey(key, usedCache) - err = metering.UseGasBounded(gasForKey) + err = context.consumeGasForKey(key, usedCache) if err != nil { return vmhost.StorageUnchanged, err } if bytes.Equal(oldValue, value) { - return context.storageUnchanged(length, usedCache, key) + return context.storageUnchanged(len(value), usedCache, key) } - deltaBytes := len(value) - len(oldValue) - context.addDeltaBytes(deltaBytes) + return context.handleChangedStorage(key, value, oldValue, storageUpdates) +} +func (context *storageContext) consumeGasForKey(key []byte, usedCache bool) error { + gasForKey := context.computeGasForKey(key, usedCache) + return context.host.Metering().UseGasBounded(gasForKey) +} + +func (context *storageContext) handleChangedStorage( + key []byte, + value []byte, + oldValue []byte, + storageUpdates map[string]*vmcommon.StorageUpdate, +) (vmhost.StorageStatus, error) { + context.addDeltaBytes(len(value) - len(oldValue)) context.changeStorageUpdate(key, value, storageUpdates) if len(oldValue) == 0 { - return context.storageAdded(length, key, value) + return context.storageAdded(len(value), key, value) } - lengthOldValue := len(oldValue) if len(value) == 0 { - return context.storageDeleted(lengthOldValue, key) + return context.storageDeleted(len(oldValue), key) } + return context.handleModifiedStorage(key, value, oldValue) +} + +func (context *storageContext) handleModifiedStorage( + key []byte, + value []byte, + oldValue []byte, +) (vmhost.StorageStatus, error) { + length := len(value) + lengthOldValue := len(oldValue) newValueExtraLength := math.SubInt(length, lengthOldValue) - var gasToUseForValue, gasToFreeForValue uint64 - switch { - case newValueExtraLength > 0: - gasToUseForValue, gasToFreeForValue = context.computeGasForBiggerValues(lengthOldValue, newValueExtraLength) - case newValueExtraLength < 0: - gasToUseForValue, gasToFreeForValue = context.computeGasForSmallerValues(newValueExtraLength, length) - case newValueExtraLength == 0: - gasToUseForValue, gasToFreeForValue = 0, 0 + gasToUseForValue, gasToFreeForValue, err := context.computeGasForModifiedValue(lengthOldValue, newValueExtraLength, length) + if err != nil { + return vmhost.StorageUnchanged, err } - err = metering.UseGasBounded(gasToUseForValue) - if err != nil { + if err = context.host.Metering().UseGasBounded(gasToUseForValue); err != nil { return vmhost.StorageUnchanged, err } - metering.FreeGas(gasToFreeForValue) + context.host.Metering().FreeGas(gasToFreeForValue) logStorage.Trace("storage modified", "key", key, "value", value, "lengthDelta", newValueExtraLength) return vmhost.StorageModified, nil } +func (context *storageContext) computeGasForModifiedValue( + lengthOldValue int, + newValueExtraLength int, + length int, +) (uint64, uint64, error) { + switch { + case newValueExtraLength > 0: + gasToUse, gasToFree := context.computeGasForBiggerValues(lengthOldValue, newValueExtraLength) + return gasToUse, gasToFree, nil + case newValueExtraLength < 0: + gasToUse, gasToFree := context.computeGasForSmallerValues(newValueExtraLength, length) + return gasToUse, gasToFree, nil + default: + return 0, 0, nil + } +} + func (context *storageContext) setStorageToAddressUnmetered(address []byte, key []byte, value []byte) (vmhost.StorageStatus, error) { err := context.checkReservedAndProtection(key) if err != nil { diff --git a/vmhost/errorWrapping.go b/vmhost/errorWrapping.go index 6a724feb0..583396874 100644 --- a/vmhost/errorWrapping.go +++ b/vmhost/errorWrapping.go @@ -148,18 +148,13 @@ func (werr *wrappableError) Error() string { // Unwrap - standard error function implementation for wrappable errors func (werr *wrappableError) Unwrap() error { - wrappingErr := werr.unwrapWrapping() - if len(wrappingErr.errsWithLocation) == 1 { - return wrappingErr.errsWithLocation[0].err - } else { - return wrappingErr - } -} - -func (werr *wrappableError) unwrapWrapping() *wrappableError { if len(werr.errsWithLocation) == 0 { return nil } + if len(werr.errsWithLocation) <= 1 { + return werr.errsWithLocation[0].err + } + return &wrappableError{ errsWithLocation: werr.errsWithLocation[:len(werr.errsWithLocation)-1], } diff --git a/vmhost/errorWrapping_test.go b/vmhost/errorWrapping_test.go new file mode 100644 index 000000000..b55e77996 --- /dev/null +++ b/vmhost/errorWrapping_test.go @@ -0,0 +1,135 @@ +package vmhost + +import ( + "errors" + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestWrapError(t *testing.T) { + t.Parallel() + + err := errors.New("base error") + wrappedErr := WrapError(err, "info1") + + require.NotNil(t, wrappedErr) + require.Equal(t, err, wrappedErr.GetBaseError()) + require.Equal(t, err, wrappedErr.GetLastError()) + + allErrs, allInfo := wrappedErr.GetAllErrorsAndOtherInfo() + require.Len(t, allErrs, 1) + require.Equal(t, err, allErrs[0]) + require.Len(t, allInfo, 1) + require.Equal(t, "info1", allInfo[0]) +} + +func TestWrappableError_WrapWithMessage(t *testing.T) { + t.Parallel() + + err := errors.New("base error") + wrappedErr := WrapError(err) + wrappedErr = wrappedErr.WrapWithMessage("second layer") + + require.Equal(t, err, wrappedErr.GetBaseError()) + require.NotEqual(t, err, wrappedErr.GetLastError()) + require.Equal(t, "second layer", wrappedErr.GetLastError().Error()) + + allErrs := wrappedErr.GetAllErrors() + require.Len(t, allErrs, 2) + require.Equal(t, "second layer", allErrs[1].Error()) +} + +func TestWrappableError_WrapWithStackTrace(t *testing.T) { + t.Parallel() + + err := errors.New("base error") + wrappedErr := WrapError(err) + wrappedErr = wrappedErr.WrapWithStackTrace() + + require.Equal(t, err, wrappedErr.GetBaseError()) + require.NotEqual(t, err, wrappedErr.GetLastError()) + require.Equal(t, "", wrappedErr.GetLastError().Error()) + + allErrs := wrappedErr.GetAllErrors() + require.Len(t, allErrs, 2) +} + +func TestWrappableError_WrapWithError(t *testing.T) { + t.Parallel() + + err1 := errors.New("base error") + err2 := errors.New("second error") + wrappedErr := WrapError(err1) + wrappedErr = wrappedErr.WrapWithError(err2, "info2") + + require.Equal(t, err1, wrappedErr.GetBaseError()) + require.Equal(t, err2, wrappedErr.GetLastError()) + + allErrs, allInfo := wrappedErr.GetAllErrorsAndOtherInfo() + require.Len(t, allErrs, 2) + require.Len(t, allInfo, 1) + require.Equal(t, "info2", allInfo[0]) +} + +func TestWrappableError_Error(t *testing.T) { + t.Parallel() + + err1 := errors.New("base error") + wrappedErr := WrapError(err1) + wrappedErr = wrappedErr.WrapWithMessage("L2") + wrappedErr = wrappedErr.WrapWithError(errors.New("L3"), "info3") + + errStr := wrappedErr.Error() + require.True(t, strings.Contains(errStr, "errorWrapping_test.go")) + require.True(t, strings.Contains(errStr, "[base error]")) + require.True(t, strings.Contains(errStr, "[L2]")) + require.True(t, strings.Contains(errStr, "[L3]")) + require.True(t, strings.Contains(errStr, "[info3]")) +} + +func TestWrappableError_Unwrap(t *testing.T) { + t.Parallel() + + err1 := errors.New("base error") + err2 := errors.New("L2") + err3 := errors.New("L3") + wrappedErr := WrapError(err1).WrapWithError(err2).WrapWithError(err3) + + unwrappedOnce := errors.Unwrap(wrappedErr) + require.NotNil(t, unwrappedOnce) + require.True(t, errors.Is(unwrappedOnce, err1)) + require.True(t, errors.Is(unwrappedOnce, err2)) + require.False(t, errors.Is(unwrappedOnce, err3)) + + unwrappedTwice := errors.Unwrap(unwrappedOnce) + require.NotNil(t, unwrappedTwice) + require.True(t, errors.Is(unwrappedTwice, err1)) + require.False(t, errors.Is(unwrappedTwice, err2)) + + unwrappedThrice := errors.Unwrap(unwrappedTwice) + require.Equal(t, err1, unwrappedThrice) + + unwrappedFour := errors.Unwrap(unwrappedThrice) + require.Nil(t, unwrappedFour) +} + +func TestWrappableError_Is(t *testing.T) { + t.Parallel() + + err1 := errors.New("err1") + err2 := errors.New("err2") + err3 := errors.New("err3") + + wrappedErr := WrapError(err1) + wrappedErr = wrappedErr.WrapWithError(err2) + + require.True(t, wrappedErr.Is(err1)) + require.True(t, wrappedErr.Is(err2)) + require.False(t, wrappedErr.Is(err3)) + + require.True(t, errors.Is(wrappedErr, err1)) + require.True(t, errors.Is(wrappedErr, err2)) + require.False(t, errors.Is(wrappedErr, err3)) +} diff --git a/vmhost/errors.go b/vmhost/errors.go index af50ba82a..f11a56528 100644 --- a/vmhost/errors.go +++ b/vmhost/errors.go @@ -52,9 +52,6 @@ var ErrBadBounds = errors.New("bad bounds") // ErrBadLowerBounds signals that a certain variable is lower than allowed var ErrBadLowerBounds = fmt.Errorf("%w (lower)", ErrBadBounds) -// ErrBadUpperBounds signals that a certain variable is higher than allowed -var ErrBadUpperBounds = fmt.Errorf("%w (upper)", ErrBadBounds) - // ErrNegativeLength signals that the given length is less than 0 var ErrNegativeLength = errors.New("negative length") @@ -332,5 +329,14 @@ var ErrNilMapOpcodeAddress = errors.New("nil map opcode address") // ErrOpcodeIsNotAllowed signals that opcode is not allowed for the address var ErrOpcodeIsNotAllowed = errors.New("opcode is not allowed") -// ErrInvalidSignature signals that a signature verification failed -var ErrInvalidSignature = errors.New("signature is invalid") +// ErrVMHookIsDeactivated signals that opcode is deactivated +var ErrVMHookIsDeactivated = errors.New("VM hook is deactivated") + +// ErrTooManyTransfersFromBuiltInFunction signals that too many transfers are in the built in function +var ErrTooManyTransfersFromBuiltInFunction = errors.New("too many transfers from built in function") + +// ErrTimeLockExpired signals that timelock has expired +var ErrTimeLockExpired = errors.New("time lock expired") + +// ErrWrongType signals that wrong type is read from buffer +var ErrWrongType = errors.New("incompatible type") diff --git a/vmhost/flags.go b/vmhost/flags.go index 911c22c82..d863e301f 100644 --- a/vmhost/flags.go +++ b/vmhost/flags.go @@ -30,5 +30,14 @@ const ( // FixGetBalanceFlag defines the flag that activates the fix for get balance from the Barnard release FixGetBalanceFlag core.EnableEpochFlag = "FixGetBalanceFlag" + // AsyncV3FixesFlag defines the flag that activates the fix for get balance from the Barnard release + AsyncV3FixesFlag core.EnableEpochFlag = "AsyncV3FixesFlag" + + // AsyncV3Flag defines the flag that activates the fix for get balance from the Barnard release + AsyncV3Flag core.EnableEpochFlag = "AsyncV3Flag" + + // FailConditionallyFlag defines the flag that activates the new opcodes and possibility for failing conditionally + FailConditionallyFlag core.EnableEpochFlag = "FailConditionallyFlag" + // all new flags must be added to allFlags slice from hostCore/host ) diff --git a/vmhost/helpers.go b/vmhost/helpers.go index 98502ae67..04b9ed2d1 100644 --- a/vmhost/helpers.go +++ b/vmhost/helpers.go @@ -62,8 +62,8 @@ func PadBytesLeft(data []byte, size int) []byte { return data } - paddedBytes := make([]byte, padSize) - paddedBytes = append(paddedBytes, data...) + paddedBytes := make([]byte, size) + copy(paddedBytes[padSize:], data) return paddedBytes } diff --git a/vmhost/hostCore/breakpoints_test.go b/vmhost/hostCore/breakpoints_test.go new file mode 100644 index 000000000..6f2048dfa --- /dev/null +++ b/vmhost/hostCore/breakpoints_test.go @@ -0,0 +1,122 @@ +package hostCore + +import ( + "errors" + "testing" + + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/multiversx/mx-chain-vm-go/vmhost" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func createTestHostWithMocks() (*vmHost, *mockery.MockRuntimeContext, *mockery.MockAsyncContext) { + runtimeMock := &mockery.MockRuntimeContext{} + asyncMock := &mockery.MockAsyncContext{} + host := &vmHost{ + runtimeContext: runtimeMock, + asyncContext: asyncMock, + } + return host, runtimeMock, asyncMock +} + +func TestVmHost_handleBreakpoint(t *testing.T) { + t.Parallel() + + t.Run("async call", func(t *testing.T) { + t.Parallel() + h, runtimeMock, asyncMock := createTestHostWithMocks() + runtimeMock.On("SetRuntimeBreakpointValue", vmhost.BreakpointNone) + asyncMock.On("GetCallGroup", vmhost.LegacyAsyncCallGroupID).Return(nil, false) + err := h.handleBreakpoint(vmhost.BreakpointAsyncCall) + require.Equal(t, vmhost.ErrLegacyAsyncCallNotFound, err) + }) + + errTests := []struct { + breakpoint vmhost.BreakpointValue + expected error + }{ + {vmhost.BreakpointExecutionFailed, vmhost.ErrExecutionFailed}, + {vmhost.BreakpointSignalError, vmhost.ErrSignalError}, + {vmhost.BreakpointOutOfGas, vmhost.ErrNotEnoughGas}, + {vmhost.BreakpointMemoryLimit, vmhost.ErrMemoryLimit}, + {vmhost.BreakpointValue(99), vmhost.ErrUnhandledRuntimeBreakpoint}, + } + + for _, tt := range errTests { + tt := tt + t.Run(tt.expected.Error(), func(t *testing.T) { + t.Parallel() + h, _, _ := createTestHostWithMocks() + err := h.handleBreakpoint(tt.breakpoint) + require.Equal(t, tt.expected, err) + }) + } +} + +func TestVmHost_handleBreakpointIfAny(t *testing.T) { + t.Parallel() + + t.Run("no error", func(t *testing.T) { + t.Parallel() + h, _, _ := createTestHostWithMocks() + err := h.handleBreakpointIfAny(nil) + require.Nil(t, err) + }) + + t.Run("with error, no breakpoint", func(t *testing.T) { + t.Parallel() + h, runtimeMock, _ := createTestHostWithMocks() + runtimeMock.On("GetRuntimeBreakpointValue").Return(vmhost.BreakpointNone) + runtimeMock.On("AddError", mock.Anything, mock.Anything).Return() + runtimeMock.On("FunctionName").Return("testFunc") + execErr := errors.New("exec error") + err := h.handleBreakpointIfAny(execErr) + require.Equal(t, vmhost.ErrExecutionFailed, err) + }) + + t.Run("with error and breakpoint", func(t *testing.T) { + t.Parallel() + h, runtimeMock, asyncMock := createTestHostWithMocks() + runtimeMock.On("GetRuntimeBreakpointValue").Return(vmhost.BreakpointOutOfGas) + runtimeMock.On("AddError", mock.Anything, mock.Anything).Return() + runtimeMock.On("FunctionName").Return("testFunc") + asyncMock.On("GetCallGroup", vmhost.LegacyAsyncCallGroupID).Return(nil, false) + execErr := errors.New("exec error") + err := h.handleBreakpointIfAny(execErr) + require.Equal(t, vmhost.ErrNotEnoughGas, err) + }) +} + +func TestVmHost_handleAsyncCallBreakpoint(t *testing.T) { + t.Parallel() + + t.Run("group not found", func(t *testing.T) { + t.Parallel() + h, runtimeMock, asyncMock := createTestHostWithMocks() + runtimeMock.On("SetRuntimeBreakpointValue", vmhost.BreakpointNone).Return() + asyncMock.On("GetCallGroup", vmhost.LegacyAsyncCallGroupID).Return(nil, false) + err := h.handleAsyncCallBreakpoint() + require.Equal(t, vmhost.ErrLegacyAsyncCallNotFound, err) + }) + + t.Run("group is complete", func(t *testing.T) { + t.Parallel() + h, runtimeMock, asyncMock := createTestHostWithMocks() + group := &vmhost.AsyncCallGroup{} + runtimeMock.On("SetRuntimeBreakpointValue", vmhost.BreakpointNone).Return() + asyncMock.On("GetCallGroup", vmhost.LegacyAsyncCallGroupID).Return(group, true) + err := h.handleAsyncCallBreakpoint() + require.Equal(t, vmhost.ErrLegacyAsyncCallInvalid, err) + }) + + t.Run("success", func(t *testing.T) { + t.Parallel() + h, runtimeMock, asyncMock := createTestHostWithMocks() + group := &vmhost.AsyncCallGroup{AsyncCalls: []*vmhost.AsyncCall{{}}} + runtimeMock.On("SetRuntimeBreakpointValue", vmhost.BreakpointNone).Return() + asyncMock.On("GetCallGroup", vmhost.LegacyAsyncCallGroupID).Return(group, true) + err := h.handleAsyncCallBreakpoint() + require.Nil(t, err) + }) +} diff --git a/vmhost/hostCore/execution.go b/vmhost/hostCore/execution.go index eb1bf9f21..2a1221642 100644 --- a/vmhost/hostCore/execution.go +++ b/vmhost/hostCore/execution.go @@ -18,53 +18,116 @@ import ( "github.com/multiversx/mx-chain-vm-go/vmhost/vmhooks" ) -func (host *vmHost) doRunSmartContractCreate(input *vmcommon.ContractCreateInput) *vmcommon.VMOutput { - host.InitState() - defer func() { - errs := host.GetRuntimeErrors() - if errs != nil { - log.Trace("doRunSmartContractCreate full error list", "error", errs) - } - }() +const numMinUpgradeArguments = 2 - _, blockchain, metering, output, runtime, _, storage := host.GetContexts() +func (host *vmHost) logErrors(context string, functionName string) { + errs := host.GetRuntimeErrors() + if errs != nil { + log.Trace(fmt.Sprintf("%s full error list for %s", context, functionName), "error", errs) + } +} - var vmOutput *vmcommon.VMOutput - defer func() { - if vmOutput == nil || vmOutput.ReturnCode == vmcommon.ExecutionFailed { - runtime.CleanInstance() - } - }() +func (host *vmHost) initializeExecution(input *vmcommon.ContractCallInput) error { + _, _, metering, output, runtime, async, storage := host.GetContexts() + + runtime.InitStateFromContractCallInput(input) - address, err := blockchain.NewAddress(input.CallerAddr) + if err := async.InitStateFromInput(input); err != nil { + log.Trace("doRunSmartContractCall init async", "error", vmhost.ErrAsyncInit) + return err + } + metering.InitStateFromContractCallInput(&input.VMInput) + output.AddTxValueToAccount(input.RecipientAddr, input.CallValue) + storage.SetAddress(runtime.GetContextAddress()) + + return nil +} + +func (host *vmHost) getContractCode(input *vmcommon.ContractCallInput) ([]byte, error) { + if err := host.checkGasForGetCode(input, host.Metering()); err != nil { + log.Trace("doRunSmartContractCall check gas for GetSCCode", "error", vmhost.ErrNotEnoughGas) + return nil, vmhost.ErrNotEnoughGas + } + + contract, err := host.Runtime().GetSCCode() if err != nil { - vmOutput = output.CreateVMOutputInCaseOfError(err) - return vmOutput + log.Trace("doRunSmartContractCall get code", "error", vmhost.ErrContractNotFound) + return nil, vmhost.ErrContractNotFound + } + + return contract, nil +} + +func (host *vmHost) prepareExecution(contract []byte) error { + metering := host.Metering() + if err := metering.DeductInitialGasForExecution(contract); err != nil { + log.Trace("doRunSmartContractCall initial gas", "error", vmhost.ErrNotEnoughGas) + return vmhost.ErrNotEnoughGas } + if err := host.Runtime().StartWasmerInstance(contract, metering.GetGasForExecution(), false); err != nil { + return vmhost.ErrContractInvalid + } + + return nil +} + +func (host *vmHost) finalizeExecution() *vmcommon.VMOutput { + output := host.Output() + output.RemoveNonUpdatedStorage() + vmOutput := output.GetVMOutput() + host.CompleteLogEntriesWithCallType(vmOutput, vmhost.DirectCallString) + return vmOutput +} + +func (host *vmHost) initStateCreateCodeDeployInput( + address []byte, + input vmcommon.VMInput, + function string, + code []byte, + codeMetadata []byte, +) vmhost.CodeDeployInput { + _, _, metering, output, runtime, _, storage := host.GetContexts() contractCallInput := &vmcommon.ContractCallInput{ - VMInput: input.VMInput, + VMInput: input, RecipientAddr: address, - Function: vmhost.InitFunctionName, + Function: function, } - runtime.SetVMInput(contractCallInput) - runtime.SetCodeAddress(address) - metering.InitStateFromContractCallInput(&input.VMInput) - - output.AddTxValueToAccount(address, input.CallValue) - storage.SetAddress(runtime.GetContextAddress()) + runtime.InitStateFromContractCallInput(contractCallInput) + metering.InitStateFromContractCallInput(&contractCallInput.VMInput) + output.AddTxValueToAccount(contractCallInput.RecipientAddr, contractCallInput.CallValue) + storage.SetAddress(address) codeDeployInput := vmhost.CodeDeployInput{ - ContractCode: input.ContractCode, - ContractCodeMetadata: input.ContractCodeMetadata, - ContractAddress: address, - CodeDeployerAddress: input.CallerAddr, + ContractCode: code, + ContractCodeMetadata: codeMetadata, + ContractAddress: contractCallInput.RecipientAddr, + CodeDeployerAddress: contractCallInput.CallerAddr, } + return codeDeployInput +} - vmOutput, err = host.performCodeDeploymentAtContractCreate(codeDeployInput) +func (host *vmHost) doRunSmartContractCreate(input *vmcommon.ContractCreateInput) *vmcommon.VMOutput { + host.InitState() + var vmOutput *vmcommon.VMOutput + defer func() { + host.logErrors("doRunSmartContractCreate", "init") + if vmOutput == nil || vmOutput.ReturnCode == vmcommon.ExecutionFailed { + host.Runtime().CleanInstance() + } + }() + + address, err := host.Blockchain().NewAddress(input.CallerAddr) + if err != nil { + vmOutput = host.Output().CreateVMOutputInCaseOfError(err) + return vmOutput + } + + codeDeployInput := host.initStateCreateCodeDeployInput(address, input.VMInput, vmhost.InitFunctionName, input.ContractCode, input.ContractCodeMetadata) + vmOutput, err = host.performCodeDeployment(codeDeployInput, host.callInitFunction) if err != nil { log.Trace("doRunSmartContractCreate", "error", err) - vmOutput = output.CreateVMOutputInCaseOfError(err) + vmOutput = host.Output().CreateVMOutputInCaseOfError(err) return vmOutput } @@ -80,7 +143,6 @@ func (host *vmHost) performCodeDeployment(input vmhost.CodeDeployInput, initFunc log.Trace("performCodeDeployment", "address", input.ContractAddress, "len(code)", len(input.ContractCode), "metadata", input.ContractCodeMetadata) _, _, metering, output, runtime, _, _ := host.GetContexts() - err := metering.DeductInitialGasForDirectDeployment(input) if err != nil { output.SetReturnCode(vmcommon.OutOfGas) @@ -88,7 +150,6 @@ func (host *vmHost) performCodeDeployment(input vmhost.CodeDeployInput, initFunc } runtime.MustVerifyNextContractCode() - err = runtime.StartWasmerInstance(input.ContractCode, metering.GetGasForExecution(), true) if err != nil { log.Trace("performCodeDeployment/StartWasmerInstance", "err", err) @@ -107,33 +168,18 @@ func (host *vmHost) performCodeDeployment(input vmhost.CodeDeployInput, initFunc return vmOutput, nil } -func (host *vmHost) performCodeDeploymentAtContractCreate(input vmhost.CodeDeployInput) (*vmcommon.VMOutput, error) { - return host.performCodeDeployment(input, host.callInitFunction) -} - -func (host *vmHost) performCodeDeploymentAtContractUpgrade(input vmhost.CodeDeployInput) (*vmcommon.VMOutput, error) { - return host.performCodeDeployment(input, host.callUpgradeFunction) -} - // doRunSmartContractUpgrade upgrades a contract directly func (host *vmHost) doRunSmartContractUpgrade(input *vmcommon.ContractCallInput) *vmcommon.VMOutput { host.InitState() - defer func() { - errs := host.GetRuntimeErrors() - if errs != nil { - log.Trace("doRunSmartContractUpgrade full error list", "error", errs) - } - }() - - _, _, metering, output, runtime, _, storage := host.GetContexts() - var vmOutput *vmcommon.VMOutput defer func() { + defer host.logErrors("doRunSmartContractUpgrade", "upgrade") if vmOutput == nil || vmOutput.ReturnCode == vmcommon.ExecutionFailed { - runtime.CleanInstance() + host.Runtime().CleanInstance() } }() + _, _, _, output, runtime, _, _ := host.GetContexts() err := host.checkUpgradePermission(input) if err != nil { log.Trace("doRunSmartContractUpgrade", "error", vmhost.ErrUpgradeNotAllowed) @@ -141,25 +187,15 @@ func (host *vmHost) doRunSmartContractUpgrade(input *vmcommon.ContractCallInput) return vmOutput } - runtime.InitStateFromContractCallInput(input) - metering.InitStateFromContractCallInput(&input.VMInput) - output.AddTxValueToAccount(input.RecipientAddr, input.CallValue) - storage.SetAddress(runtime.GetContextAddress()) - - code, codeMetadata, err := runtime.ExtractCodeUpgradeFromArgs() - if err != nil { + if len(input.Arguments) < numMinUpgradeArguments { vmOutput = output.CreateVMOutputInCaseOfError(vmhost.ErrInvalidUpgradeArguments) return vmOutput } - codeDeployInput := vmhost.CodeDeployInput{ - ContractCode: code, - ContractCodeMetadata: codeMetadata, - ContractAddress: input.RecipientAddr, - CodeDeployerAddress: input.CallerAddr, - } + codeDeployInput := host.initStateCreateCodeDeployInput(input.RecipientAddr, input.VMInput, input.Function, input.Arguments[0], input.Arguments[1]) + runtime.RemoveCodeUpgradeFromArgs() - vmOutput, err = host.performCodeDeploymentAtContractUpgrade(codeDeployInput) + vmOutput, err = host.performCodeDeployment(codeDeployInput, host.callUpgradeFunction) if err != nil { log.Trace("doRunSmartContractUpgrade", "error", err) vmOutput = output.CreateVMOutputInCaseOfError(err) @@ -194,71 +230,37 @@ func (host *vmHost) doRunSmartContractDelete(input *vmcommon.ContractCallInput) func (host *vmHost) doRunSmartContractCall(input *vmcommon.ContractCallInput) *vmcommon.VMOutput { host.InitState() - defer func() { - errs := host.GetRuntimeErrors() - if errs != nil { - log.Trace(fmt.Sprintf("doRunSmartContractCall full error list for %s", input.Function), "error", errs) - } - }() - - _, _, metering, output, runtime, async, storage := host.GetContexts() var vmOutput *vmcommon.VMOutput defer func() { + host.logErrors("doRunSmartContractCall", input.Function) if vmOutput == nil || vmOutput.ReturnCode == vmcommon.ExecutionFailed { host.Runtime().CleanInstance() } }() - runtime.InitStateFromContractCallInput(input) - - err := async.InitStateFromInput(input) + err := host.initializeExecution(input) if err != nil { - log.Trace("doRunSmartContractCall init async", "error", vmhost.ErrAsyncInit) - vmOutput = output.CreateVMOutputInCaseOfError(err) - return vmOutput - } - metering.InitStateFromContractCallInput(&input.VMInput) - output.AddTxValueToAccount(input.RecipientAddr, input.CallValue) - storage.SetAddress(runtime.GetContextAddress()) - - err = host.checkGasForGetCode(input, metering) - if err != nil { - log.Trace("doRunSmartContractCall check gas for GetSCCode", "error", vmhost.ErrNotEnoughGas) - vmOutput = output.CreateVMOutputInCaseOfError(vmhost.ErrNotEnoughGas) - return vmOutput - } - - contract, err := runtime.GetSCCode() - if err != nil { - log.Trace("doRunSmartContractCall get code", "error", vmhost.ErrContractNotFound) - vmOutput = output.CreateVMOutputInCaseOfError(vmhost.ErrContractNotFound) - return vmOutput + return host.Output().CreateVMOutputInCaseOfError(err) } - err = metering.DeductInitialGasForExecution(contract) + contract, err := host.getContractCode(input) if err != nil { - log.Trace("doRunSmartContractCall initial gas", "error", vmhost.ErrNotEnoughGas) - vmOutput = output.CreateVMOutputInCaseOfError(vmhost.ErrNotEnoughGas) - return vmOutput + return host.Output().CreateVMOutputInCaseOfError(err) } - err = runtime.StartWasmerInstance(contract, metering.GetGasForExecution(), false) + err = host.prepareExecution(contract) if err != nil { - vmOutput = output.CreateVMOutputInCaseOfError(vmhost.ErrContractInvalid) - return vmOutput + return host.Output().CreateVMOutputInCaseOfError(err) } err = host.callSCMethod() if err != nil { log.Trace("doRunSmartContractCall", "error", err) - vmOutput = output.CreateVMOutputInCaseOfError(err) - return vmOutput + return host.Output().CreateVMOutputInCaseOfError(err) } - output.RemoveNonUpdatedStorage() - vmOutput = output.GetVMOutput() - host.CompleteLogEntriesWithCallType(vmOutput, vmhost.DirectCallString) + vmOutput = host.finalizeExecution() log.Trace("doRunSmartContractCall finished", "retCode", vmOutput.ReturnCode, @@ -286,41 +288,56 @@ func copyTxHashesFromContext(runtime vmhost.RuntimeContext, input *vmcommon.Cont } // ExecuteOnDestContext pushes each context to the corresponding stack -// and initializes new contexts for executing the contract call with the given input -func (host *vmHost) ExecuteOnDestContext(input *vmcommon.ContractCallInput) (vmOutput *vmcommon.VMOutput, isChildComplete bool, err error) { +// and initializes new contexts for executing the contract call with the given input. +// This is used for handling nested contract calls to different addresses. It ensures +// that the execution of the child contract is isolated from the parent, and that +// the state is correctly merged or discarded after the execution finishes. +func (host *vmHost) ExecuteOnDestContext(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, bool, error) { log.Trace("ExecuteOnDestContext", "caller", input.CallerAddr, "dest", input.RecipientAddr, "function", input.Function, "gas", input.GasProvided) - scExecutionInput := input - blockchain := host.Blockchain() - blockchain.PushState() - if host.IsBuiltinFunctionName(input.Function) { - scExecutionInput, vmOutput, err = host.handleBuiltinFunctionCall(input) + var err error + var vmOutput *vmcommon.VMOutput + var isChildComplete bool + + defer func() { if err != nil { blockchain.PopSetActiveState() - host.Runtime().AddError(err, input.Function) - vmOutput = host.Output().CreateVMOutputInCaseOfError(err) - isChildComplete = true - return + } else { + blockchain.PopDiscard() } - host.completeLogEntriesAfterBuiltinCall(input, vmOutput) + }() + + if host.IsBuiltinFunctionName(input.Function) { + vmOutput, isChildComplete, err = host.executeBuiltinOnAndDestContext(input) + return vmOutput, isChildComplete, err } - isChildComplete = true + vmOutput, isChildComplete, err = host.executeOnDestContextNoBuiltinFunction(input) + host.addNewBackTransfersFromVMOutput(vmOutput, input.CallerAddr, input.RecipientAddr) + + return vmOutput, isChildComplete, err +} + +func (host *vmHost) executeBuiltinOnAndDestContext(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, bool, error) { + scExecutionInput, vmOutput, err := host.handleBuiltinFunctionCall(input) + if err != nil { + host.Runtime().AddError(err, input.Function) + vmOutput = host.Output().CreateVMOutputInCaseOfError(err) + return vmOutput, true, err + } + + host.completeLogEntriesAfterBuiltinCall(input, vmOutput) + + isChildComplete := true if scExecutionInput != nil { vmOutput, isChildComplete, err = host.executeOnDestContextNoBuiltinFunction(scExecutionInput) host.addNewBackTransfersFromVMOutput(vmOutput, scExecutionInput.CallerAddr, scExecutionInput.RecipientAddr) } - if err != nil { - blockchain.PopSetActiveState() - } else { - blockchain.PopDiscard() - } - - return + return vmOutput, isChildComplete, err } func (host *vmHost) isESDTTransferWithoutExecution(transferData []byte, parent, child []byte) (*vmcommon.ParsedESDTTransfers, bool) { @@ -411,12 +428,7 @@ func (host *vmHost) handleBuiltinFunctionCall(input *vmcommon.ContractCallInput) postBuiltinInput.AsyncArguments = input.AsyncArguments } - err = contexts.AddAsyncArgumentsToOutputTransfers( - host.Output(), - input.RecipientAddr, - input.AsyncArguments, - vm.AsynchronousCall, - builtinOutput) + err = contexts.AddAsyncArgumentsToOutputTransfers(input.AsyncArguments, builtinOutput) if err != nil { log.Trace("ExecuteOnDestContext builtin function", "error", err) return nil, nil, err @@ -568,8 +580,10 @@ func (host *vmHost) finishExecuteOnDestContext(executeErr error) *vmcommon.VMOut return vmOutput } -// ExecuteOnSameContext executes the contract call with the given input -// on the same runtime context. Some other contexts are backed up. +// ExecuteOnSameContext executes a contract call on the same address but with a different +// code address (i.e., a library call). It preserves the storage and async contexts but +// sets up new contexts for runtime, output, etc. The state of the modified contexts +// is restored after the execution finishes. func (host *vmHost) ExecuteOnSameContext(input *vmcommon.ContractCallInput) error { log.Trace("ExecuteOnSameContext", "function", input.Function) @@ -686,16 +700,7 @@ func (host *vmHost) IsBuiltinFunctionCall(data []byte) bool { } // CreateNewContract creates a new contract indirectly (from another Smart Contract) -func (host *vmHost) CreateNewContract(input *vmcommon.ContractCreateInput, createContractCallType int) (newContractAddress []byte, err error) { - newContractAddress = nil - err = nil - - defer func() { - if err != nil { - newContractAddress = nil - } - }() - +func (host *vmHost) CreateNewContract(input *vmcommon.ContractCreateInput, createContractCallType int) ([]byte, error) { _, blockchain, metering, output, runtime, _, _ := host.GetContexts() codeDeployInput := vmhost.CodeDeployInput{ @@ -704,24 +709,22 @@ func (host *vmHost) CreateNewContract(input *vmcommon.ContractCreateInput, creat ContractAddress: nil, CodeDeployerAddress: input.CallerAddr, } - err = metering.DeductInitialGasForIndirectDeployment(codeDeployInput) + err := metering.DeductInitialGasForIndirectDeployment(codeDeployInput) if err != nil { - return + return nil, err } if runtime.ReadOnly() { - err = vmhost.ErrInvalidCallOnReadOnlyMode - return + return nil, vmhost.ErrInvalidCallOnReadOnlyMode } - newContractAddress, err = blockchain.NewAddress(input.CallerAddr) + newContractAddress, err := blockchain.NewAddress(input.CallerAddr) if err != nil { - return + return nil, err } if blockchain.AccountExists(newContractAddress) { - err = vmhost.ErrDeploymentOverExistingAccount - return + return nil, vmhost.ErrDeploymentOverExistingAccount } codeDeployInput.ContractAddress = newContractAddress @@ -743,10 +746,11 @@ func (host *vmHost) CreateNewContract(input *vmcommon.ContractCreateInput, creat } var isChildComplete bool + var initVmOutput *vmcommon.VMOutput host.Async().SetAsyncArgumentsForCall(initCallInput) - initVmOutput, isChildComplete, err := host.ExecuteOnDestContext(initCallInput) + initVmOutput, isChildComplete, err = host.ExecuteOnDestContext(initCallInput) if err != nil { - return + return nil, err } if createContractCallType == vmhooks.DeployContract { @@ -757,12 +761,12 @@ func (host *vmHost) CreateNewContract(input *vmcommon.ContractCreateInput, creat err = host.Async().CompleteChildConditional(isChildComplete, nil, 0) if err != nil { - return + return nil, err } blockchain.IncreaseNonce(input.CallerAddr) - return + return newContractAddress, nil } func (host *vmHost) checkUpgradePermission(vmInput *vmcommon.ContractCallInput) error { @@ -797,14 +801,14 @@ func (host *vmHost) executeUpgrade(input *vmcommon.ContractCallInput) error { return err } - code, codeMetadata, err := runtime.ExtractCodeUpgradeFromArgs() - if err != nil { + if len(input.Arguments) < numMinUpgradeArguments { return vmhost.ErrInvalidUpgradeArguments } + runtime.RemoveCodeUpgradeFromArgs() codeDeployInput := vmhost.CodeDeployInput{ - ContractCode: code, - ContractCodeMetadata: codeMetadata, + ContractCode: input.Arguments[0], + ContractCodeMetadata: input.Arguments[1], ContractAddress: input.RecipientAddr, CodeDeployerAddress: input.CallerAddr, } diff --git a/vmhost/hostCore/host.go b/vmhost/hostCore/host.go index b2a3fdffc..aef69a77f 100644 --- a/vmhost/hostCore/host.go +++ b/vmhost/hostCore/host.go @@ -46,6 +46,9 @@ var allFlags = []core.EnableEpochFlag{ vmhost.ValidationOnGobDecodeFlag, vmhost.BarnardOpcodesFlag, vmhost.FixGetBalanceFlag, + vmhost.AsyncV3FixesFlag, + vmhost.AsyncV3Flag, + vmhost.FailConditionallyFlag, } // vmHost implements HostContext interface. @@ -54,8 +57,7 @@ type vmHost struct { mutExecution sync.RWMutex closingInstance bool executionTimeout time.Duration - - ethInput []byte + ethInput []byte blockchainContext vmhost.BlockchainContext runtimeContext vmhost.RuntimeContext @@ -379,15 +381,16 @@ func (host *vmHost) SetGasTracing(enableGasTracing bool) { host.meteringContext.SetGasTracing(enableGasTracing) } -// RunSmartContractCreate executes the deployment of a new contract +// RunSmartContractCreate executes the deployment of a new contract. +// It acquires an exclusive lock to ensure that no other executions are running in parallel on the same vmHost instance. func (host *vmHost) RunSmartContractCreate(input *vmcommon.ContractCreateInput) (vmOutput *vmcommon.VMOutput, err error) { err = validateVMInput(&input.VMInput) if err != nil { return nil, err } - host.mutExecution.RLock() - defer host.mutExecution.RUnlock() + host.mutExecution.Lock() + defer host.mutExecution.Unlock() if host.closingInstance { return nil, vmhost.ErrVMIsClosing @@ -445,15 +448,16 @@ func (host *vmHost) RunSmartContractCreate(input *vmcommon.ContractCreateInput) return } -// RunSmartContractCall executes the call of an existing contract +// RunSmartContractCall executes the call of an existing contract. +// It acquires an exclusive lock to ensure that no other executions are running in parallel on the same vmHost instance. func (host *vmHost) RunSmartContractCall(input *vmcommon.ContractCallInput) (vmOutput *vmcommon.VMOutput, err error) { err = validateVMInput(&input.VMInput) if err != nil { return nil, err } - host.mutExecution.RLock() - defer host.mutExecution.RUnlock() + host.mutExecution.Lock() + defer host.mutExecution.Unlock() if host.closingInstance { return nil, vmhost.ErrVMIsClosing diff --git a/vmhost/hosttest/execution_benchmark_test.go b/vmhost/hosttest/execution_benchmark_test.go index 2c6d3768c..0df863773 100644 --- a/vmhost/hosttest/execution_benchmark_test.go +++ b/vmhost/hosttest/execution_benchmark_test.go @@ -4,6 +4,8 @@ import ( "math" "math/big" "math/rand" + "os" + "path/filepath" "strings" "testing" "time" @@ -63,6 +65,41 @@ func Test_WarmInstancesFuzzyMemoryUsage(t *testing.T) { runMemoryUsageFuzzyBenchmark(t, 100, 100) } +func Test_JustNewDeploy(t *testing.T) { + mockWorld, ownerAccount, host, err := prepare(t, owner) + require.Nil(t, err) + + code, _ := os.ReadFile(filepath.Clean("world.wasm")) + // Deploy ERC20 + deployInput := &vmcommon.ContractCreateInput{ + VMInput: vmcommon.VMInput{ + CallerAddr: owner, + Arguments: [][]byte{{1}}, + CallValue: big.NewInt(0), + CallType: vm.DirectCall, + GasPrice: 0, + GasProvided: math.MaxInt64, + }, + ContractCode: code, + } + + mockWorld.NewAddressMocks = append(mockWorld.NewAddressMocks, &worldmock.NewAddressMock{ + CreatorAddress: owner, + CreatorNonce: ownerAccount.Nonce, + NewAddress: scAddress, + }) + ownerAccount.Nonce++ // nonce increases before deploy + vmOutput, err := host.RunSmartContractCreate(deployInput) + require.Nil(t, err) + require.NotNil(t, vmOutput) + require.Equal(t, "", vmOutput.ReturnMessage) + require.Equal(t, vmcommon.Ok, vmOutput.ReturnCode) + + // Ensure the deployment persists in the mock BlockchainHook + _ = mockWorld.UpdateAccounts(vmOutput.OutputAccounts, nil) + +} + func runERC20Benchmark(tb testing.TB, nTransfers int, nRuns int, failTransaction bool) { totalTokenSupply := big.NewInt(int64(nTransfers * nRuns)) mockWorld, ownerAccount, host, err := prepare(tb, owner) diff --git a/vmhost/hosttest/execution_test.go b/vmhost/hosttest/execution_test.go index a0121545b..b670d12f8 100644 --- a/vmhost/hosttest/execution_test.go +++ b/vmhost/hosttest/execution_test.go @@ -1081,10 +1081,10 @@ func TestExecution_ManagedBuffers_SetByteSlice(t *testing.T) { runTestMBufferSetByteSlice(t, true, 0, 26, vmcommon.Ok, []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ")) // Bounds exceeded, source remains unchanged lowercase. - runTestMBufferSetByteSlice(t, true, 18, 9, vmcommon.Ok, []byte("abcdefghijklmnopqrstuvwxyz")) - runTestMBufferSetByteSlice(t, true, -1, 2, vmcommon.Ok, []byte("abcdefghijklmnopqrstuvwxyz")) - runTestMBufferSetByteSlice(t, true, 25, 2, vmcommon.Ok, []byte("abcdefghijklmnopqrstuvwxyz")) - runTestMBufferSetByteSlice(t, true, 0, 27, vmcommon.Ok, []byte("abcdefghijklmnopqrstuvwxyz")) + runTestMBufferSetByteSlice(t, true, 18, 9, vmcommon.ExecutionFailed, []byte("abcdefghijklmnopqrstuvwxyz")) + runTestMBufferSetByteSlice(t, true, -1, 2, vmcommon.ExecutionFailed, []byte("abcdefghijklmnopqrstuvwxyz")) + runTestMBufferSetByteSlice(t, true, 25, 2, vmcommon.ExecutionFailed, []byte("abcdefghijklmnopqrstuvwxyz")) + runTestMBufferSetByteSlice(t, true, 0, 27, vmcommon.ExecutionFailed, []byte("abcdefghijklmnopqrstuvwxyz")) } func runTestMBufferSetByteSliceDeploy(t *testing.T, enabled bool, retCode vmcommon.ReturnCode) { @@ -1979,7 +1979,7 @@ func TestExecution_TransferESTDNFTExecute_NoFailExecution_WithReturnData(t *test returnVal := vmhooks.TransferESDTNFTExecuteWithTypedArgsWithFailure( host, - []byte(test.ChildAddress), + test.ChildAddress, []*vmcommon.ESDTTransfer{ &vmcommon.ESDTTransfer{ ESDTValue: big.NewInt(int64(testConfig.ESDTTokensToTransfer)), diff --git a/vmhost/hosttest/managedei_test.go b/vmhost/hosttest/managedei_test.go index 16a11ce4e..a728cdc31 100644 --- a/vmhost/hosttest/managedei_test.go +++ b/vmhost/hosttest/managedei_test.go @@ -1231,8 +1231,7 @@ func Test_ManagedGenerateKeyEC(t *testing.T) { WithFunction("testFunction"). Build()). AndAssertResults(func(world *worldmock.MockWorld, verify *test.VMOutputVerifier) { - verify. - Ok() + verify.UserError() }) assert.Nil(t, err) } diff --git a/vmhost/hosttest/world.wasm b/vmhost/hosttest/world.wasm new file mode 100644 index 000000000..b73d60338 Binary files /dev/null and b/vmhost/hosttest/world.wasm differ diff --git a/vmhost/interface.go b/vmhost/interface.go index 1f12afbfa..efa92ff7e 100644 --- a/vmhost/interface.go +++ b/vmhost/interface.go @@ -133,7 +133,7 @@ type RuntimeContext interface { Arguments() [][]byte GetCurrentTxHash() []byte GetOriginalTxHash() []byte - ExtractCodeUpgradeFromArgs() ([]byte, []byte, error) + RemoveCodeUpgradeFromArgs() SignalUserError(message string) FailExecution(err error) MustVerifyNextContractCode() @@ -144,6 +144,8 @@ type RuntimeContext interface { IsFunctionImported(name string) bool ReadOnly() bool SetReadOnly(readOnly bool) + IsUnsafeMode() bool + SetUnsafeMode(unsafeMode bool) StartWasmerInstance(contract []byte, gasLimit uint64, newCode bool) error ClearWarmInstanceCache() SetMaxInstanceStackSize(uint64) @@ -400,10 +402,9 @@ type AsyncContext interface { GetAsyncCallByCallID(callID []byte) AsyncCallLocation LoadParentContextFromStackOrStorage() (AsyncContext, error) - ExecuteSyncCallbackAndFinishOutput( + ExecuteLocalCallbackAndFinishOutput( asyncCall *AsyncCall, vmOutput *vmcommon.VMOutput, - destinationCallInput *vmcommon.ContractCallInput, gasAccumulated uint64, err error) (bool, *vmcommon.VMOutput) diff --git a/vmhost/vmhooks/baseOps.go b/vmhost/vmhooks/baseOps.go index c2e1f2aa8..36ca88056 100644 --- a/vmhost/vmhooks/baseOps.go +++ b/vmhost/vmhooks/baseOps.go @@ -26,12 +26,10 @@ const ( getExternalBalanceName = "getExternalBalance" blockHashName = "blockHash" transferValueName = "transferValue" - transferESDTExecuteName = "transferESDTExecute" transferESDTNFTExecuteName = "transferESDTNFTExecute" multiTransferESDTNFTExecuteName = "multiTransferESDTNFTExecute" transferValueExecuteName = "transferValueExecute" createAsyncCallName = "createAsyncCall" - setAsyncGroupCallbackName = "setAsyncGroupCallback" setAsyncContextCallbackName = "setAsyncContextCallback" getArgumentLengthName = "getArgumentLength" getArgumentName = "getArgument" @@ -44,11 +42,6 @@ const ( getCallerName = "getCaller" checkNoPaymentName = "checkNoPayment" callValueName = "callValue" - getESDTValueName = "getESDTValue" - getESDTTokenNameName = "getESDTTokenName" - getESDTTokenNonceName = "getESDTTokenNonce" - getESDTTokenTypeName = "getESDTTokenType" - getCallValueTokenNameName = "getCallValueTokenName" getESDTValueByIndexName = "getESDTValueByIndex" getESDTTokenNameByIndexName = "getESDTTokenNameByIndex" getESDTTokenNonceByIndexName = "getESDTTokenNonceByIndex" @@ -66,7 +59,6 @@ const ( getESDTNFTAttributeLengthName = "getESDTNFTAttributeLength" getESDTNFTURILengthName = "getESDTNFTURILength" getESDTTokenDataName = "getESDTTokenData" - getESDTLocalRolesName = "getESDTLocalRoles" validateTokenIdentifierName = "validateTokenIdentifier" executeOnDestContextName = "executeOnDestContext" executeOnSameContextName = "executeOnSameContext" @@ -84,8 +76,6 @@ const ( deleteFromReturnDataName = "deleteFromReturnData" setStorageLockName = "setStorageLock" getStorageLockName = "getStorageLock" - isStorageLockedName = "isStorageLocked" - clearStorageLockName = "clearStorageLock" getBlockTimestampName = "getBlockTimestamp" getBlockTimestampMsName = "getBlockTimestampMs" getBlockNonceName = "getBlockNonce" @@ -117,22 +107,20 @@ const ( var logEEI = logger.GetOrCreate("vm/eei") -func getESDTTransferFromInputFailIfWrongIndex(host vmhost.VMHost, index int32) *vmcommon.ESDTTransfer { +func getESDTTransferFromInput(host vmhost.VMHost, index int32) (*vmcommon.ESDTTransfer, error) { esdtTransfers := host.Runtime().GetVMInput().ESDTTransfers if int32(len(esdtTransfers))-1 < index || index < 0 { - FailExecution(host, vmhost.ErrInvalidTokenIndex) - return nil + return nil, vmhost.ErrInvalidTokenIndex } - return esdtTransfers[index] + return esdtTransfers[index], nil } -func failIfMoreThanOneESDTTransfer(context *VMHooksImpl) bool { +func failIfMoreThanOneESDTTransfer(context *VMHooksImpl) error { runtime := context.GetRuntimeContext() if len(runtime.GetVMInput().ESDTTransfers) > 1 { - FailExecution(context.GetVMHost(), vmhost.ErrTooManyESDTTransfers) - return true + return vmhost.ErrTooManyESDTTransfers } - return false + return nil } // GetGasLeft VMHooks implementation. @@ -144,7 +132,7 @@ func (context *VMHooksImpl) GetGasLeft() int64 { err := metering.UseGasBoundedAndAddTracedGas(getGasLeftName, gasToUse) if err != nil { context.FailExecution(err) - return 0 + return -1 } return int64(metering.GasLeft()) @@ -306,14 +294,14 @@ func (context *VMHooksImpl) GetBlockHash(nonce int64, resultOffset executor.MemP err := metering.UseGasBoundedAndAddTracedGas(blockHashName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } hash := blockchain.BlockHash(uint64(nonce)) err = context.MemStore(resultOffset, hash) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -366,11 +354,11 @@ func (context *VMHooksImpl) GetESDTBalance( metering.StartGasTracing(getESDTBalanceName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if err != nil { context.FailExecution(err) return -1 } + err = context.MemStore(resultOffset, esdtData.Value.Bytes()) if err != nil { context.FailExecution(err) @@ -392,14 +380,14 @@ func (context *VMHooksImpl) GetESDTNFTNameLength( metering.StartGasTracing(getESDTNFTNameLengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if err != nil { context.FailExecution(err) return -1 } + if esdtData == nil || esdtData.TokenMetaData == nil { - FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) - return 0 + FailExecutionConditionally(context.GetVMHost(), vmhost.ErrNilESDTData) + return -1 } return int32(len(esdtData.TokenMetaData.Name)) @@ -417,14 +405,14 @@ func (context *VMHooksImpl) GetESDTNFTAttributeLength( metering.StartGasTracing(getESDTNFTAttributeLengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if err != nil { context.FailExecution(err) return -1 } + if esdtData == nil || esdtData.TokenMetaData == nil { - FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) - return 0 + FailExecutionConditionally(context.GetVMHost(), vmhost.ErrNilESDTData) + return -1 } return int32(len(esdtData.TokenMetaData.Attributes)) @@ -442,14 +430,14 @@ func (context *VMHooksImpl) GetESDTNFTURILength( metering.StartGasTracing(getESDTNFTURILengthName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if err != nil { context.FailExecution(err) return -1 } + if esdtData == nil || esdtData.TokenMetaData == nil { - FailExecution(context.GetVMHost(), vmhost.ErrNilESDTData) - return 0 + FailExecutionConditionally(context.GetVMHost(), vmhost.ErrNilESDTData) + return -1 } if len(esdtData.TokenMetaData.URIs) == 0 { return 0 @@ -479,7 +467,6 @@ func (context *VMHooksImpl) GetESDTTokenData( metering.StartGasTracing(getESDTTokenDataName) esdtData, err := getESDTDataFromBlockchainHook(context, addressOffset, tokenIDOffset, tokenIDLen, nonce) - if err != nil { context.FailExecution(err) return -1 @@ -613,44 +600,44 @@ func (context *VMHooksImpl) TransferValue( err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { context.FailExecution(err) - return 1 + return -1 } sender := runtime.GetContextAddress() dest, err := context.MemLoad(destOffset, vmhost.AddressLen) if err != nil { context.FailExecution(err) - return 1 + return -1 } valueBytes, err := context.MemLoad(valueOffset, vmhost.BalanceLen) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(length)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } if host.IsBuiltinFunctionCall(data) { context.FailExecution(vmhost.ErrTransferValueOnESDTCall) - return 1 + return -1 } err = output.Transfer(dest, sender, 0, 0, big.NewInt(0).SetBytes(valueBytes), nil, data, vm.DirectCall) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -813,14 +800,14 @@ func (context *VMHooksImpl) TransferValueExecuteWithHost( err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { context.FailExecution(err) - return 1 + return -1 } callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, destOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) if err != nil { FailExecution(host, err) - return 1 + return -1 } return TransferValueExecuteWithTypedArgs( @@ -851,7 +838,7 @@ func TransferValueExecuteWithTypedArgs( if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } sender := runtime.GetContextAddress() @@ -871,14 +858,14 @@ func TransferValueExecuteWithTypedArgs( ) if err != nil { FailExecution(host, err) - return 1 + return -1 } } if contractCallInput != nil { if host.IsBuiltinFunctionName(contractCallInput.Function) { FailExecution(host, vmhost.ErrNilESDTData) - return 1 + return -1 } } @@ -891,7 +878,7 @@ func TransferValueExecuteWithTypedArgs( if host.IsBuiltinFunctionCall([]byte(data)) && lastRound >= uint64(host.EnableEpochsHandler().GetActivationEpoch(vmhost.CheckBuiltInCallOnTransferValueAndFailExecutionFlag)) { FailExecution(host, vmhost.ErrTransferValueOnESDTCall) - return 1 + return -1 } if host.AreInSameShard(sender, dest) && contractCallInput != nil && host.Blockchain().IsSmartContract(dest) { @@ -900,7 +887,7 @@ func TransferValueExecuteWithTypedArgs( if err != nil { logEEI.Trace("eGLD pre-transfer execution failed", "error", err) FailExecution(host, err) - return 1 + return -1 } host.CompleteLogEntriesWithCallType(vmOutput, vmhost.TransferAndExecuteString) @@ -910,13 +897,13 @@ func TransferValueExecuteWithTypedArgs( err = metering.UseGasBounded(uint64(gasLimit)) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } err = output.Transfer(dest, sender, uint64(gasLimit), 0, value, nil, []byte(data), vm.DirectCall) if err != nil { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -1004,21 +991,21 @@ func (context *VMHooksImpl) MultiTransferESDTNFTExecute( if numTokenTransfers == 0 { FailExecution(host, vmhost.ErrFailedTransfer) - return 1 + return -1 } callArgs, err := context.extractIndirectContractCallArgumentsWithoutValue( host, destOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(callArgs.actualLen)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } transferArgs, actualLen, err := context.getArgumentsFromMemory( @@ -1030,14 +1017,14 @@ func (context *VMHooksImpl) MultiTransferESDTNFTExecute( if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } transfers := make([]*vmcommon.ESDTTransfer, numTokenTransfers) @@ -1086,21 +1073,21 @@ func (context *VMHooksImpl) TransferESDTNFTExecuteWithHost( tokenIdentifier, executeErr := context.MemLoad(tokenIDOffset, tokenIDLen) if executeErr != nil { FailExecution(host, executeErr) - return 1 + return -1 } callArgs, err := context.extractIndirectContractCallArgumentsWithValue( host, destOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse := math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(callArgs.actualLen)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } transfer := &vmcommon.ESDTTransfer{ @@ -1155,7 +1142,7 @@ func TransferESDTNFTExecuteWithTypedArgsWithFailure( err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } sender := runtime.GetContextAddress() @@ -1175,7 +1162,7 @@ func TransferESDTNFTExecuteWithTypedArgsWithFailure( ) if executeErr != nil { FailExecution(host, executeErr) - return 1 + return -1 } contractCallInput.ESDTTransfers = transfers @@ -1241,7 +1228,7 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( err := metering.UseGasBounded(gasToUse) if err != nil { FailExecution(host, err) - return 1 + return -1 } sender := runtime.GetContextAddress() @@ -1261,7 +1248,7 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( ) if executeErr != nil { FailExecution(host, executeErr) - return 1 + return -1 } contractCallInput.ESDTTransfers = transfers @@ -1278,7 +1265,7 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( gasLimitForExec, executeErr := output.TransferESDT(transfersArgs, contractCallInput) if executeErr != nil { // no fail execution is needed here - transfer was not successful, returning error which can be treated at SC level - return 1 + return -1 } if host.AreInSameShard(sender, dest) && contractCallInput != nil && host.Blockchain().IsSmartContract(dest) { @@ -1302,10 +1289,10 @@ func TransferESDTNFTExecuteByUserWithTypedArgs( if executeErr != nil { // fail execution is needed here - tokens are at destination contract, so fail is needed to revert everything FailExecution(host, executeErr) - return 1 + return -1 } - return 1 + return -1 } return 0 @@ -1360,31 +1347,31 @@ func (context *VMHooksImpl) CreateAsyncCallWithHost(host vmhost.VMHost, calledSCAddress, err := context.MemLoad(destOffset, vmhost.AddressLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, dataLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } successFunc, err := context.MemLoad(successOffset, successLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } errorFunc, err := context.MemLoad(errorOffset, errorLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } return CreateAsyncCallWithTypedArgs(host, @@ -1419,7 +1406,7 @@ func CreateAsyncCallWithTypedArgs(host vmhost.VMHost, err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } asyncCall := &vmhost.AsyncCall{ @@ -1439,14 +1426,14 @@ func CreateAsyncCallWithTypedArgs(host vmhost.VMHost, err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } } err = async.RegisterAsyncCall("", asyncCall) if err != nil { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -1471,19 +1458,19 @@ func (context *VMHooksImpl) SetAsyncContextCallback( err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } callbackNameBytes, err := context.MemLoad(callback, callbackLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } dataBytes, err := context.MemLoad(data, dataLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = async.SetContextCallback( @@ -1492,7 +1479,7 @@ func (context *VMHooksImpl) SetAsyncContextCallback( uint64(gas)) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -1902,7 +1889,7 @@ func (context *VMHooksImpl) GetArgumentLength(id int32) int32 { args := runtime.Arguments() if id < 0 || int32(len(args)) <= id { - context.FailExecution(vmhost.ErrInvalidArgument) + context.FailExecutionConditionally(vmhost.ErrInvalidArgument) return -1 } @@ -1924,7 +1911,7 @@ func (context *VMHooksImpl) GetArgument(id int32, argOffset executor.MemPtr) int args := runtime.Arguments() if id < 0 || int32(len(args)) <= id { - context.FailExecution(vmhost.ErrInvalidArgument) + context.FailExecutionConditionally(vmhost.ErrInvalidArgument) return -1 } @@ -2246,9 +2233,7 @@ func SetStorageLockWithTypedArgs(host vmhost.VMHost, key []byte, lockTimestamp i return int32(storageStatus) } -// GetStorageLock VMHooks implementation. -// @autogenerate(VMHooks) -func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { +func (context *VMHooksImpl) getStorageLockUnchecked(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { metering := context.GetMeteringContext() storage := context.GetStorageContext() @@ -2285,8 +2270,22 @@ func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength } timeLock := big.NewInt(0).SetBytes(data).Int64() + return timeLock +} - // TODO if timelock <= currentTimeStamp { fail somehow } +// GetStorageLock VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength executor.MemLength) int64 { + timeLock := context.getStorageLockUnchecked(keyOffset, keyLength) + + timelockExpired := timeLock <= context.GetBlockTimestamp() + if timelockExpired { + isTimeLockCheckEnabled := context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) + if isTimeLockCheckEnabled { + context.FailExecutionConditionally(vmhost.ErrTimeLockExpired) + } + return -1 + } return timeLock } @@ -2294,13 +2293,9 @@ func (context *VMHooksImpl) GetStorageLock(keyOffset executor.MemPtr, keyLength // IsStorageLocked VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) IsStorageLocked(keyOffset executor.MemPtr, keyLength executor.MemLength) int32 { - timeLock := context.GetStorageLock(keyOffset, keyLength) - if timeLock < 0 { - return -1 - } - - currentTimestamp := context.GetBlockTimestamp() - if timeLock <= currentTimestamp { + timeLock := context.getStorageLockUnchecked(keyOffset, keyLength) + timelockExpired := timeLock <= context.GetBlockTimestamp() + if timelockExpired { return 0 } @@ -2387,8 +2382,9 @@ func (context *VMHooksImpl) GetCallValue(resultOffset executor.MemPtr) int32 { // GetESDTValue VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTValue(resultOffset executor.MemPtr) int32 { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return -1 } return context.GetESDTValueByIndex(resultOffset, 0) @@ -2408,7 +2404,12 @@ func (context *VMHooksImpl) GetESDTValueByIndex(resultOffset executor.MemPtr, in var value []byte - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return -1 + } + if esdtTransfer != nil && esdtTransfer.ESDTValue.Cmp(vmhost.Zero) > 0 { value = esdtTransfer.ESDTValue.Bytes() value = vmhost.PadBytesLeft(value, vmhost.BalanceLen) @@ -2426,8 +2427,9 @@ func (context *VMHooksImpl) GetESDTValueByIndex(resultOffset executor.MemPtr, in // GetESDTTokenName VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTTokenName(resultOffset executor.MemPtr) int32 { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return -1 } return context.GetESDTTokenNameByIndex(resultOffset, 0) @@ -2445,26 +2447,27 @@ func (context *VMHooksImpl) GetESDTTokenNameByIndex(resultOffset executor.MemPtr return -1 } - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) - var tokenName []byte - if esdtTransfer != nil { - tokenName = esdtTransfer.ESDTTokenName + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return -1 } - err = context.MemStore(resultOffset, tokenName) + err = context.MemStore(resultOffset, esdtTransfer.ESDTTokenName) if err != nil { context.FailExecution(err) return -1 } - return int32(len(tokenName)) + return int32(len(esdtTransfer.ESDTTokenName)) } // GetESDTTokenNonce VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTTokenNonce() int64 { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return -1 } return context.GetESDTTokenNonceByIndex(0) @@ -2482,12 +2485,13 @@ func (context *VMHooksImpl) GetESDTTokenNonceByIndex(index int32) int64 { return -1 } - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) - nonce := uint64(0) - if esdtTransfer != nil { - nonce = esdtTransfer.ESDTTokenNonce + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return -1 } - return int64(nonce) + + return int64(esdtTransfer.ESDTTokenNonce) } // GetCurrentESDTNFTNonce VMHooks implementation. @@ -2503,20 +2507,20 @@ func (context *VMHooksImpl) GetCurrentESDTNFTNonce( destination, err := context.MemLoad(addressOffset, vmhost.AddressLen) if err != nil { context.FailExecution(err) - return 0 + return -1 } tokenID, err := context.MemLoad(tokenIDOffset, tokenIDLen) if err != nil { context.FailExecution(err) - return 0 + return -1 } key := []byte(core.ProtectedKeyPrefix + core.ESDTNFTLatestNonceIdentifier + string(tokenID)) data, trieDepth, _, err := storage.GetStorageFromAddress(destination, key) if err != nil { context.FailExecution(err) - return 0 + return -1 } err = storage.UseGasForStorageLoad( @@ -2526,7 +2530,7 @@ func (context *VMHooksImpl) GetCurrentESDTNFTNonce( false) if err != nil { context.FailExecution(err) - return 0 + return -1 } nonce := big.NewInt(0).SetBytes(data).Uint64() @@ -2536,8 +2540,9 @@ func (context *VMHooksImpl) GetCurrentESDTNFTNonce( // GetESDTTokenType VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetESDTTokenType() int32 { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return -1 } return context.GetESDTTokenTypeByIndex(0) @@ -2555,11 +2560,13 @@ func (context *VMHooksImpl) GetESDTTokenTypeByIndex(index int32) int32 { return -1 } - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) - if esdtTransfer != nil { - return int32(esdtTransfer.ESDTTokenType) + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return -1 } - return 0 + + return int32(esdtTransfer.ESDTTokenType) } // GetNumESDTTransfers VMHooks implementation. @@ -2581,8 +2588,9 @@ func (context *VMHooksImpl) GetNumESDTTransfers() int32 { // GetCallValueTokenName VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) GetCallValueTokenName(callValueOffset executor.MemPtr, tokenNameOffset executor.MemPtr) int32 { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return -1 } return context.GetCallValueTokenNameByIndex(callValueOffset, tokenNameOffset, 0) @@ -2607,13 +2615,16 @@ func (context *VMHooksImpl) GetCallValueTokenNameByIndex( callValue := runtime.GetVMInput().CallValue.Bytes() tokenName := make([]byte, 0) - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) - if esdtTransfer != nil { - tokenName = make([]byte, len(esdtTransfer.ESDTTokenName)) - copy(tokenName, esdtTransfer.ESDTTokenName) - callValue = esdtTransfer.ESDTValue.Bytes() + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return -1 } + + tokenName = make([]byte, len(esdtTransfer.ESDTTokenName)) + copy(tokenName, esdtTransfer.ESDTTokenName) + callValue = esdtTransfer.ESDTValue.Bytes() callValue = vmhost.PadBytesLeft(callValue, vmhost.BalanceLen) err = context.MemStore(tokenNameOffset, tokenName) @@ -3108,7 +3119,7 @@ func (context *VMHooksImpl) ExecuteOnSameContextWithHost( host, addressOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) if err != nil { FailExecution(host, err) - return 1 + return -1 } return ExecuteOnSameContextWithTypedArgs( @@ -3159,13 +3170,13 @@ func ExecuteOnSameContextWithTypedArgs( } if host.IsBuiltinFunctionName(contractCallInput.Function) { - FailExecution(host, vmhost.ErrInvalidBuiltInFunctionCall) - return 1 + FailExecutionConditionally(host, vmhost.ErrInvalidBuiltInFunctionCall) + return -1 } err = host.ExecuteOnSameContext(contractCallInput) if err != nil { - FailExecution(host, err) + FailExecutionConditionally(host, err) return -1 } @@ -3218,7 +3229,7 @@ func (context *VMHooksImpl) ExecuteOnDestContextWithHost( host, addressOffset, valueOffset, functionOffset, functionLength, numArguments, argumentsLengthOffset, dataOffset) if err != nil { FailExecution(host, err) - return 1 + return -1 } return ExecuteOnDestContextWithTypedArgs( @@ -3267,7 +3278,7 @@ func ExecuteOnDestContextWithTypedArgs( ) if err != nil { FailExecution(host, err) - return 1 + return -1 } vmOutput, err := executeOnDestContextFromAPI(host, contractCallInput) @@ -3376,8 +3387,8 @@ func ExecuteReadOnlyWithTypedArguments( } if host.IsBuiltinFunctionName(contractCallInput.Function) { - FailExecution(host, vmhost.ErrInvalidBuiltInFunctionCall) - return 1 + FailExecutionConditionally(host, vmhost.ErrInvalidBuiltInFunctionCall) + return -1 } wasReadOnly := runtime.ReadOnly() @@ -3386,7 +3397,7 @@ func ExecuteReadOnlyWithTypedArguments( runtime.SetReadOnly(wasReadOnly) if err != nil { - FailExecution(host, err) + FailExecutionConditionally(host, err) return -1 } @@ -3449,19 +3460,19 @@ func (context *VMHooksImpl) createContractWithHost( value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } code, err := context.MemLoad(codeOffset, length) if err != nil { FailExecution(host, err) - return 1 + return -1 } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } data, actualLen, err := context.getArgumentsFromMemory( @@ -3472,14 +3483,14 @@ func (context *VMHooksImpl) createContractWithHost( ) if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } valueAsInt := big.NewInt(0).SetBytes(value) @@ -3487,13 +3498,13 @@ func (context *VMHooksImpl) createContractWithHost( if err != nil { FailExecution(host, err) - return 1 + return -1 } err = context.MemStore(resultOffset, newAddress) if err != nil { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -3520,25 +3531,25 @@ func (context *VMHooksImpl) DeployFromSourceContract( err := metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } value, err := context.MemLoad(valueOffset, vmhost.BalanceLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } sourceContractAddress, err := context.MemLoad(sourceContractAddressOffset, vmhost.AddressLen) if err != nil { FailExecution(host, err) - return 1 + return -1 } codeMetadata, err := context.MemLoad(codeMetadataOffset, vmhost.CodeMetadataLen) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, actualLen, err := context.getArgumentsFromMemory( @@ -3549,14 +3560,14 @@ func (context *VMHooksImpl) DeployFromSourceContract( ) if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(actualLen)) err = metering.UseGasBounded(gasToUse) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } newAddress, err := DeployFromSourceContractWithTypedArgs( @@ -3570,13 +3581,13 @@ func (context *VMHooksImpl) DeployFromSourceContract( if err != nil { context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultAddressOffset, newAddress) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -3670,8 +3681,8 @@ func (context *VMHooksImpl) GetReturnDataSize(resultID int32) int32 { returnData := output.ReturnData() if resultID >= int32(len(returnData)) || resultID < 0 { - context.FailExecution(vmhost.ErrInvalidArgument) - return 0 + context.FailExecutionConditionally(vmhost.ErrInvalidArgument) + return -1 } return int32(len(returnData[resultID])) @@ -3690,7 +3701,7 @@ func (context *VMHooksImpl) GetReturnData(resultID int32, dataOffset executor.Me err := context.MemStore(dataOffset, result) if err != nil { context.FailExecution(err) - return 0 + return -1 } return int32(len(result)) diff --git a/vmhost/vmhooks/baseOps_test.go b/vmhost/vmhooks/baseOps_test.go new file mode 100644 index 000000000..ac52b5780 --- /dev/null +++ b/vmhost/vmhooks/baseOps_test.go @@ -0,0 +1,855 @@ +package vmhooks + +import ( + "math/big" + "testing" + + "github.com/multiversx/mx-chain-core-go/data/esdt" + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/multiversx/mx-chain-vm-go/vmhost" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_GetGasLeft(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _ := createTestVMHooks() + + gasLeft := hooks.GetGasLeft() + require.Equal(t, int64(100), gasLeft) +} + +func TestVMHooksImpl_GetSCAddress(t *testing.T) { + t.Parallel() + hooks, _, runtime, _, _, _ := createTestVMHooks() + + scAddress := []byte("sc-address") + runtime.On("GetContextAddress").Return(scAddress) + + hooks.GetSCAddress(0) + runtime.AssertCalled(t, "GetContextAddress") +} + +func TestVMHooksImpl_GetOwnerAddress(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + ownerAddress := []byte("owner-address") + blockchain.On("GetOwnerAddress").Return(ownerAddress, nil) + + hooks.GetOwnerAddress(0) + blockchain.AssertCalled(t, "GetOwnerAddress") +} + +func TestVMHooksImpl_GetShardOfAddress(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("GetShardOfAddress", mock.Anything).Return(uint32(1)) + + shard := hooks.GetShardOfAddress(0) + require.Equal(t, int32(1), shard) +} + +func TestVMHooksImpl_IsSmartContract(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("IsSmartContract", mock.Anything).Return(true) + + isSC := hooks.IsSmartContract(0) + require.Equal(t, int32(1), isSC) +} + +func TestVMHooksImpl_SignalError(t *testing.T) { + t.Parallel() + vmHooks := createTestVMHooksClear() + baseMeteringSetup(vmHooks.metering) + vmHooks.runtime.On("GetInstance").Return(vmHooks.instance) + + errorMessage := "error message" + vmHooks.instance.On("MemLoad", mock.Anything, mock.Anything).Return([]byte(errorMessage), nil) + vmHooks.runtime.On("SignalUserError", errorMessage).Return() + + vmHooks.hooks.SignalError(0, 0) + vmHooks.runtime.AssertCalled(t, "SignalUserError", errorMessage) +} + +func TestVMHooksImpl_GetExternalBalance(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + balance := big.NewInt(100) + blockchain.On("GetBalance", mock.Anything).Return(balance.Bytes()) + + hooks.GetExternalBalance(0, 0) + blockchain.AssertCalled(t, "GetBalance", mock.Anything) +} + +func TestVMHooksImpl_GetBlockHash(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockHash := []byte("block-hash") + blockchain.On("BlockHash", mock.Anything).Return(blockHash) + + ret := hooks.GetBlockHash(0, 0) + require.Equal(t, int32(0), ret) + blockchain.AssertCalled(t, "BlockHash", mock.Anything) +} + +func TestVMHooksImpl_GetESDTBalance(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + esdtToken := &esdt.ESDigitalToken{ + Value: big.NewInt(100), + } + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(esdtToken, nil) + + ret := hooks.GetESDTBalance(0, 0, 0, 0, 0) + require.NotEqual(t, int32(-1), ret) +} + +func TestVMHooksImpl_GetESDTNFTNameLength(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + esdtToken := &esdt.ESDigitalToken{ + TokenMetaData: &esdt.MetaData{ + Name: []byte("test-token"), + }, + } + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(esdtToken, nil) + + ret := hooks.GetESDTNFTNameLength(0, 0, 0, 0) + require.Equal(t, int32(len(esdtToken.TokenMetaData.Name)), ret) +} + +func TestVMHooksImpl_GetESDTNFTAttributeLength(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + esdtToken := &esdt.ESDigitalToken{ + TokenMetaData: &esdt.MetaData{ + Attributes: []byte("test-attributes"), + }, + } + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(esdtToken, nil) + + ret := hooks.GetESDTNFTAttributeLength(0, 0, 0, 0) + require.Equal(t, int32(len(esdtToken.TokenMetaData.Attributes)), ret) +} + +func TestVMHooksImpl_GetESDTNFTURILength(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + esdtToken := &esdt.ESDigitalToken{ + TokenMetaData: &esdt.MetaData{ + URIs: [][]byte{[]byte("test-uri")}, + }, + } + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(esdtToken, nil) + + ret := hooks.GetESDTNFTURILength(0, 0, 0, 0) + require.Equal(t, int32(len(esdtToken.TokenMetaData.URIs[0])), ret) +} + +func TestVMHooksImpl_GetESDTTokenData(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, managedType := createTestVMHooksFull() + + esdtToken := &esdt.ESDigitalToken{ + Value: big.NewInt(100), + Properties: []byte("properties"), + TokenMetaData: &esdt.MetaData{ + Hash: []byte("hash"), + Name: []byte("name"), + Attributes: []byte("attributes"), + Creator: []byte("creator"), + Royalties: 10, + URIs: [][]byte{[]byte("uri")}, + }, + } + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(esdtToken, nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + ret := hooks.GetESDTTokenData(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + require.NotEqual(t, int32(-1), ret) +} + +func TestVMHooksImpl_GetESDTLocalRoles(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetBytes", mock.Anything).Return([]byte("token-id"), nil) + vmHooks.storage.On("GetStorage", mock.Anything).Return(nil, uint32(0), false, nil) + vmHooks.storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := vmHooks.hooks.GetESDTLocalRoles(0) + require.NotEqual(t, int64(-1), ret) +} + +func TestVMHooksImpl_ValidateTokenIdentifier(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetBytes", mock.Anything).Return([]byte("TEST-123456"), nil) + + ret := vmHooks.hooks.ValidateTokenIdentifier(0) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_TransferValue(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, output, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + runtime.On("GetContextAddress").Return([]byte("sender")) + output.On("Transfer", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.TransferValue(0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_TransferValueExecute(t *testing.T) { + t.Parallel() + hooks, host, runtime, metering, output, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(false) + + runtime.On("GetContextAddress").Return([]byte("sender")) + output.On("Transfer", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.TransferValueExecute(0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_CreateAsyncCall(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, _, _, async, _ := createTestVMHooksWithSetMetering() + + async.On("RegisterAsyncCall", mock.Anything, mock.Anything).Return(nil) + + ret := hooks.CreateAsyncCall(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_SetAsyncContextCallback(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, _, _, async, _ := createTestVMHooksWithSetMetering() + + async.On("SetContextCallback", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.SetAsyncContextCallback(0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_UpgradeContract(t *testing.T) { + t.Parallel() + + hooks, _, runtime, _, _, _, _, _, async, _ := createTestVMHooksWithSetMetering() + + runtime.On("SetRuntimeBreakpointValue", mock.Anything).Return() + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.UpgradeContract(0, 1000000, 0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_UpgradeFromSourceContract(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _, async, _ := createTestVMHooksWithSetMetering() + + blockchain.On("GetCode", mock.Anything).Return([]byte("code"), nil) + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.UpgradeFromSourceContract(0, 1000000, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_DeleteContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.DeleteContract(0, 1000000, 0, 0, 0) +} + +func TestVMHooksImpl_AsyncCall(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.AsyncCall(0, 0, 0, 0) +} + +func TestVMHooksImpl_GetArgumentLength(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("Arguments").Return([][]byte{[]byte("arg1"), []byte("argument2")}) + + ret := hooks.GetArgumentLength(1) + require.Equal(t, int32(len("argument2")), ret) +} + +func TestVMHooksImpl_GetArgument(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("Arguments").Return([][]byte{[]byte("arg1"), []byte("argument2")}) + + ret := hooks.GetArgument(1, 0) + require.Equal(t, int32(len("argument2")), ret) +} + +func TestVMHooksImpl_GetFunction(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("FunctionName").Return("testFunction") + + ret := hooks.GetFunction(0) + require.Equal(t, int32(len("testFunction")), ret) +} + +func TestVMHooksImpl_GetNumArguments(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("Arguments").Return([][]byte{[]byte("arg1"), []byte("argument2")}) + + ret := hooks.GetNumArguments() + require.Equal(t, int32(2), ret) +} + +func TestVMHooksImpl_StorageStore(t *testing.T) { + t.Parallel() + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + storage.On("SetStorage", mock.Anything, mock.Anything).Return(vmhost.StorageAdded, nil) + + ret := hooks.StorageStore(0, 0, 0, 0) + require.Equal(t, int32(vmhost.StorageAdded), ret) +} + +func TestVMHooksImpl_StorageLoadLength(t *testing.T) { + t.Parallel() + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + storage.On("GetStorageUnmetered", mock.Anything).Return([]byte("data"), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.StorageLoadLength(0, 0) + require.Equal(t, int32(len("data")), ret) +} + +func TestVMHooksImpl_StorageLoad(t *testing.T) { + t.Parallel() + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + storage.On("GetStorage", mock.Anything).Return([]byte("data"), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.StorageLoad(0, 0, 0) + require.Equal(t, int32(len("data")), ret) +} + +func TestVMHooksImpl_StorageLoadFromAddress(t *testing.T) { + t.Parallel() + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + storage.On("GetStorageFromAddress", mock.Anything, mock.Anything).Return([]byte("data"), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.StorageLoadFromAddress(0, 0, 0, 0) + require.Equal(t, int32(len("data")), ret) +} + +func TestVMHooksImpl_GetCaller(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{CallerAddr: []byte("caller")} + runtime.On("GetVMInput").Return(contractCallInput) + + hooks.GetCaller(0) +} + +func TestVMHooksImpl_CheckNoPayment(t *testing.T) { + t.Parallel() + hooks, _, runtime, _, _, _, _, _, _, _ := createTestVMHooksWithSetMetering() + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ + CallValue: big.NewInt(0), + ESDTTransfers: []*vmcommon.ESDTTransfer{}, + } + runtime.On("GetVMInput").Return(contractCallInput) + + hooks.CheckNoPayment() +} + +func TestVMHooksImpl_GetCallValue(t *testing.T) { + t.Parallel() + hooks, _, runtime, _, _, _, _, _, _, _ := createTestVMHooksWithSetMetering() + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ + CallValue: big.NewInt(100), + ESDTTransfers: []*vmcommon.ESDTTransfer{}, + } + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetCallValue(0) + require.NotEqual(t, int32(-1), ret) +} + +func TestVMHooksImpl_GetESDTValue(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ + CallValue: big.NewInt(0), + ESDTTransfers: []*vmcommon.ESDTTransfer{{ESDTValue: big.NewInt(100)}}, + } + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetESDTValue(0) + require.NotEqual(t, int32(-1), ret) +} + +func TestVMHooksImpl_GetESDTTokenName(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ESDTTransfers: []*vmcommon.ESDTTransfer{{ESDTTokenName: []byte("token-name")}}} + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetESDTTokenName(0) + require.NotEqual(t, int32(-1), ret) +} + +func TestVMHooksImpl_GetESDTTokenNonce(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ESDTTransfers: []*vmcommon.ESDTTransfer{{ESDTTokenNonce: 123}}} + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetESDTTokenNonce() + require.Equal(t, int64(123), ret) +} + +func TestVMHooksImpl_GetCurrentESDTNFTNonce(t *testing.T) { + t.Parallel() + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + storage.On("GetStorageFromAddress", mock.Anything, mock.Anything).Return(big.NewInt(123).Bytes(), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.GetCurrentESDTNFTNonce(0, 0, 0) + require.Equal(t, int64(123), ret) +} + +func TestVMHooksImpl_GetESDTTokenType(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ESDTTransfers: []*vmcommon.ESDTTransfer{{ESDTTokenType: 1}}} + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetESDTTokenType() + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_GetNumESDTTransfers(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ESDTTransfers: []*vmcommon.ESDTTransfer{{}, {}}} + runtime.On("GetVMInput").Return(contractCallInput) + + ret := hooks.GetNumESDTTransfers() + require.Equal(t, int32(2), ret) +} + +func TestVMHooksImpl_GetCallValueTokenName(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + contractCallInput := &vmcommon.ContractCallInput{} + contractCallInput.VMInput = vmcommon.VMInput{ + ESDTTransfers: []*vmcommon.ESDTTransfer{{ESDTTokenName: []byte("token-name"), ESDTValue: big.NewInt(100)}}, + CallValue: big.NewInt(0), + } + vmHooks.runtime.On("GetVMInput").Return(contractCallInput) + + ret := vmHooks.hooks.GetCallValueTokenName(0, 0) + require.Equal(t, int32(len("token-name")), ret) +} + +func TestVMHooksImpl_IsReservedFunctionName(t *testing.T) { + t.Parallel() + + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetBytes", mock.Anything).Return([]byte("init"), nil) + vmHooks.runtime.On("IsReservedFunctionName", "init").Return(true) + + ret := vmHooks.hooks.IsReservedFunctionName(0) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_WriteLog(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("GetContextAddress").Return([]byte("address")) + output.On("WriteLog", mock.Anything, mock.Anything, mock.Anything).Return() + + hooks.WriteLog(0, 0, 0, 0) +} + +func TestVMHooksImpl_WriteEventLog(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + runtime.On("GetContextAddress").Return([]byte("address")) + output.On("WriteLog", mock.Anything, mock.Anything, mock.Anything).Return() + + hooks.WriteEventLog(0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_GetBlockTimestamp(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentTimeStamp").Return(uint64(12345)) + + ret := vmHooks.hooks.GetBlockTimestamp() + require.Equal(t, int64(12345), ret) +} + +func TestVMHooksImpl_GetBlockTimestampMs(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentTimeStampMs").Return(uint64(12345000)) + + ret := vmHooks.hooks.GetBlockTimestampMs() + require.Equal(t, int64(12345000), ret) +} + +func TestVMHooksImpl_GetBlockNonce(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentNonce").Return(uint64(123)) + + ret := vmHooks.hooks.GetBlockNonce() + require.Equal(t, int64(123), ret) +} + +func TestVMHooksImpl_GetBlockRound(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentRound").Return(uint64(456)) + + ret := vmHooks.hooks.GetBlockRound() + require.Equal(t, int64(456), ret) +} + +func TestVMHooksImpl_GetBlockEpoch(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentEpoch").Return(uint32(789)) + + ret := vmHooks.hooks.GetBlockEpoch() + require.Equal(t, int64(789), ret) +} + +func TestVMHooksImpl_GetBlockRandomSeed(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("CurrentRandomSeed").Return([]byte("random-seed")) + + vmHooks.hooks.GetBlockRandomSeed(0) +} + +func TestVMHooksImpl_GetStateRootHash(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("GetStateRootHash").Return([]byte("state-root-hash")) + + vmHooks.hooks.GetStateRootHash(0) +} + +func TestVMHooksImpl_GetPrevBlockTimestamp(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("LastTimeStamp").Return(uint64(12345)) + + ret := vmHooks.hooks.GetPrevBlockTimestamp() + require.Equal(t, int64(12345), ret) +} + +func TestVMHooksImpl_GetPrevBlockTimestampMs(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.blockchain.On("LastTimeStampMs").Return(uint64(12345000)) + + ret := vmHooks.hooks.GetPrevBlockTimestampMs() + require.Equal(t, int64(12345000), ret) +} + +func TestVMHooksImpl_GetPrevBlockNonce(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("LastNonce").Return(uint64(123)) + + ret := hooks.GetPrevBlockNonce() + require.Equal(t, int64(123), ret) +} + +func TestVMHooksImpl_GetPrevBlockRound(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("LastRound").Return(uint64(6000)) + + ret := hooks.GetPrevBlockRound() + require.Equal(t, int64(6000), ret) +} + +func TestVMHooksImpl_GetPrevBlockEpoch(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("LastEpoch").Return(uint32(789)) + + ret := hooks.GetPrevBlockEpoch() + require.Equal(t, int64(789), ret) +} + +func TestVMHooksImpl_GetPrevBlockRandomSeed(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + + blockchain.On("LastRandomSeed").Return([]byte("random-seed")) + + hooks.GetPrevBlockRandomSeed(0) +} + +func TestVMHooksImpl_GetBlockRoundTimeMs(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, _, _ := createTestVMHooksFull() + + ret := hooks.GetBlockRoundTimeMs() + require.Equal(t, int64(6000), ret) +} + +func TestVMHooksImpl_EpochStartBlockTimestampMs(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _ := createTestVMHooks() + + ret := hooks.EpochStartBlockTimestampMs() + require.Equal(t, int64(12345000), ret) +} + +func TestVMHooksImpl_EpochStartBlockNonce(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + blockchain.On("EpochStartBlockNonce").Return(uint64(123)) + + ret := hooks.EpochStartBlockNonce() + require.Equal(t, int64(123), ret) +} + +func TestVMHooksImpl_EpochStartBlockRound(t *testing.T) { + t.Parallel() + hooks, _, _, _, _, _, blockchain, _ := createTestVMHooksFull() + blockchain.On("EpochStartBlockRound").Return(uint64(6000)) + + ret := hooks.EpochStartBlockRound() + require.Equal(t, int64(6000), ret) +} + +func TestVMHooksImpl_Finish(t *testing.T) { + t.Parallel() + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + output.On("Finish", mock.Anything).Return() + + hooks.Finish(0, 0) +} + +func TestVMHooksImpl_ExecuteOnSameContext(t *testing.T) { + t.Parallel() + hooks, host, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + metering.On("BoundGasLimit", mock.Anything).Return(uint64(100)) + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + host.On("ExecuteOnSameContext", mock.Anything).Return(nil) + + ret := hooks.ExecuteOnSameContext(0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ExecuteOnDestContext(t *testing.T) { + t.Parallel() + hooks, host, runtime, _, _, _, _, _, async, _ := createTestVMHooksWithSetMetering() + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("IsBuiltinFunctionCall", mock.Anything).Return(false) + + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + host.On("CompleteLogEntriesWithCallType", mock.Anything, mock.Anything).Return() + + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.ExecuteOnDestContext(0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ExecuteReadOnly(t *testing.T) { + t.Parallel() + hooks, host, runtime, _, _, _, _, _, async, _ := createTestVMHooksWithSetMetering() + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("IsBuiltinFunctionCall", mock.Anything).Return(false) + + runtime.On("GetContextAddress").Return([]byte("sender")) + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + runtime.On("ReadOnly").Return(false) + runtime.On("SetReadOnly", mock.Anything).Return() + runtime.On("GetOriginalCallerAddress").Return([]byte("address")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.ExecuteReadOnly(0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_CreateContract(t *testing.T) { + t.Parallel() + hooks, host, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + metering.On("BoundGasLimit", mock.Anything).Return(uint64(1000000)) + + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + host.On("CreateNewContract", mock.Anything, mock.Anything).Return([]byte("new-address"), nil) + + ret := hooks.CreateContract(0, 0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_DeployFromSourceContract(t *testing.T) { + t.Parallel() + hooks, host, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + metering.On("BoundGasLimit", mock.Anything).Return(uint64(1000000)) + + blockchain := &mockery.MockBlockchainContext{} + host.On("Blockchain").Return(blockchain) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + blockchain.On("GetCode", mock.Anything).Return([]byte("code"), nil) + host.On("CreateNewContract", mock.Anything, mock.Anything).Return([]byte("new-address"), nil) + + ret := hooks.DeployFromSourceContract(0, 0, 0, 0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_GetNumReturnData(t *testing.T) { + t.Parallel() + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + output.On("ReturnData").Return([][]byte{[]byte("data1"), []byte("data2")}) + + ret := hooks.GetNumReturnData() + require.Equal(t, int32(2), ret) +} + +func TestVMHooksImpl_GetReturnDataSize(t *testing.T) { + t.Parallel() + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + output.On("ReturnData").Return([][]byte{[]byte("data1"), []byte("data2")}) + + ret := hooks.GetReturnDataSize(1) + require.Equal(t, int32(len("data2")), ret) +} + +func TestVMHooksImpl_GetReturnData(t *testing.T) { + t.Parallel() + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + output.On("ReturnData").Return([][]byte{[]byte("data1"), []byte("data2")}) + + ret := hooks.GetReturnData(1, 0) + require.Equal(t, int32(len("data2")), ret) +} + +func TestVMHooksImpl_CleanReturnData(t *testing.T) { + t.Parallel() + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + output.On("ClearReturnData").Return() + + hooks.CleanReturnData() + output.AssertCalled(t, "ClearReturnData") +} diff --git a/vmhost/vmhooks/bigFloatOps.go b/vmhost/vmhooks/bigFloatOps.go index f051da341..712443147 100644 --- a/vmhost/vmhooks/bigFloatOps.go +++ b/vmhost/vmhooks/bigFloatOps.go @@ -263,7 +263,6 @@ func (context *VMHooksImpl) BigFloatMul(destinationHandle, op1Handle, op2Handle } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if err != nil { context.FailExecution(err) return @@ -292,7 +291,6 @@ func (context *VMHooksImpl) BigFloatDiv(destinationHandle, op1Handle, op2Handle } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if err != nil { context.FailExecution(err) return @@ -329,12 +327,13 @@ func (context *VMHooksImpl) BigFloatNeg(destinationHandle, opHandle int32) { context.FailExecution(err) return } - op, err := managedType.GetBigFloat(opHandle) + op, err := managedType.GetBigFloat(opHandle) if err != nil { context.FailExecution(err) return } + dest.Neg(op) } @@ -357,12 +356,13 @@ func (context *VMHooksImpl) BigFloatClone(destinationHandle, opHandle int32) { context.FailExecution(err) return } - op, err := managedType.GetBigFloat(opHandle) + op, err := managedType.GetBigFloat(opHandle) if err != nil { context.FailExecution(err) return } + dest.Copy(op) } @@ -381,11 +381,11 @@ func (context *VMHooksImpl) BigFloatCmp(op1Handle, op2Handle int32) int32 { } op1, op2, err := managedType.GetTwoBigFloats(op1Handle, op2Handle) - if err != nil { context.FailExecution(err) return -2 } + return int32(op1.Cmp(op2)) } @@ -408,12 +408,13 @@ func (context *VMHooksImpl) BigFloatAbs(destinationHandle, opHandle int32) { context.FailExecution(err) return } - op, err := managedType.GetBigFloat(opHandle) + op, err := managedType.GetBigFloat(opHandle) if err != nil { context.FailExecution(err) return } + dest.Abs(op) } @@ -435,6 +436,7 @@ func (context *VMHooksImpl) BigFloatSign(opHandle int32) int32 { context.FailExecution(err) return -2 } + return int32(op.Sign()) } @@ -457,8 +459,8 @@ func (context *VMHooksImpl) BigFloatSqrt(destinationHandle, opHandle int32) { context.FailExecution(err) return } - op, err := managedType.GetBigFloat(opHandle) + op, err := managedType.GetBigFloat(opHandle) if err != nil { context.FailExecution(err) return @@ -467,6 +469,7 @@ func (context *VMHooksImpl) BigFloatSqrt(destinationHandle, opHandle int32) { context.FailExecution(vmhost.ErrBadLowerBounds) return } + resultSqrt, err := vmMath.SqrtBigFloat(op) if err != nil { context.FailExecution(err) @@ -561,8 +564,8 @@ func (context *VMHooksImpl) BigFloatFloor(destBigIntHandle, opHandle int32) { context.FailExecution(err) return } - bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) + bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntOp) if err != nil { context.FailExecution(err) @@ -597,8 +600,8 @@ func (context *VMHooksImpl) BigFloatCeil(destBigIntHandle, opHandle int32) { context.FailExecution(err) return } - bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) + bigIntOp := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntOp) if err != nil { context.FailExecution(err) @@ -633,8 +636,8 @@ func (context *VMHooksImpl) BigFloatTruncate(destBigIntHandle, opHandle int32) { context.FailExecution(err) return } - bigIntValue := managedType.GetBigIntOrCreate(destBigIntHandle) + bigIntValue := managedType.GetBigIntOrCreate(destBigIntHandle) err = managedType.ConsumeGasForBigIntCopy(bigIntValue) if err != nil { context.FailExecution(err) diff --git a/vmhost/vmhooks/bigFloatOps_test.go b/vmhost/vmhooks/bigFloatOps_test.go new file mode 100644 index 000000000..e56b97ef4 --- /dev/null +++ b/vmhost/vmhooks/bigFloatOps_test.go @@ -0,0 +1,150 @@ +package vmhooks + +import ( + "math/big" + "testing" + + "github.com/multiversx/mx-chain-scenario-go/worldmock" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_BigFloatAdd(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(10.5), big.NewFloat(20.5), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + + vmHooks.hooks.BigFloatAdd(0, 1, 2) + f, _ := dest.Float64() + require.Equal(t, float64(31), f) +} + +func TestVMHooksImpl_BigFloatSub(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(20.5), big.NewFloat(10.5), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + + vmHooks.hooks.BigFloatSub(0, 1, 2) + f, _ := dest.Float64() + require.Equal(t, float64(10), f) +} + +func TestVMHooksImpl_BigFloatMul(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(10.5), big.NewFloat(2.0), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + + vmHooks.hooks.BigFloatMul(0, 1, 2) + f, _ := dest.Float64() + require.Equal(t, float64(21), f) +} + +func TestVMHooksImpl_BigFloatDiv(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(21.0), big.NewFloat(2.0), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + + vmHooks.hooks.BigFloatDiv(0, 1, 2) + f, _ := dest.Float64() + require.Equal(t, float64(10.5), f) +} + +func TestVMHooksImpl_BigFloatAbs(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetBigFloat", int32(1)).Return(big.NewFloat(-10.5), nil) + + vmHooks.hooks.BigFloatAbs(0, 1) + f, _ := dest.Float64() + require.Equal(t, float64(10.5), f) +} + +func TestVMHooksImpl_BigFloatNeg(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetBigFloat", int32(1)).Return(big.NewFloat(10.5), nil) + + vmHooks.hooks.BigFloatNeg(0, 1) + f, _ := dest.Float64() + require.Equal(t, float64(-10.5), f) +} + +func TestVMHooksImpl_BigFloatCmp1(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(10.5), big.NewFloat(20.5), nil) + res := vmHooks.hooks.BigFloatCmp(1, 2) + require.Equal(t, int32(-1), res) +} + +func TestVMHooksImpl_BigFloatCmp2(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(20.5), big.NewFloat(10.5), nil) + res := vmHooks.hooks.BigFloatCmp(1, 2) + require.Equal(t, int32(1), res) +} + +func TestVMHooksImpl_BigFloatCmp3(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + vmHooks.managedType.On("GetTwoBigFloats", int32(1), int32(2)).Return(big.NewFloat(10.5), big.NewFloat(10.5), nil) + res := vmHooks.hooks.BigFloatCmp(1, 2) + require.Equal(t, int32(0), res) +} + +func TestVMHooksImpl_BigFloatSqrt(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetBigFloat", int32(1)).Return(big.NewFloat(9.0), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + + vmHooks.hooks.BigFloatSqrt(0, 1) + f, _ := dest.Float64() + require.Equal(t, float64(3), f) +} + +func TestVMHooksImpl_BigFloatPow(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + vmHooks.hooks.GetVMHost().(*mockery.MockVMHost).On("EnableEpochsHandler").Return(&worldmock.EnableEpochsHandlerStub{}) + + dest := big.NewFloat(0) + vmHooks.managedType.On("GetBigFloatOrCreate", int32(0)).Return(dest, nil) + vmHooks.managedType.On("GetBigFloat", int32(1)).Return(big.NewFloat(2.0), nil) + vmHooks.managedType.On("BigFloatExpIsNotValid", mock.Anything).Return(false) + vmHooks.managedType.On("ConsumeGasForThisBigIntNumberOfBytes", mock.Anything).Return(nil) + + vmHooks.hooks.BigFloatPow(0, 1, 10) + f, _ := dest.Float64() + require.Equal(t, float64(1024), f) +} diff --git a/vmhost/vmhooks/bigIntOps.go b/vmhost/vmhooks/bigIntOps.go index 580d8522d..ace3c3d04 100644 --- a/vmhost/vmhooks/bigIntOps.go +++ b/vmhost/vmhooks/bigIntOps.go @@ -47,13 +47,18 @@ const ( bigIntGetUnsignedArgumentName = "bigIntGetUnsignedArgument" bigIntGetSignedArgumentName = "bigIntGetSignedArgument" bigIntGetCallValueName = "bigIntGetCallValue" - bigIntGetESDTCallValueName = "bigIntGetESDTCallValue" bigIntGetESDTCallValueByIndexName = "bigIntGetESDTCallValueByIndex" bigIntGetESDTExternalBalanceName = "bigIntGetESDTExternalBalance" bigIntGetExternalBalanceName = "bigIntGetExternalBalance" bigIntToStringName = "bigIntToString" ) +func (context *VMHooksImpl) failExecutionWithAsyncV3Fixes(err error) { + if context.host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + context.FailExecutionConditionally(err) + } +} + // BigIntGetUnsignedArgument VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntGetUnsignedArgument(id int32, destinationHandle int32) { @@ -70,11 +75,11 @@ func (context *VMHooksImpl) BigIntGetUnsignedArgument(id int32, destinationHandl args := runtime.Arguments() if int32(len(args)) <= id || id < 0 { + context.failExecutionWithAsyncV3Fixes(vmhost.ErrArgIndexOutOfRange) return } value := managedType.GetBigIntOrCreate(destinationHandle) - value.SetBytes(args[id]) } @@ -95,6 +100,7 @@ func (context *VMHooksImpl) BigIntGetSignedArgument(id int32, destinationHandle args := runtime.Arguments() if int32(len(args)) <= id || id < 0 { + context.failExecutionWithAsyncV3Fixes(vmhost.ErrArgIndexOutOfRange) return } @@ -199,8 +205,9 @@ func (context *VMHooksImpl) BigIntGetCallValue(destinationHandle int32) { // BigIntGetESDTCallValue VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) BigIntGetESDTCallValue(destination int32) { - isFail := failIfMoreThanOneESDTTransfer(context) - if isFail { + err := failIfMoreThanOneESDTTransfer(context) + if err != nil { + context.FailExecution(err) return } context.BigIntGetESDTCallValueByIndex(destination, 0) @@ -219,13 +226,14 @@ func (context *VMHooksImpl) BigIntGetESDTCallValueByIndex(destinationHandle int3 return } - value := managedType.GetBigIntOrCreate(destinationHandle) - esdtTransfer := getESDTTransferFromInputFailIfWrongIndex(context.GetVMHost(), index) - if esdtTransfer != nil { - value.Set(esdtTransfer.ESDTValue) - } else { - value.Set(big.NewInt(0)) + esdtTransfer, err := getESDTTransferFromInput(context.GetVMHost(), index) + if err != nil { + context.FailExecution(err) + return } + + value := managedType.GetBigIntOrCreate(destinationHandle) + value.Set(esdtTransfer.ESDTValue) } // BigIntGetExternalBalance VMHooks implementation. @@ -279,9 +287,6 @@ func (context *VMHooksImpl) BigIntGetESDTExternalBalance( context.FailExecution(err) return } - if esdtData == nil { - return - } value := managedType.GetBigIntOrCreate(resultHandle) value.Set(esdtData.Value) @@ -368,8 +373,8 @@ func (context *VMHooksImpl) BigIntGetUnsignedBytes(referenceHandle int32, byteOf context.FailExecution(err) return -1 } - bytes := value.Bytes() + bytes := value.Bytes() err = context.MemStore(byteOffset, bytes) if err != nil { context.FailExecution(err) @@ -405,8 +410,8 @@ func (context *VMHooksImpl) BigIntGetSignedBytes(referenceHandle int32, byteOffs context.FailExecution(err) return -1 } - bytes := twos.ToBytes(value) + bytes := twos.ToBytes(value) err = context.MemStore(byteOffset, bytes) if err != nil { context.FailExecution(err) @@ -830,7 +835,6 @@ func (context *VMHooksImpl) BigIntPow(destinationHandle, op1Handle, op2Handle in //this calculates the length of the result in bytes lengthOfResult := big.NewInt(0).Div(big.NewInt(0).Mul(b, big.NewInt(int64(a.BitLen()))), big.NewInt(8)) - err = managedType.ConsumeGasForThisBigIntNumberOfBytes(lengthOfResult) if err != nil { context.FailExecution(err) @@ -1170,8 +1174,8 @@ func (context *VMHooksImpl) BigIntShr(destinationHandle, opHandle, bits int32) { context.FailExecution(vmhost.ErrShiftNegative) return } - dest.Rsh(a, uint(bits)) + dest.Rsh(a, uint(bits)) err = managedType.ConsumeGasForBigIntCopy(dest) if err != nil { context.FailExecution(err) @@ -1289,8 +1293,8 @@ func (context *VMHooksImpl) BigIntFinishSigned(referenceHandle int32) { context.FailExecution(err) return } - bigInt2cBytes := twos.ToBytes(value) + bigInt2cBytes := twos.ToBytes(value) gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(len(bigInt2cBytes))) err = metering.UseGasBounded(gasToUse) if err != nil { diff --git a/vmhost/vmhooks/bigIntOps_test.go b/vmhost/vmhooks/bigIntOps_test.go new file mode 100644 index 000000000..c567e0e7d --- /dev/null +++ b/vmhost/vmhooks/bigIntOps_test.go @@ -0,0 +1,127 @@ +package vmhooks + +import ( + "math/big" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_BigIntAdd(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(10), big.NewInt(20), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntAdd(0, 1, 2) + require.Equal(t, big.NewInt(30), dest) +} + +func TestVMHooksImpl_BigIntSub(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(20), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntSub(0, 1, 2) + require.Equal(t, big.NewInt(10), dest) +} + +func TestVMHooksImpl_BigIntMul(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(10), big.NewInt(20), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntMul(0, 1, 2) + require.Equal(t, big.NewInt(200), dest) +} + +func TestVMHooksImpl_BigIntTDiv(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(20), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntTDiv(0, 1, 2) + require.Equal(t, big.NewInt(2), dest) +} + +func TestVMHooksImpl_BigIntTMod(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(23), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntTMod(0, 1, 2) + require.Equal(t, big.NewInt(3), dest) +} + +func TestVMHooksImpl_BigIntEDiv(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(20), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntEDiv(0, 1, 2) + require.Equal(t, big.NewInt(2), dest) +} + +func TestVMHooksImpl_BigIntEMod(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(23), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntEMod(0, 1, 2) + require.Equal(t, big.NewInt(3), dest) +} + +func TestVMHooksImpl_BigIntPow(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetTwoBigInt", int32(1), int32(2)).Return(big.NewInt(2), big.NewInt(10), nil) + vmHooks.managedType.On("ConsumeGasForThisBigIntNumberOfBytes", mock.Anything).Return(nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntPow(0, 1, 2) + require.Equal(t, big.NewInt(1024), dest) +} + +func TestVMHooksImpl_BigIntSqrt(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + + dest := big.NewInt(0) + vmHooks.managedType.On("GetBigIntOrCreate", int32(0)).Return(dest) + vmHooks.managedType.On("GetBigInt", int32(1)).Return(big.NewInt(1024), nil) + vmHooks.managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything).Return(nil) + + vmHooks.hooks.BigIntSqrt(0, 1) + require.Equal(t, big.NewInt(32), dest) +} diff --git a/vmhost/vmhooks/cryptoei.go b/vmhost/vmhooks/cryptoei.go index f325375c1..6ebfec3e5 100644 --- a/vmhost/vmhooks/cryptoei.go +++ b/vmhost/vmhooks/cryptoei.go @@ -60,30 +60,29 @@ func (context *VMHooksImpl) Sha256( err := metering.UseGasBoundedAndAddTracedGas(sha256Name, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } result, err := crypto.Sha256(data) if err != nil { - if enableEpochsHandler.IsFlagEnabled(vmhost.MaskInternalDependenciesErrorsFlag) { err = vmhost.ErrSha256Hash } context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultOffset, result) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -100,19 +99,19 @@ func (context *VMHooksImpl) ManagedSha256(inputHandle, outputHandle int32) int32 err := metering.UseGasBoundedAndAddTracedGas(sha256Name, metering.GasSchedule().CryptoAPICost.SHA256) if err != nil { context.FailExecution(err) - return 1 + return -1 } inputBytes, err := managedType.GetBytes(inputHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(inputBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } resultBytes, err := crypto.Sha256(inputBytes) @@ -122,7 +121,7 @@ func (context *VMHooksImpl) ManagedSha256(inputHandle, outputHandle int32) int32 } context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(outputHandle, resultBytes) @@ -142,13 +141,13 @@ func (context *VMHooksImpl) Keccak256(dataOffset executor.MemPtr, length executo err := metering.UseGasBoundedAndAddTracedGas(keccak256Name, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } result, err := crypto.Keccak256(data) @@ -158,13 +157,13 @@ func (context *VMHooksImpl) Keccak256(dataOffset executor.MemPtr, length executo } context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultOffset, result) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -181,19 +180,19 @@ func (context *VMHooksImpl) ManagedKeccak256(inputHandle, outputHandle int32) in err := metering.UseGasBoundedAndAddTracedGas(keccak256Name, metering.GasSchedule().CryptoAPICost.Keccak256) if err != nil { context.FailExecution(err) - return 1 + return -1 } inputBytes, err := managedType.GetBytes(inputHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(inputBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } resultBytes, err := crypto.Keccak256(inputBytes) @@ -203,7 +202,7 @@ func (context *VMHooksImpl) ManagedKeccak256(inputHandle, outputHandle int32) in } context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(outputHandle, resultBytes) @@ -223,13 +222,13 @@ func (context *VMHooksImpl) Ripemd160(dataOffset executor.MemPtr, length executo err := metering.UseGasBoundedAndAddTracedGas(ripemd160Name, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } result, err := crypto.Ripemd160(data) @@ -239,13 +238,13 @@ func (context *VMHooksImpl) Ripemd160(dataOffset executor.MemPtr, length executo } context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultOffset, result) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -268,19 +267,19 @@ func ManagedRipemd160WithHost(host vmhost.VMHost, inputHandle int32, outputHandl err := metering.UseGasBoundedAndAddTracedGas(ripemd160Name, metering.GasSchedule().CryptoAPICost.Ripemd160) if err != nil { FailExecution(host, err) - return 1 + return -1 } inputBytes, err := managedType.GetBytes(inputHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(inputBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } result, err := crypto.Ripemd160(inputBytes) @@ -290,7 +289,7 @@ func ManagedRipemd160WithHost(host vmhost.VMHost, inputHandle int32, outputHandl } FailExecution(host, err) - return 1 + return -1 } managedType.SetBytes(outputHandle, result) @@ -315,41 +314,44 @@ func (context *VMHooksImpl) VerifyBLS( err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } key, err := context.MemLoad(keyOffset, blsPublicKeyLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } message, err := context.MemLoad(messageOffset, messageLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } sig, err := context.MemLoad(sigOffset, blsSignatureLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } invalidSigErr := crypto.VerifyBLS(key, message, sig) if invalidSigErr != nil { + // It is important to not leak information about the internal cryptographic libraries. + // If the MaskInternalDependenciesErrorsFlag is enabled, we replace the specific + // error from the library with a generic verification error. if enableEpochsHandler.IsFlagEnabled(vmhost.MaskInternalDependenciesErrorsFlag) { invalidSigErr = vmhost.ErrBlsVerify } - context.FailExecution(invalidSigErr) + context.FailExecutionConditionally(invalidSigErr) return -1 } @@ -406,43 +408,43 @@ func ManagedVerifyBLSWithHost( err := useGasForCryptoVerify(metering, sigVerificationType) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } keyBytes, err := managedType.GetBytes(keyHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(keyBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } msgBytes, err := managedType.GetBytes(messageHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(msgBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } sigBytes, err := managedType.GetBytes(sigHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(sigBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } invalidSigErr := vmhost.ErrInvalidArgument @@ -466,7 +468,7 @@ func ManagedVerifyBLSWithHost( invalidSigErr = vmhost.ErrBlsVerify } - FailExecution(host, invalidSigErr) + FailExecutionConditionally(host, invalidSigErr) return -1 } @@ -490,32 +492,32 @@ func (context *VMHooksImpl) VerifyEd25519( err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } key, err := context.MemLoad(keyOffset, ed25519PublicKeyLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } message, err := context.MemLoad(messageOffset, messageLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } sig, err := context.MemLoad(sigOffset, ed25519SignatureLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } invalidSigErr := crypto.VerifyEd25519(key, message, sig) @@ -524,7 +526,7 @@ func (context *VMHooksImpl) VerifyEd25519( invalidSigErr = vmhost.ErrEd25519Verify } - context.FailExecution(invalidSigErr) + context.FailExecutionConditionally(invalidSigErr) return -1 } @@ -555,43 +557,43 @@ func ManagedVerifyEd25519WithHost( err := metering.UseGasBounded(gasToUse) if err != nil { FailExecution(host, err) - return 1 + return -1 } keyBytes, err := managedType.GetBytes(keyHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(keyBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } msgBytes, err := managedType.GetBytes(messageHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(msgBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } sigBytes, err := managedType.GetBytes(sigHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(sigBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } invalidSigErr := crypto.VerifyEd25519(keyBytes, msgBytes, sigBytes) @@ -600,7 +602,7 @@ func ManagedVerifyEd25519WithHost( invalidSigErr = vmhost.ErrEd25519Verify } - FailExecution(host, invalidSigErr) + FailExecutionConditionally(host, invalidSigErr) return -1 } @@ -626,31 +628,31 @@ func (context *VMHooksImpl) VerifyCustomSecp256k1( err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } if keyLength != secp256k1CompressedPublicKeyLength && keyLength != secp256k1UncompressedPublicKeyLength { context.FailExecution(vmhost.ErrInvalidPublicKeySize) - return 1 + return -1 } key, err := context.MemLoad(keyOffset, keyLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(messageLength)) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } message, err := context.MemLoad(messageOffset, messageLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } // read the 2 leading bytes first @@ -660,13 +662,13 @@ func (context *VMHooksImpl) VerifyCustomSecp256k1( sigHeader, err := context.MemLoad(sigOffset, sigHeaderLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } sigLength := int32(sigHeader[1]) + sigHeaderLength sig, err := context.MemLoad(sigOffset, sigLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } invalidSigErr := crypto.VerifySecp256k1(key, message, sig, uint8(hashType)) @@ -675,7 +677,7 @@ func (context *VMHooksImpl) VerifyCustomSecp256k1( invalidSigErr = vmhost.ErrSecp256k1Verify } - context.FailExecution(invalidSigErr) + context.FailExecutionConditionally(invalidSigErr) return -1 } @@ -714,43 +716,43 @@ func ManagedVerifyCustomSecp256k1WithHost( err := useGasForCryptoVerify(metering, verifyCryptoFunc) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } keyBytes, err := managedType.GetBytes(keyHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(keyBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } msgBytes, err := managedType.GetBytes(messageHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(msgBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } sigBytes, err := managedType.GetBytes(sigHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(sigBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } invalidSigErr := vmhost.ErrInvalidArgument @@ -766,7 +768,7 @@ func ManagedVerifyCustomSecp256k1WithHost( invalidSigErr = vmhost.ErrSecp256k1Verify } - FailExecution(host, invalidSigErr) + FailExecutionConditionally(host, invalidSigErr) return -1 } @@ -832,26 +834,26 @@ func (context *VMHooksImpl) EncodeSecp256k1DerSignature( err := metering.UseGasBoundedAndAddTracedGas(encodeSecp256k1DerSignatureName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } r, err := context.MemLoad(rOffset, rLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } s, err := context.MemLoad(sOffset, sLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } derSig := crypto.EncodeSecp256k1DERSignature(r, s) err = context.MemStore(sigOffset, derSig) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -879,19 +881,19 @@ func ManagedEncodeSecp256k1DerSignatureWithHost( err := metering.UseGasBoundedAndAddTracedGas(encodeSecp256k1DerSignatureName, gasToUse) if err != nil { FailExecution(host, err) - return 1 + return -1 } r, err := managedType.GetBytes(rHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } s, err := managedType.GetBytes(sHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } derSig := crypto.EncodeSecp256k1DERSignature(r, s) @@ -1030,7 +1032,7 @@ func (context *VMHooksImpl) IsOnCurveEC( curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } gasToUse := metering.GasSchedule().CryptoAPICost.IsOnCurveECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) @@ -1079,13 +1081,13 @@ func (context *VMHooksImpl) ScalarBaseMultEC( if length < 0 { context.FailExecution(vmhost.ErrNegativeLength) - return 1 + return -1 } curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(length)*oneByteScalarGasCost @@ -1098,7 +1100,7 @@ func (context *VMHooksImpl) ScalarBaseMultEC( data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } host := context.GetVMHost() @@ -1138,13 +1140,13 @@ func ManagedScalarBaseMultECWithHost( curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } data, err := managedType.GetBytes(dataHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 @@ -1170,25 +1172,25 @@ func commonScalarBaseMultEC( ec, err := managedType.GetEllipticCurve(ecHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) if err != nil { FailExecution(host, err) - return 1 + return -1 } xResultSBM, yResultSBM := ec.ScalarBaseMult(data) if !ec.IsOnCurve(xResultSBM, yResultSBM) { FailExecution(host, vmhost.ErrPointNotOnCurve) - return 1 + return -1 } xResult.Set(xResultSBM) yResult.Set(yResultSBM) @@ -1213,13 +1215,13 @@ func (context *VMHooksImpl) ScalarMultEC( if length < 0 { context.FailExecution(vmhost.ErrNegativeLength) - return 1 + return -1 } curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 gasToUse := oneByteScalarGasCost + uint64(length)*oneByteScalarGasCost @@ -1232,7 +1234,7 @@ func (context *VMHooksImpl) ScalarMultEC( data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } host := context.GetVMHost() @@ -1278,13 +1280,13 @@ func ManagedScalarMultECWithHost( curveMultiplier := managedType.GetScalarMult100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } data, err := managedType.GetBytes(dataHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } oneByteScalarGasCost := metering.GasSchedule().CryptoAPICost.ScalarMultECC * uint64(curveMultiplier) / 100 @@ -1314,30 +1316,30 @@ func commonScalarMultEC( ec, err1 := managedType.GetEllipticCurve(ecHandle) if err1 != nil { FailExecution(host, err1) - return 1 + return -1 } xResult, yResult, err1 := managedType.GetTwoBigInt(xResultHandle, yResultHandle) x, y, err2 := managedType.GetTwoBigInt(pointXHandle, pointYHandle) if err1 != nil || err2 != nil { FailExecution(host, vmhost.ErrNoBigIntUnderThisHandle) - return 1 + return -1 } if !ec.IsOnCurve(x, y) { FailExecution(host, vmhost.ErrPointNotOnCurve) - return 1 + return -1 } err := managedType.ConsumeGasForBigIntCopy(xResult, yResult, ec.P, ec.N, ec.B, ec.Gx, ec.Gy, x, y) if err != nil { FailExecution(host, err) - return 1 + return -1 } xResultSM, yResultSM := ec.ScalarMult(x, y, data) if !ec.IsOnCurve(xResultSM, yResultSM) { FailExecution(host, vmhost.ErrPointNotOnCurve) - return 1 + return -1 } xResult.Set(xResultSM) yResult.Set(yResultSM) @@ -1570,7 +1572,7 @@ func (context *VMHooksImpl) UnmarshalEC( curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) @@ -1582,7 +1584,7 @@ func (context *VMHooksImpl) UnmarshalEC( data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return 1 + return -1 } host := context.GetVMHost() @@ -1622,7 +1624,7 @@ func ManagedUnmarshalECWithHost( curveMultiplier := managedType.Get100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) @@ -1633,7 +1635,8 @@ func ManagedUnmarshalECWithHost( data, err := managedType.GetBytes(dataHandle) if err != nil { - return 1 + FailExecution(host, err) + return -1 } return commonUnmarshalEC(host, xResultHandle, yResultHandle, ecHandle, data) @@ -1651,30 +1654,30 @@ func commonUnmarshalEC( ec, err := managedType.GetEllipticCurve(ecHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } byteLen := (ec.BitSize + 7) / 8 if len(data) != 1+2*byteLen { FailExecution(host, vmhost.ErrLengthOfBufferNotCorrect) - return 1 + return -1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) if err != nil { FailExecution(host, err) - return 1 + return -1 } xResultU, yResultU := elliptic.Unmarshal(ec, data) if xResultU == nil || yResultU == nil || !ec.IsOnCurve(xResultU, yResultU) { FailExecution(host, vmhost.ErrPointNotOnCurve) - return 1 + return -1 } xResult.Set(xResultU) yResult.Set(yResultU) @@ -1698,7 +1701,7 @@ func (context *VMHooksImpl) UnmarshalCompressedEC( curveMultiplier := managedType.GetUCompressed100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalCompressedECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) @@ -1710,7 +1713,7 @@ func (context *VMHooksImpl) UnmarshalCompressedEC( data, err := context.MemLoad(dataOffset, length) if err != nil { context.FailExecution(err) - return int32(len(data)) + return -1 } host := context.GetVMHost() @@ -1750,7 +1753,7 @@ func ManagedUnmarshalCompressedECWithHost( curveMultiplier := managedType.GetUCompressed100xCurveGasCostMultiplier(ecHandle) if curveMultiplier < 0 { FailExecution(host, vmhost.ErrNoEllipticCurveUnderThisHandle) - return 1 + return -1 } gasToUse := metering.GasSchedule().CryptoAPICost.UnmarshalCompressedECC * uint64(curveMultiplier) / 100 err := metering.UseGasBounded(gasToUse) @@ -1762,7 +1765,7 @@ func ManagedUnmarshalCompressedECWithHost( data, err := managedType.GetBytes(dataHandle) if err != nil { FailExecution(host, err) - return int32(len(data)) + return -1 } return commonUnmarshalCompressedEC(host, xResultHandle, yResultHandle, ecHandle, data) @@ -1780,30 +1783,30 @@ func commonUnmarshalCompressedEC( ec, err := managedType.GetEllipticCurve(ecHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } byteLen := (ec.BitSize+7)/8 + 1 if len(data) != byteLen { FailExecution(host, vmhost.ErrLengthOfBufferNotCorrect) - return 1 + return -1 } xResult, yResult, err := managedType.GetTwoBigInt(xResultHandle, yResultHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBigIntCopy(ec.P, ec.N, ec.B, ec.Gx, ec.Gy, xResult, yResult) if err != nil { FailExecution(host, err) - return 1 + return -1 } xResultUC, yResultUC := elliptic.UnmarshalCompressed(ec, data) if xResultUC == nil || yResultUC == nil || !ec.IsOnCurve(xResultUC, yResultUC) { FailExecution(host, vmhost.ErrPointNotOnCurve) - return 1 + return -1 } xResult.Set(xResultUC) yResult.Set(yResultUC) @@ -1822,13 +1825,13 @@ func (context *VMHooksImpl) GenerateKeyEC( result, err := commonGenerateEC(host, xPubKeyHandle, yPubKeyHandle, ecHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultOffset, result) if err != nil { context.FailExecution(err) - return int32(len(result)) + return -1 } return 0 @@ -1864,7 +1867,7 @@ func ManagedGenerateKeyECWithHost( result, err := commonGenerateEC(host, xPubKeyHandle, yPubKeyHandle, ecHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } managedType.SetBytes(resultHandle, result) @@ -1877,6 +1880,10 @@ func commonGenerateEC( yPubKeyHandle int32, ecHandle int32, ) ([]byte, error) { + if host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + return nil, vmhost.ErrVMHookIsDeactivated + } + metering := host.Metering() managedType := host.ManagedTypes() metering.StartGasTracing(generateKeyECName) @@ -2021,6 +2028,7 @@ func (context *VMHooksImpl) GetCurveLengthEC(ecHandle int32) int32 { ecLength := managedType.GetEllipticCurveSizeOfField(ecHandle) if ecLength == -1 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) + return -1 } return ecLength @@ -2042,6 +2050,7 @@ func (context *VMHooksImpl) GetPrivKeyByteLengthEC(ecHandle int32) int32 { byteLength := managedType.GetPrivateKeyByteLengthEC(ecHandle) if byteLength == -1 { context.FailExecution(vmhost.ErrNoEllipticCurveUnderThisHandle) + return -1 } return byteLength diff --git a/vmhost/vmhooks/cryptoei_test.go b/vmhost/vmhooks/cryptoei_test.go new file mode 100644 index 000000000..2ef56434b --- /dev/null +++ b/vmhost/vmhooks/cryptoei_test.go @@ -0,0 +1,318 @@ +package vmhooks + +import ( + "crypto/elliptic" + "crypto/rand" + "crypto/sha256" + "math/big" + "testing" + + "github.com/multiversx/mx-chain-scenario-go/worldmock" + mock2 "github.com/multiversx/mx-chain-vm-go/mock/context" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_Sha256(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + enableEpochs := &worldmock.EnableEpochsHandlerStub{} + host.On("EnableEpochsHandler").Return(enableEpochs) + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + + data := []byte("test data") + hash := sha256.Sum256(data) + crypto.Result = hash[:] + + ret := hooks.Sha256(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedSha256(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + data := []byte("test data") + hash := sha256.Sum256(data) + managedType.On("GetBytes", mock.Anything).Return(data, nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Result = hash[:] + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.ManagedSha256(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_Keccak256(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + + data := []byte("test data") + hash := sha256.Sum256(data) // just a placeholder + crypto.Result = hash[:] + + ret := hooks.Keccak256(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedKeccak256(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + data := []byte("test data") + hash := sha256.Sum256(data) // just a placeholder + managedType.On("GetBytes", mock.Anything).Return(data, nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Result = hash[:] + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.ManagedKeccak256(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_Ripemd160(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + enableEpochs := &worldmock.EnableEpochsHandlerStub{} + host.On("EnableEpochsHandler").Return(enableEpochs) + + data := []byte("test data") + hash := sha256.Sum256(data) // just a placeholder + crypto.Result = hash[:] + + ret := hooks.Ripemd160(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedRipemd160(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + data := []byte("test data") + hash := sha256.Sum256(data) // just a placeholder + managedType.On("GetBytes", mock.Anything).Return(data, nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Result = hash[:] + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.ManagedRipemd160(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_VerifyBLS(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + enableEpochs := &worldmock.EnableEpochsHandlerStub{} + host.On("EnableEpochsHandler").Return(enableEpochs) + + crypto.Err = nil + + ret := hooks.VerifyBLS(0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedVerifyBLS(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Err = nil + + ret := hooks.ManagedVerifyBLS(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_VerifyEd25519(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + enableEpochs := &worldmock.EnableEpochsHandlerStub{} + host.On("EnableEpochsHandler").Return(enableEpochs) + + crypto.Err = nil + + ret := hooks.VerifyEd25519(0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedVerifyEd25519(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Err = nil + + ret := hooks.ManagedVerifyEd25519(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_VerifyCustomSecp256k1(t *testing.T) { + t.Parallel() + vmHooks := createTestVMHooksClear() + baseMeteringSetup(vmHooks.metering) + + crypto := &mock2.CryptoHookMock{} + vmHooks.host.On("Crypto").Return(crypto) + + crypto.Err = nil + vmHooks.runtime.On("GetInstance").Return(vmHooks.instance) + vmHooks.instance.On("MemLoad", mock.Anything, mock.Anything).Return([]byte{0x30, 0x0}, nil) + + ret := vmHooks.hooks.VerifyCustomSecp256k1(0, secp256k1CompressedPublicKeyLength, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedVerifyCustomSecp256k1(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + crypto.Err = nil + + ret := hooks.ManagedVerifyCustomSecp256k1(0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_EncodeSecp256k1DerSignature(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + + crypto.Result = []byte("signature") + + ret := hooks.EncodeSecp256k1DerSignature(0, 0, 0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedEncodeSecp256k1DerSignature(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + crypto := &mock2.CryptoHookMock{} + host.On("Crypto").Return(crypto) + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + crypto.Result = []byte("signature") + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.ManagedEncodeSecp256k1DerSignature(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_CreateEC(t *testing.T) { + t.Parallel() + vmHooks := createTestVMHooksClear() + baseMeteringSetup(vmHooks.metering) + vmHooks.runtime.On("GetInstance").Return(vmHooks.instance) + + vmHooks.managedType.On("PutEllipticCurve", mock.Anything).Return(int32(1)) + vmHooks.instance.On("MemLoad", mock.Anything, mock.Anything).Return([]byte("p256"), nil) + + ret := vmHooks.hooks.CreateEC(0, 4) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_ManagedCreateEC(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + managedType.On("GetBytes", mock.Anything).Return([]byte("p256"), nil) + managedType.On("PutEllipticCurve", mock.Anything).Return(int32(1)) + + ret := hooks.ManagedCreateEC(0) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_EllipticCurve(t *testing.T) { + t.Parallel() + hooks, host, _, metering, _, _ := createTestVMHooks() + metering.On("UseGasBounded", mock.Anything).Return(nil) + + managedType := host.ManagedTypes().(*mockery.MockManagedTypesContext) + + ec := elliptic.P256().Params() + managedType.On("GetEllipticCurve", mock.Anything).Return(ec, nil) + managedType.On("GetTwoBigInt", mock.Anything, mock.Anything).Return(big.NewInt(0), big.NewInt(0), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(0), nil) + managedType.On("Get100xCurveGasCostMultiplier", mock.Anything).Return(int32(100)) + managedType.On("ConsumeGasForBigIntCopy", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("GetScalarMult100xCurveGasCostMultiplier", mock.Anything).Return(int32(1)) + managedType.On("GetUCompressed100xCurveGasCostMultiplier", mock.Anything).Return(int32(1)) + managedType.On("GetRandReader").Return(rand.Reader) + managedType.On("GetEllipticCurveSizeOfField", mock.Anything).Return(int32(1)) + managedType.On("GetPrivateKeyByteLengthEC", mock.Anything).Return(int32(1)) + + hooks.AddEC(0, 0, 0, 0, 0, 0, 0) + hooks.DoubleEC(0, 0, 0, 0, 0) + hooks.IsOnCurveEC(0, 0, 0) + hooks.ScalarBaseMultEC(0, 0, 0, 0, 0) + hooks.ScalarMultEC(0, 0, 0, 0, 0, 0, 0) + hooks.MarshalEC(0, 0, 0, 0) + hooks.MarshalCompressedEC(0, 0, 0, 0) + hooks.UnmarshalEC(0, 0, 0, 0, 0) + hooks.UnmarshalCompressedEC(0, 0, 0, 0, 0) + hooks.GenerateKeyEC(0, 0, 0, 0) + hooks.GetCurveLengthEC(0) + hooks.GetPrivKeyByteLengthEC(0) + hooks.EllipticCurveGetValues(0, 0, 0, 0, 0, 0) +} diff --git a/vmhost/vmhooks/eei_helpers_test.go b/vmhost/vmhooks/eei_helpers_test.go new file mode 100644 index 000000000..08c3be597 --- /dev/null +++ b/vmhost/vmhooks/eei_helpers_test.go @@ -0,0 +1,55 @@ +package vmhooks + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGetESDTRoles(t *testing.T) { + t.Parallel() + + t.Run("no roles", func(t *testing.T) { + t.Parallel() + roles := getESDTRoles([]byte{}, false) + require.Equal(t, int64(0), roles) + }) + + t.Run("one role", func(t *testing.T) { + t.Parallel() + + data := "\n" + string(rune((len("ESDTRoleLocalMint")))) + "ESDTRoleLocalMint" + + roles := getESDTRoles([]byte(data), false) + require.Equal(t, int64(RoleMint), roles) + }) + + t.Run("two roles", func(t *testing.T) { + t.Parallel() + + data := "\n" + string(rune((len("ESDTRoleLocalMint")))) + "ESDTRoleLocalMint" + data += "\n" + string(rune((len("ESDTRoleLocalBurn")))) + "ESDTRoleLocalBurn" + + roles := getESDTRoles([]byte(data), false) + require.Equal(t, int64(RoleMint|RoleBurn), roles) + }) + + t.Run("two roles v2", func(t *testing.T) { + t.Parallel() + data := "\n" + string(rune((len("ESDTRoleLocalMint")))) + "ESDTRoleLocalMint" + data += "\n" + string(rune((len("ESDTRoleNFTUpdateAttributes")))) + "ESDTRoleNFTUpdateAttributes" + + roles := getESDTRoles([]byte(data), true) + require.Equal(t, int64(RoleMint|RoleNFTUpdateAttributes), roles) + }) +} + +func TestValidateToken(t *testing.T) { + t.Parallel() + + require.True(t, ValidateToken([]byte("TEST-123456"))) + require.False(t, ValidateToken([]byte("TEST-12345"))) + require.False(t, ValidateToken([]byte("TEST-1234567"))) + require.False(t, ValidateToken([]byte("test-123456"))) + require.False(t, ValidateToken([]byte("TEST-12345G"))) +} diff --git a/vmhost/vmhooks/generate/cmd/eiGenMain.go b/vmhost/vmhooks/generate/cmd/eiGenMain.go index 7a8cbb682..427cbebec 100644 --- a/vmhost/vmhooks/generate/cmd/eiGenMain.go +++ b/vmhost/vmhooks/generate/cmd/eiGenMain.go @@ -27,6 +27,7 @@ func initEIMetadata() *eapigen.EIMetadata { {SourcePath: "manMapOps.go", Name: "ManagedMap"}, {SourcePath: "smallIntOps.go", Name: "SmallInt"}, {SourcePath: "cryptoei.go", Name: "Crypto"}, + {SourcePath: "unsafeOps.go", Name: "Unsafe"}, }, AllFunctions: nil, } diff --git a/vmhost/vmhooks/manBufOps.go b/vmhost/vmhooks/manBufOps.go index 89f057054..a491039e1 100644 --- a/vmhost/vmhooks/manBufOps.go +++ b/vmhost/vmhooks/manBufOps.go @@ -92,7 +92,7 @@ func (context *VMHooksImpl) MBufferGetLength(mBufferHandle int32) int32 { length := managedType.GetLength(mBufferHandle) if length == -1 { - context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) + context.FailExecutionConditionally(vmhost.ErrNoManagedBufferUnderThisHandle) return -1 } @@ -110,24 +110,24 @@ func (context *VMHooksImpl) MBufferGetBytes(mBufferHandle int32, resultOffset ex err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } mBufferBytes, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(mBufferBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = context.MemStore(resultOffset, mBufferBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -149,30 +149,30 @@ func (context *VMHooksImpl) MBufferGetByteSlice( err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } sourceBytes, err := managedType.GetBytes(sourceHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(sourceBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } if startingPosition < 0 || sliceLength < 0 || int(startingPosition+sliceLength) > len(sourceBytes) { - // does not fail execution if slice exceeds bounds - return 1 + context.failExecutionWithAsyncV3Fixes(vmhost.ErrArgOutOfRange) + return -1 } slice := sourceBytes[startingPosition : startingPosition+sliceLength] err = context.MemStore(resultOffset, slice) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -195,23 +195,25 @@ func ManagedBufferCopyByteSliceWithHost(host vmhost.VMHost, sourceHandle int32, err := metering.UseGasBounded(gasToUse) if err != nil { FailExecution(host, err) - return 1 + return -1 } sourceBytes, err := managedType.GetBytes(sourceHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(sourceBytes) if err != nil { FailExecution(host, err) - return 1 + return -1 } if startingPosition < 0 || sliceLength < 0 || int(startingPosition+sliceLength) > len(sourceBytes) { - // does not fail execution if slice exceeds bounds - return 1 + if host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + FailExecutionConditionally(host, vmhost.ErrBadBounds) + } + return -1 } slice := sourceBytes[startingPosition : startingPosition+sliceLength] @@ -221,7 +223,7 @@ func ManagedBufferCopyByteSliceWithHost(host vmhost.VMHost, sourceHandle int32, err = metering.UseGasBounded(gasToUse) if err != nil { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -238,7 +240,7 @@ func (context *VMHooksImpl) MBufferEq(mBufferHandle1 int32, mBufferHandle2 int32 err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } bytes1, err := managedType.GetBytes(mBufferHandle1) @@ -249,7 +251,7 @@ func (context *VMHooksImpl) MBufferEq(mBufferHandle1 int32, mBufferHandle2 int32 err = managedType.ConsumeGasForBytes(bytes1) if err != nil { context.FailExecution(err) - return 1 + return -1 } bytes2, err := managedType.GetBytes(mBufferHandle2) @@ -260,7 +262,7 @@ func (context *VMHooksImpl) MBufferEq(mBufferHandle1 int32, mBufferHandle2 int32 err = managedType.ConsumeGasForBytes(bytes2) if err != nil { context.FailExecution(err) - return 1 + return -1 } if bytes.Equal(bytes1, bytes2) { @@ -281,19 +283,19 @@ func (context *VMHooksImpl) MBufferSetBytes(mBufferHandle int32, dataOffset exec err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, dataLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(data) if err != nil { context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(mBufferHandle, data) @@ -328,13 +330,13 @@ func (context *VMHooksImpl) ManagedBufferSetByteSliceWithHost( err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, dataLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } return ManagedBufferSetByteSliceWithTypedArgs(host, mBufferHandle, startingPosition, dataLength, data) @@ -349,18 +351,20 @@ func ManagedBufferSetByteSliceWithTypedArgs(host vmhost.VMHost, mBufferHandle in err := managedType.ConsumeGasForBytes(data) if err != nil { FailExecution(host, err) - return 1 + return -1 } bufferBytes, err := managedType.GetBytes(mBufferHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } if startingPosition < 0 || dataLength < 0 || int(startingPosition+dataLength) > len(bufferBytes) { - // does not fail execution if slice exceeds bounds - return 1 + if host.EnableEpochsHandler().IsFlagEnabled(vmhost.AsyncV3FixesFlag) { + FailExecutionConditionally(host, vmhost.ErrBadBounds) + } + return -1 } start := int(startingPosition) @@ -385,25 +389,25 @@ func (context *VMHooksImpl) MBufferAppend(accumulatorHandle int32, dataHandle in err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } dataBufferBytes, err := managedType.GetBytes(dataHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(dataBufferBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } isSuccess := managedType.AppendBytes(accumulatorHandle, dataBufferBytes) if !isSuccess { context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) - return 1 + return -1 } return 0 @@ -420,26 +424,26 @@ func (context *VMHooksImpl) MBufferAppendBytes(accumulatorHandle int32, dataOffs err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } data, err := context.MemLoad(dataOffset, dataLength) if err != nil { context.FailExecution(err) - return 1 + return -1 } isSuccess := managedType.AppendBytes(accumulatorHandle, data) if !isSuccess { context.FailExecution(vmhost.ErrNoManagedBufferUnderThisHandle) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(data))) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -462,7 +466,7 @@ func (context *VMHooksImpl) MBufferToBigIntUnsigned(mBufferHandle int32, bigIntH managedBuffer, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } if enableEpochsHandler.IsFlagEnabled(vmhost.BarnardOpcodesFlag) { @@ -470,7 +474,7 @@ func (context *VMHooksImpl) MBufferToBigIntUnsigned(mBufferHandle int32, bigIntH err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } } @@ -497,7 +501,7 @@ func (context *VMHooksImpl) MBufferToBigIntSigned(mBufferHandle int32, bigIntHan managedBuffer, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } if enableEpochsHandler.IsFlagEnabled(vmhost.BarnardOpcodesFlag) { @@ -505,7 +509,7 @@ func (context *VMHooksImpl) MBufferToBigIntSigned(mBufferHandle int32, bigIntHan err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } } @@ -531,7 +535,7 @@ func (context *VMHooksImpl) MBufferFromBigIntUnsigned(mBufferHandle int32, bigIn value, err := managedType.GetBigInt(bigIntHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(mBufferHandle, value.Bytes()) @@ -555,7 +559,7 @@ func (context *VMHooksImpl) MBufferFromBigIntSigned(mBufferHandle int32, bigIntH value, err := managedType.GetBigInt(bigIntHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(mBufferHandle, twos.ToBytes(value)) @@ -572,26 +576,26 @@ func (context *VMHooksImpl) MBufferToSmallIntUnsigned(mBufferHandle int32) int64 err := metering.UseGasBoundedAndAddTracedGas(mBufferToSmallIntUnsignedName, gasToUse) if err != nil { context.FailExecution(err) - return 0 + return -1 } data, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(data))) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } bigInt := big.NewInt(0).SetBytes(data) if !bigInt.IsUint64() { context.FailExecution(vmhost.ErrBytesExceedUint64) - return 0 + return -1 } return int64(bigInt.Uint64()) } @@ -606,26 +610,26 @@ func (context *VMHooksImpl) MBufferToSmallIntSigned(mBufferHandle int32) int64 { err := metering.UseGasBoundedAndAddTracedGas(mBufferToSmallIntSignedName, gasToUse) if err != nil { context.FailExecution(err) - return 0 + return -1 } data, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, uint64(len(data))) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } bigInt := twos.SetBytes(big.NewInt(0), data) if !bigInt.IsInt64() { context.FailExecution(vmhost.ErrBytesExceedInt64) - return 0 + return -1 } return bigInt.Int64() } @@ -676,30 +680,30 @@ func (context *VMHooksImpl) MBufferToBigFloat(mBufferHandle, bigFloatHandle int3 err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } managedBuffer, err := managedType.GetBytes(mBufferHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(managedBuffer) if err != nil { context.FailExecution(err) - return 1 + return -1 } if managedType.EncodedBigFloatIsNotValid(managedBuffer) { context.FailExecution(vmhost.ErrBigFloatWrongPrecision) - return 1 + return -1 } value, err := managedType.GetBigFloatOrCreate(bigFloatHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } bigFloat := new(big.Float) @@ -712,15 +716,14 @@ func (context *VMHooksImpl) MBufferToBigFloat(mBufferHandle, bigFloatHandle int3 if enableEpochsHandler.IsFlagEnabled(vmhost.MaskInternalDependenciesErrorsFlag) { err = vmhost.ErrBigFloatDecode } - context.FailExecution(err) - return 1 + return -1 } } if bigFloat.IsInf() { context.FailExecution(vmhost.ErrInfinityFloatOperation) - return 1 + return -1 } value.Set(bigFloat) @@ -759,13 +762,13 @@ func (context *VMHooksImpl) MBufferFromBigFloat(mBufferHandle, bigFloatHandle in err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } value, err := managedType.GetBigFloat(bigFloatHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } encodedFloat, err := value.GobEncode() @@ -774,13 +777,13 @@ func (context *VMHooksImpl) MBufferFromBigFloat(mBufferHandle, bigFloatHandle in err = vmhost.ErrBigFloatEncode } context.FailExecution(err) - return 1 + return -1 } err = managedType.ConsumeGasForBytes(encodedFloat) if err != nil { context.FailExecution(err) - return 1 + return -1 } managedType.SetBytes(mBufferHandle, encodedFloat) @@ -805,19 +808,19 @@ func (context *VMHooksImpl) MBufferStorageStore(keyHandle int32, sourceHandle in key, err := managedType.GetBytes(keyHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } sourceBytes, err := managedType.GetBytes(sourceHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } _, err = storage.SetStorage(key, sourceBytes) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -833,13 +836,13 @@ func (context *VMHooksImpl) MBufferStorageLoad(keyHandle int32, destinationHandl key, err := managedType.GetBytes(keyHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } storageBytes, trieDepth, usedCache, err := storage.GetStorage(key) if err != nil { context.FailExecution(err) - return 0 + return -1 } err = storage.UseGasForStorageLoad( @@ -900,8 +903,8 @@ func (context *VMHooksImpl) MBufferGetArgument(id int32, destinationHandle int32 args := runtime.Arguments() if int32(len(args)) <= id || id < 0 { - context.FailExecution(vmhost.ErrArgOutOfRange) - return 1 + context.FailExecutionConditionally(vmhost.ErrArgOutOfRange) + return -1 } managedType.SetBytes(destinationHandle, args[id]) return 0 @@ -919,20 +922,20 @@ func (context *VMHooksImpl) MBufferFinish(sourceHandle int32) int32 { err := metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } sourceBytes, err := managedType.GetBytes(sourceHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.PersistPerByte, uint64(len(sourceBytes))) err = metering.UseGasBounded(gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } output.Finish(sourceBytes) diff --git a/vmhost/vmhooks/manBufOps_test.go b/vmhost/vmhooks/manBufOps_test.go new file mode 100644 index 000000000..a948b78da --- /dev/null +++ b/vmhost/vmhooks/manBufOps_test.go @@ -0,0 +1,354 @@ +package vmhooks + +import ( + "crypto/rand" + "github.com/multiversx/mx-chain-vm-go/vmhost" + "math/big" + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_MBufferNew(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("NewManagedBuffer").Return(int32(1)) + + ret := hooks.MBufferNew() + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_MBufferNewFromBytes(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("NewManagedBufferFromBytes", mock.Anything).Return(int32(1)) + + ret := hooks.MBufferNewFromBytes(0, 0) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_MBufferGetLength(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetLength", mock.Anything).Return(int32(10)) + + ret := hooks.MBufferGetLength(0) + require.Equal(t, int32(10), ret) +} + +func TestVMHooksImpl_MBufferGetBytes(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + + ret := hooks.MBufferGetBytes(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferGetByteSlice(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + + ret := hooks.MBufferGetByteSlice(0, 0, 4, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferCopyByteSlice(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferCopyByteSlice(0, 0, 4, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferEq(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + + ret := hooks.MBufferEq(0, 0) + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_MBufferSetBytes(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferSetBytes(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferSetByteSlice(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return(make([]byte, 10), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferSetByteSlice(0, 0, 4, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferAppend(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("AppendBytes", mock.Anything, mock.Anything).Return(true) + + ret := hooks.MBufferAppend(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferAppendBytes(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("AppendBytes", mock.Anything, mock.Anything).Return(true) + + ret := hooks.MBufferAppendBytes(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferToBigIntUnsigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + ret := hooks.MBufferToBigIntUnsigned(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferToBigIntSigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + ret := hooks.MBufferToBigIntSigned(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferFromBigIntUnsigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferFromBigIntUnsigned(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferFromBigIntSigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferFromBigIntSigned(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferToSmallIntUnsigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return(big.NewInt(100).Bytes(), nil) + + ret := hooks.MBufferToSmallIntUnsigned(0) + require.Equal(t, int64(100), ret) +} + +func TestVMHooksImpl_MBufferToSmallIntSigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return(big.NewInt(100).Bytes(), nil) + + ret := hooks.MBufferToSmallIntSigned(0) + require.Equal(t, int64(100), ret) +} + +func TestVMHooksImpl_MBufferFromSmallIntUnsigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.MBufferFromSmallIntUnsigned(0, 100) +} + +func TestVMHooksImpl_MBufferFromSmallIntSigned(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.MBufferFromSmallIntSigned(0, -100) +} + +func TestVMHooksImpl_MBufferStorageStore(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + storage := vmHooks.storage + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + storage.On("SetStorage", mock.Anything, mock.Anything).Return(vmhost.StorageStatus(0), nil) + + ret := hooks.MBufferStorageStore(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferStorageLoad(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + storage := vmHooks.storage + + managedType.On("GetBytes", mock.Anything).Return([]byte("key"), nil) + storage.On("GetStorage", mock.Anything).Return([]byte("data"), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferStorageLoad(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferGetArgument(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + runtime := vmHooks.runtime + + runtime.On("Arguments").Return([][]byte{[]byte("arg1")}) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferGetArgument(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferFinish(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + output := vmHooks.output + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + output.On("Finish", mock.Anything).Return() + + ret := hooks.MBufferFinish(0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferSetRandom(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetRandReader").Return(rand.Reader) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferSetRandom(0, 10) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferToBigFloat(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + value := big.NewFloat(10) + manBytes, _ := big.NewFloat(10).GobEncode() + + managedType.On("GetBytes", mock.Anything).Return(manBytes, nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("EncodedBigFloatIsNotValid", mock.Anything).Return(false) + managedType.On("GetBigFloatOrCreate", mock.Anything).Return(value, nil) + + ret := hooks.MBufferToBigFloat(0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_MBufferFromBigFloat(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBigFloat", mock.Anything).Return(big.NewFloat(0), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + ret := hooks.MBufferFromBigFloat(0, 0) + require.Equal(t, int32(0), ret) +} diff --git a/vmhost/vmhooks/manMapOps.go b/vmhost/vmhooks/manMapOps.go index 0b85de66c..91a2a45de 100644 --- a/vmhost/vmhooks/manMapOps.go +++ b/vmhost/vmhooks/manMapOps.go @@ -18,7 +18,7 @@ func (context *VMHooksImpl) ManagedMapNew() int32 { err := metering.UseGasBoundedAndAddTracedGas(managedMapNewName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } return managedType.NewManagedMap() @@ -34,13 +34,13 @@ func (context *VMHooksImpl) ManagedMapPut(mMapHandle int32, keyHandle int32, val err := metering.UseGasBoundedAndAddTracedGas(managedMapPutName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ManagedMapPut(mMapHandle, keyHandle, valueHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -56,13 +56,13 @@ func (context *VMHooksImpl) ManagedMapGet(mMapHandle int32, keyHandle int32, out err := metering.UseGasBoundedAndAddTracedGas(managedMapGetName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ManagedMapGet(mMapHandle, keyHandle, outValueHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -78,13 +78,13 @@ func (context *VMHooksImpl) ManagedMapRemove(mMapHandle int32, keyHandle int32, err := metering.UseGasBoundedAndAddTracedGas(managedMapRemoveName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } err = managedType.ManagedMapRemove(mMapHandle, keyHandle, outValueHandle) if err != nil { context.FailExecution(err) - return 1 + return -1 } return 0 @@ -100,13 +100,13 @@ func (context *VMHooksImpl) ManagedMapContains(mMapHandle int32, keyHandle int32 err := metering.UseGasBoundedAndAddTracedGas(managedMapContainsName, gasToUse) if err != nil { context.FailExecution(err) - return 2 + return -1 } foundValue, err := managedType.ManagedMapContains(mMapHandle, keyHandle) if err != nil { context.FailExecution(err) - return 2 + return -1 } if foundValue { diff --git a/vmhost/vmhooks/manMapOps_test.go b/vmhost/vmhooks/manMapOps_test.go new file mode 100644 index 000000000..5c9397670 --- /dev/null +++ b/vmhost/vmhooks/manMapOps_test.go @@ -0,0 +1,68 @@ +package vmhooks + +import ( + "testing" + + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_ManagedMapNew(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("NewManagedMap").Return(int32(1)) + + ret := hooks.ManagedMapNew() + require.Equal(t, int32(1), ret) +} + +func TestVMHooksImpl_ManagedMapPut(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("ManagedMapPut", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.ManagedMapPut(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedMapGet(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("ManagedMapGet", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.ManagedMapGet(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedMapRemove(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("ManagedMapRemove", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + ret := hooks.ManagedMapRemove(0, 0, 0) + require.Equal(t, int32(0), ret) +} + +func TestVMHooksImpl_ManagedMapContains(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("ManagedMapContains", mock.Anything, mock.Anything).Return(true, nil) + + ret := hooks.ManagedMapContains(0, 0) + require.Equal(t, int32(1), ret) +} diff --git a/vmhost/vmhooks/managedConversions_test.go b/vmhost/vmhooks/managedConversions_test.go new file mode 100644 index 000000000..0cae2d59a --- /dev/null +++ b/vmhost/vmhooks/managedConversions_test.go @@ -0,0 +1,169 @@ +package vmhooks + +import ( + "math/big" + "testing" + + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/multiversx/mx-chain-vm-go/config" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestReadESDTTransfer(t *testing.T) { + t.Parallel() + + managedType := &mockery.MockManagedTypesContext{} + runtime := &mockery.MockRuntimeContext{} + + managedType.On("GetBytes", mock.Anything).Return([]byte("token-name"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ConsumeGasForBigIntCopy", mock.Anything).Return(nil) + + data := make([]byte, 16) + esdtTransfer, err := readESDTTransfer(managedType, runtime, data) + require.Nil(t, err) + require.NotNil(t, esdtTransfer) +} + +func TestReadESDTTransfers(t *testing.T) { + t.Parallel() + + managedType := &mockery.MockManagedTypesContext{} + runtime := &mockery.MockRuntimeContext{} + + managedType.On("GetBytes", mock.Anything).Return(make([]byte, 32), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ConsumeGasForBigIntCopy", mock.Anything).Return(nil) + + esdtTransfers, err := readESDTTransfers(managedType, runtime, 0) + require.Nil(t, err) + require.NotNil(t, esdtTransfers) + require.Len(t, esdtTransfers, 2) +} + +func TestWriteESDTTransfer(t *testing.T) { + t.Parallel() + + managedType := &mockery.MockManagedTypesContext{} + + managedType.On("NewManagedBufferFromBytes", mock.Anything).Return(int32(1)) + managedType.On("NewBigInt", mock.Anything).Return(int32(2)) + + esdtTransfer := &vmcommon.ESDTTransfer{ + ESDTTokenName: []byte("token-name"), + ESDTTokenNonce: 123, + ESDTValue: big.NewInt(100), + } + data := make([]byte, 16) + writeESDTTransfer(managedType, esdtTransfer, data) +} + +func TestWriteESDTTransfersToBytes(t *testing.T) { + t.Parallel() + + managedType := &mockery.MockManagedTypesContext{} + + managedType.On("NewManagedBufferFromBytes", mock.Anything).Return(int32(1)) + managedType.On("NewBigInt", mock.Anything).Return(int32(2)) + + esdtTransfers := []*vmcommon.ESDTTransfer{ + { + ESDTTokenName: []byte("token-name"), + ESDTTokenNonce: 123, + ESDTValue: big.NewInt(100), + }, + { + ESDTTokenName: []byte("token-name2"), + ESDTTokenNonce: 456, + ESDTValue: big.NewInt(200), + }, + } + data := writeESDTTransfersToBytes(managedType, esdtTransfers) + require.Len(t, data, 32) +} + +func TestReadDestinationValueFunctionArguments(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + managedType := &mockery.MockManagedTypesContext{} + metering := &mockery.MockMeteringContext{} + + host.On("ManagedTypes").Return(managedType) + host.On("Metering").Return(metering) + gasSchedule, _ := config.CreateGasConfig(config.MakeGasMapForTests()) + metering.On("GasSchedule").Return(gasSchedule) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + metering.On("UseGasBounded", mock.Anything).Return(nil) + + vmInput, err := readDestinationValueFunctionArguments(host, 0, 0, 0, 0) + require.Nil(t, err) + require.NotNil(t, vmInput) +} + +func TestReadDestinationValueArguments(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + managedType := &mockery.MockManagedTypesContext{} + metering := &mockery.MockMeteringContext{} + + host.On("ManagedTypes").Return(managedType) + host.On("Metering").Return(metering) + gasSchedule, _ := config.CreateGasConfig(config.MakeGasMapForTests()) + metering.On("GasSchedule").Return(gasSchedule) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + metering.On("UseGasBounded", mock.Anything).Return(nil) + + vmInput, err := readDestinationValueArguments(host, 0, 0, 0) + require.Nil(t, err) + require.NotNil(t, vmInput) +} + +func TestReadDestinationFunctionArguments(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + managedType := &mockery.MockManagedTypesContext{} + metering := &mockery.MockMeteringContext{} + + host.On("ManagedTypes").Return(managedType) + host.On("Metering").Return(metering) + gasSchedule, _ := config.CreateGasConfig(config.MakeGasMapForTests()) + metering.On("GasSchedule").Return(gasSchedule) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + metering.On("UseGasBounded", mock.Anything).Return(nil) + + vmInput, err := readDestinationFunctionArguments(host, 0, 0, 0) + require.Nil(t, err) + require.NotNil(t, vmInput) +} + +func TestReadDestinationArguments(t *testing.T) { + t.Parallel() + + host := &mockery.MockVMHost{} + managedType := &mockery.MockManagedTypesContext{} + metering := &mockery.MockMeteringContext{} + + host.On("ManagedTypes").Return(managedType) + host.On("Metering").Return(metering) + gasSchedule, _ := config.CreateGasConfig(config.MakeGasMapForTests()) + metering.On("GasSchedule").Return(gasSchedule) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + metering.On("UseGasBounded", mock.Anything).Return(nil) + + vmInput, err := readDestinationArguments(host, 0, 0) + require.Nil(t, err) + require.NotNil(t, vmInput) +} diff --git a/vmhost/vmhooks/managedei.go b/vmhost/vmhooks/managedei.go index 29564528e..a74187bc5 100644 --- a/vmhost/vmhooks/managedei.go +++ b/vmhost/vmhooks/managedei.go @@ -321,7 +321,7 @@ func (context *VMHooksImpl) ManagedGetReturnData(resultID int32, resultHandle in returnData := output.ReturnData() if resultID >= int32(len(returnData)) || resultID < 0 { - context.FailExecution(vmhost.ErrArgOutOfRange) + context.FailExecutionConditionally(vmhost.ErrArgOutOfRange) return } @@ -560,7 +560,7 @@ func ManagedGetESDTTokenDataWithHost( } -// ManagedGetESDTTokenData VMHooks implementation. +// ManagedGetESDTTokenType VMHooks implementation. // @autogenerate(VMHooks) func (context *VMHooksImpl) ManagedGetESDTTokenType( addressHandle int32, @@ -706,7 +706,7 @@ func (context *VMHooksImpl) ManagedCreateAsyncCall( vmInput, err := readDestinationFunctionArguments(host, destHandle, functionHandle, argumentsHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } data := makeCrossShardCallFromInput(vmInput.function, vmInput.arguments) @@ -714,25 +714,25 @@ func (context *VMHooksImpl) ManagedCreateAsyncCall( value, err := managedType.GetBigInt(valueHandle) if err != nil { context.FailExecution(vmhost.ErrArgOutOfRange) - return 1 + return -1 } successFunc, err := context.MemLoad(successOffset, successLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } errorFunc, err := context.MemLoad(errorOffset, errorLength) if err != nil { FailExecution(host, err) - return 1 + return -1 } callbackClosure, err := managedType.GetBytes(callbackClosureHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } return CreateAsyncCallWithTypedArgs(host, @@ -979,13 +979,13 @@ func (context *VMHooksImpl) ManagedDeployFromSourceContract( vmInput, err := readDestinationValueArguments(host, addressHandle, valueHandle, argumentsHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } codeMetadata, err := managedType.GetBytes(codeMetadataHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } lenReturnData := len(host.Output().ReturnData()) @@ -1000,14 +1000,14 @@ func (context *VMHooksImpl) ManagedDeployFromSourceContract( ) if err != nil { FailExecution(host, err) - return 1 + return -1 } managedType.SetBytes(resultAddressHandle, newAddress) err = setReturnDataIfExists(host, lenReturnData, resultHandle) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -1041,13 +1041,13 @@ func (context *VMHooksImpl) ManagedCreateContract( value, err := managedType.GetBigInt(valueHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } data, actualLen, err := managedType.ReadManagedVecOfManagedBuffers(argumentsHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } gasToUse = math.MulUint64(metering.GasSchedule().BaseOperationCost.DataCopyPerByte, actualLen) @@ -1060,27 +1060,27 @@ func (context *VMHooksImpl) ManagedCreateContract( codeMetadata, err := managedType.GetBytes(codeMetadataHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } code, err := managedType.GetBytes(codeHandle) if err != nil { FailExecution(host, err) - return 1 + return -1 } lenReturnData := len(host.Output().ReturnData()) newAddress, err := createContract(sender, data, value, gas, code, codeMetadata, host, CreateContract) if err != nil { FailExecution(host, err) - return 1 + return -1 } managedType.SetBytes(resultAddressHandle, newAddress) err = setReturnDataIfExists(host, lenReturnData, resultHandle) if err != nil && runtime.UseGasBoundedShouldFailExecution() { FailExecution(host, err) - return 1 + return -1 } return 0 @@ -1596,7 +1596,7 @@ func ManagedGetCodeMetadataWithHost(host vmhost.VMHost, addressHandle int32, res contract, err := host.Blockchain().GetUserAccount(mBuffAddress) if err != nil || check.IfNil(contract) { - FailExecution(host, err) + FailExecutionConditionally(host, err) return } @@ -1626,7 +1626,7 @@ func (context *VMHooksImpl) ManagedGetCodeHash(addressHandle int32, codeHashHand managedType.SetBytes(codeHashHandle, codeHash) } -// ManagedGetCodeHashWithHost returns the code hash at some address +// ManagedGetCodeHashTyped returns the code hash at some address func ManagedGetCodeHashTyped( host vmhost.VMHost, address []byte, @@ -1641,7 +1641,6 @@ func ManagedGetCodeHashTyped( } codeHash := blockchain.GetCodeHash(address) - return codeHash, nil } diff --git a/vmhost/vmhooks/managedei_test.go b/vmhost/vmhooks/managedei_test.go new file mode 100644 index 000000000..0cb5fcb40 --- /dev/null +++ b/vmhost/vmhooks/managedei_test.go @@ -0,0 +1,585 @@ +package vmhooks + +import ( + "math/big" + "testing" + + "github.com/multiversx/mx-chain-core-go/data/esdt" + vmcommon "github.com/multiversx/mx-chain-vm-common-go" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" +) + +func TestVMHooksImpl_ManagedSCAddress(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetContextAddress").Return([]byte("sc-address")) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedSCAddress(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("sc-address")) +} + +func TestVMHooksImpl_ManagedOwnerAddress(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + blockchain.On("GetOwnerAddress").Return([]byte("owner-address"), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedOwnerAddress(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("owner-address")) +} + +func TestVMHooksImpl_ManagedCaller(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{ + VMInput: vmcommon.VMInput{ + CallerAddr: []byte("caller"), + }, + }) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedCaller(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("caller")) +} + +func TestVMHooksImpl_ManagedGetOriginalCallerAddr(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{ + VMInput: vmcommon.VMInput{ + OriginalCallerAddr: []byte("original-caller"), + }, + }) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetOriginalCallerAddr(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("original-caller")) +} + +func TestVMHooksImpl_ManagedGetRelayerAddr(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{ + VMInput: vmcommon.VMInput{ + RelayerAddr: []byte("relayer"), + }, + }) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetRelayerAddr(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("relayer")) +} + +func TestVMHooksImpl_ManagedSignalError(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("error"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + runtime.On("SignalUserError", "error").Return() + + hooks.ManagedSignalError(0) + runtime.AssertCalled(t, "SignalUserError", "error") +} + +func TestVMHooksImpl_ManagedWriteLog(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + output := vmHooks.output + + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("topic")}, uint64(1), nil) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + runtime.On("GetContextAddress").Return([]byte("address")) + output.On("WriteLog", mock.Anything, mock.Anything, mock.Anything).Return() + + hooks.ManagedWriteLog(0, 0) +} + +func TestVMHooksImpl_ManagedGetOriginalTxHash(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetOriginalTxHash").Return([]byte("tx-hash")) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetOriginalTxHash(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("tx-hash")) +} + +func TestVMHooksImpl_ManagedGetStateRootHash(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + blockchain.On("GetStateRootHash").Return([]byte("state-root-hash")) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetStateRootHash(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("state-root-hash")) +} + +func TestVMHooksImpl_ManagedGetBlockRandomSeed(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + blockchain.On("CurrentRandomSeed").Return([]byte("random-seed")) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetBlockRandomSeed(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("random-seed")) +} + +func TestVMHooksImpl_ManagedGetPrevBlockRandomSeed(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + blockchain.On("LastRandomSeed").Return([]byte("random-seed")) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetPrevBlockRandomSeed(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("random-seed")) +} + +func TestVMHooksImpl_ManagedGetReturnData(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + output := vmHooks.output + hooks := vmHooks.hooks + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetReturnData(0, 0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("data")) +} + +func TestVMHooksImpl_ManagedGetMultiESDTCallValue(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{ + VMInput: vmcommon.VMInput{ + ESDTTransfers: []*vmcommon.ESDTTransfer{}, + }, + }) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + + hooks.ManagedGetMultiESDTCallValue(0) +} + +func TestVMHooksImpl_ManagedGetAllTransfersCallValue(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{ + VMInput: vmcommon.VMInput{ + ESDTTransfers: []*vmcommon.ESDTTransfer{}, + CallValue: big.NewInt(0), + }, + }) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + + hooks.ManagedGetAllTransfersCallValue(0) +} + +func TestVMHooksImpl_ManagedGetBackTransfers(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + hooks := vmHooks.hooks + + managedType.On("GetBackTransfers").Return(nil, big.NewInt(0)) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + hooks.ManagedGetBackTransfers(0, 0) +} + +func TestVMHooksImpl_ManagedGetESDTBalance(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(&esdt.ESDigitalToken{Value: big.NewInt(100)}, nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + hooks.ManagedGetESDTBalance(0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedGetESDTTokenData(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(&esdt.ESDigitalToken{ + Value: big.NewInt(100), + TokenMetaData: &esdt.MetaData{}, + }, nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedGetESDTTokenData(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedGetESDTTokenType(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + blockchain := vmHooks.blockchain + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + blockchain.On("GetESDTToken", mock.Anything, mock.Anything, mock.Anything).Return(&esdt.ESDigitalToken{Type: 1}, nil) + managedType.On("GetBigIntOrCreate", mock.Anything).Return(big.NewInt(0)) + + hooks.ManagedGetESDTTokenType(0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedAsyncCall(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedAsyncCall(0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedCreateAsyncCall(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + async.On("RegisterAsyncCall", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedCreateAsyncCall(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedGetCallbackClosure(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + + async.On("GetCallbackClosure").Return([]byte("closure"), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedGetCallbackClosure(0) + managedType.AssertCalled(t, "SetBytes", int32(0), []byte("closure")) +} + +func TestVMHooksImpl_ManagedUpgradeFromSourceContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + runtime := vmHooks.runtime + blockchain := vmHooks.blockchain + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("SetRuntimeBreakpointValue", mock.Anything).Return() + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + blockchain.On("GetCode", mock.Anything).Return([]byte("code"), nil) + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedUpgradeFromSourceContract(0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedUpgradeContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + runtime := vmHooks.runtime + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("SetRuntimeBreakpointValue", mock.Anything).Return() + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedUpgradeContract(0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedDeleteContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + async := vmHooks.async + hooks := vmHooks.hooks + runtime := vmHooks.runtime + + runtime.On("SetRuntimeBreakpointValue", mock.Anything).Return() + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + async.On("RegisterLegacyAsyncCall", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedDeleteContract(0, 0, 0) +} + +func TestVMHooksImpl_ManagedDeployFromSourceContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + blockchain := vmHooks.blockchain + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + blockchain.On("GetCode", mock.Anything).Return([]byte("code"), nil) + host.On("CreateNewContract", mock.Anything, mock.Anything).Return([]byte("new-address"), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedDeployFromSourceContract(0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedCreateContract(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + host.On("CreateNewContract", mock.Anything, mock.Anything).Return([]byte("new-address"), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + + hooks.ManagedCreateContract(0, 0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedExecuteReadOnly(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + async := vmHooks.async + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + runtime.On("ReadOnly").Return(false) + runtime.On("SetReadOnly", mock.Anything).Return() + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedExecuteReadOnly(0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedExecuteOnSameContext(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("ExecuteOnSameContext", mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedExecuteOnSameContext(0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedExecuteOnDestContext(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + async := vmHooks.async + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + host.On("CompleteLogEntriesWithCallType", mock.Anything, mock.Anything).Return() + host.On("AreInSameShard", mock.Anything, mock.Anything).Return(true) + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedExecuteOnDestContext(0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedExecuteOnDestContextWithErrorReturn(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + async := vmHooks.async + output := vmHooks.output + + output.On("ReturnData").Return([][]byte{[]byte("data")}) + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("GetBigInt", mock.Anything).Return(big.NewInt(100), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + managedType.On("SetBytes", mock.Anything, mock.Anything).Return() + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + host.On("CompleteLogEntriesWithCallType", mock.Anything, mock.Anything).Return() + host.On("AreInSameShard", mock.Anything, mock.Anything).Return() + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + + hooks.ManagedExecuteOnDestContextWithErrorReturn(0, 0, 0, 0, 0, 0) +} + +func TestVMHooksImpl_ManagedMultiTransferESDTNFTExecute(t *testing.T) { + t.Parallel() + vmHooks := createHooksWithBaseSetup() + managedType := vmHooks.managedType + host := vmHooks.host + hooks := vmHooks.hooks + runtime := vmHooks.runtime + async := vmHooks.async + + runtime.On("GetContextAddress").Return([]byte("sender")) + runtime.On("GetOriginalCallerAddress").Return([]byte("original-caller")) + runtime.On("GetVMInput").Return(&vmcommon.ContractCallInput{}) + managedType.On("GetBytes", mock.Anything).Return([]byte("data"), nil) + managedType.On("ReadManagedVecOfManagedBuffers", mock.Anything).Return([][]byte{[]byte("arg1")}, uint64(1), nil) + managedType.On("ConsumeGasForBytes", mock.Anything).Return(nil) + host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + host.On("ExecuteOnDestContext", mock.Anything).Return(&vmcommon.VMOutput{}, true, nil) + host.On("CompleteLogEntriesWithCallType", mock.Anything, mock.Anything).Return() + async.On("SetAsyncArgumentsForCall", mock.Anything).Return() + async.On("CompleteChildConditional", mock.Anything, mock.Anything, mock.Anything).Return(nil) + managedType.On("WriteManagedVecOfManagedBuffers", mock.Anything, mock.Anything).Return(nil) + output := &mockery.MockOutputContext{} + host.On("Output").Return(output) + output.On("TransferESDT", mock.Anything, mock.Anything).Return(uint64(0), nil) + blockchain := &mockery.MockBlockchainContext{} + host.On("Blockchain").Return(blockchain) + blockchain.On("GetSnapshot").Return(0) + + hooks.ManagedMultiTransferESDTNFTExecute(0, 0, 0, 0, 0) +} diff --git a/vmhost/vmhooks/smallIntOps.go b/vmhost/vmhooks/smallIntOps.go index 8b6be7949..ad70cda34 100644 --- a/vmhost/vmhooks/smallIntOps.go +++ b/vmhost/vmhooks/smallIntOps.go @@ -33,20 +33,20 @@ func (context *VMHooksImpl) SmallIntGetUnsignedArgument(id int32) int64 { err := metering.UseGasBoundedAndAddTracedGas(smallIntGetUnsignedArgumentName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } args := runtime.Arguments() if id < 0 || id >= int32(len(args)) { context.FailExecution(vmhost.ErrArgIndexOutOfRange) - return 0 + return -1 } arg := args[id] argBigInt := big.NewInt(0).SetBytes(arg) if !argBigInt.IsUint64() { context.FailExecution(vmhost.ErrArgOutOfRange) - return 0 + return -1 } return int64(argBigInt.Uint64()) } @@ -61,20 +61,20 @@ func (context *VMHooksImpl) SmallIntGetSignedArgument(id int32) int64 { err := metering.UseGasBoundedAndAddTracedGas(smallIntGetSignedArgumentName, gasToUse) if err != nil { context.FailExecution(err) - return 1 + return -1 } args := runtime.Arguments() if id < 0 || id >= int32(len(args)) { context.FailExecution(vmhost.ErrArgIndexOutOfRange) - return 0 + return -1 } arg := args[id] argBigInt := twos.SetBytes(big.NewInt(0), arg) if !argBigInt.IsInt64() { context.FailExecution(vmhost.ErrArgOutOfRange) - return 0 + return -1 } return argBigInt.Int64() } @@ -180,13 +180,13 @@ func (context *VMHooksImpl) SmallIntStorageLoadUnsigned(keyOffset executor.MemPt key, err := context.MemLoad(keyOffset, keyLength) if err != nil { context.FailExecution(err) - return 0 + return -1 } data, trieDepth, usedCache, err := storage.GetStorage(key) if err != nil { context.FailExecution(err) - return 0 + return -1 } err = storage.UseGasForStorageLoad( @@ -202,7 +202,7 @@ func (context *VMHooksImpl) SmallIntStorageLoadUnsigned(keyOffset executor.MemPt valueBigInt := big.NewInt(0).SetBytes(data) if !valueBigInt.IsUint64() { context.FailExecution(vmhost.ErrStorageValueOutOfRange) - return 0 + return -1 } return int64(valueBigInt.Uint64()) @@ -217,13 +217,13 @@ func (context *VMHooksImpl) SmallIntStorageLoadSigned(keyOffset executor.MemPtr, key, err := context.MemLoad(keyOffset, keyLength) if err != nil { context.FailExecution(err) - return 0 + return -1 } data, trieDepth, usedCache, err := storage.GetStorage(key) if err != nil { context.FailExecution(err) - return 0 + return -1 } err = storage.UseGasForStorageLoad( @@ -239,7 +239,7 @@ func (context *VMHooksImpl) SmallIntStorageLoadSigned(keyOffset executor.MemPtr, valueBigInt := twos.SetBytes(big.NewInt(0), data) if !valueBigInt.IsInt64() { context.FailExecution(vmhost.ErrStorageValueOutOfRange) - return 0 + return -1 } return valueBigInt.Int64() diff --git a/vmhost/vmhooks/smallIntOps_test.go b/vmhost/vmhooks/smallIntOps_test.go new file mode 100644 index 000000000..57c9bb514 --- /dev/null +++ b/vmhost/vmhooks/smallIntOps_test.go @@ -0,0 +1,104 @@ +package vmhooks + +import ( + "math/big" + "testing" + + "github.com/multiversx/mx-chain-vm-go/vmhost" + twos "github.com/multiversx/mx-components-big-int/twos-complement" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestVMHooksImpl_SmallIntGetUnsignedArgument(t *testing.T) { + t.Parallel() + + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + t.Run("should work", func(t *testing.T) { + runtime.On("Arguments").Return([][]byte{big.NewInt(42).Bytes()}) + val := hooks.SmallIntGetUnsignedArgument(0) + require.Equal(t, int64(42), val) + }) + + t.Run("out of range", func(t *testing.T) { + runtime.On("Arguments").Return([][]byte{}) + hooks.SmallIntGetUnsignedArgument(0) + // expect fail execution + }) +} + +func TestVMHooksImpl_SmallIntGetSignedArgument(t *testing.T) { + t.Parallel() + + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + + t.Run("should work", func(t *testing.T) { + runtime.On("Arguments").Return([][]byte{twos.ToBytes(big.NewInt(-42))}) + val := hooks.SmallIntGetSignedArgument(0) + require.Equal(t, int64(-42), val) + }) +} + +func TestVMHooksImpl_SmallIntFinishUnsigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + output.On("Finish", mock.Anything).Return() + + hooks.SmallIntFinishUnsigned(42) + output.AssertCalled(t, "Finish", big.NewInt(42).Bytes()) +} + +func TestVMHooksImpl_SmallIntFinishSigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, output, _ := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + output.On("Finish", mock.Anything).Return() + + hooks.SmallIntFinishSigned(-42) +} + +func TestVMHooksImpl_SmallIntStorageStoreUnsigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + storage.On("SetStorage", mock.Anything, mock.Anything).Return(vmhost.StorageAdded, nil) + hooks.SmallIntStorageStoreUnsigned(0, 0, 42) +} + +func TestVMHooksImpl_SmallIntStorageStoreSigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + storage.On("SetStorage", mock.Anything, mock.Anything).Return(vmhost.StorageAdded, nil) + hooks.SmallIntStorageStoreSigned(0, 0, -42) +} + +func TestVMHooksImpl_SmallIntStorageLoadUnsigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + storage.On("GetStorage", mock.Anything).Return(big.NewInt(42).Bytes(), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + val := hooks.SmallIntStorageLoadUnsigned(0, 0) + require.Equal(t, int64(42), val) +} + +func TestVMHooksImpl_SmallIntStorageLoadSigned(t *testing.T) { + t.Parallel() + + hooks, _, _, metering, _, storage := createTestVMHooks() + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + storage.On("GetStorage", mock.Anything).Return(twos.ToBytes(big.NewInt(-42)), uint32(0), false, nil) + storage.On("UseGasForStorageLoad", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + val := hooks.SmallIntStorageLoadSigned(0, 0) + require.Equal(t, int64(-42), val) +} diff --git a/vmhost/vmhooks/test_utils_test.go b/vmhost/vmhooks/test_utils_test.go new file mode 100644 index 000000000..c4be8315b --- /dev/null +++ b/vmhost/vmhooks/test_utils_test.go @@ -0,0 +1,116 @@ +package vmhooks + +import ( + mock2 "github.com/multiversx/mx-chain-vm-common-go/mock" + "github.com/multiversx/mx-chain-vm-go/config" + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" +) + +type mockeryStruct struct { + hooks *VMHooksImpl + host *mockery.MockVMHost + runtime *mockery.MockRuntimeContext + metering *mockery.MockMeteringContext + output *mockery.MockOutputContext + storage *mockery.MockStorageContext + blockchain *mockery.MockBlockchainContext + managedType *mockery.MockManagedTypesContext + async *mockery.MockAsyncContext + instance *mockery.MockInstance +} + +func createTestVMHooks() (*VMHooksImpl, *mockery.MockVMHost, *mockery.MockRuntimeContext, *mockery.MockMeteringContext, *mockery.MockOutputContext, *mockery.MockStorageContext) { + hooks, host, runtime, metering, output, storage, _, _ := createTestVMHooksFull() + return hooks, host, runtime, metering, output, storage +} + +func createTestVMHooksFull() (*VMHooksImpl, *mockery.MockVMHost, *mockery.MockRuntimeContext, *mockery.MockMeteringContext, *mockery.MockOutputContext, *mockery.MockStorageContext, *mockery.MockBlockchainContext, *mockery.MockManagedTypesContext) { + vmHooks := createTestVMHooksClear() + + vmHooks.host.On("Runtime").Return(vmHooks.runtime) + vmHooks.host.On("Metering").Return(vmHooks.metering) + vmHooks.host.On("Output").Return(vmHooks.output) + vmHooks.host.On("Storage").Return(vmHooks.storage) + vmHooks.host.On("Blockchain").Return(vmHooks.blockchain) + vmHooks.host.On("ManagedTypes").Return(vmHooks.managedType) + + vmHooks.host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + vmHooks.host.On("IsBuiltinFunctionCall", mock.Anything).Return(false) + vmHooks.runtime.On("FailExecution", mock.Anything).Return() + vmHooks.runtime.On("IsUnsafeMode").Return(false) + + baseInstanceSetup(vmHooks.runtime, vmHooks.instance) + + baseMeteringSetup(vmHooks.metering) + + vmHooks.blockchain.On("LastRandomSeed").Return([]byte("rand")) + vmHooks.blockchain.On("RoundTime").Return(uint64(6000)) + vmHooks.blockchain.On("LastRound").Return(uint64(6000)) + vmHooks.blockchain.On("EpochStartBlockRound").Return(uint64(6000)) + vmHooks.blockchain.On("EpochStartBlockTimeStampMs").Return(uint64(12345000)) + vmHooks.blockchain.On("GetCode", mock.Anything).Return([]byte("code"), nil) + + return vmHooks.hooks, vmHooks.host, vmHooks.runtime, vmHooks.metering, vmHooks.output, vmHooks.storage, vmHooks.blockchain, vmHooks.managedType +} + +func createTestVMHooksClear() *mockeryStruct { + vmHooksMockery := &mockeryStruct{} + + vmHooksMockery.host = &mockery.MockVMHost{} + vmHooksMockery.runtime = &mockery.MockRuntimeContext{} + vmHooksMockery.metering = &mockery.MockMeteringContext{} + vmHooksMockery.output = &mockery.MockOutputContext{} + vmHooksMockery.storage = &mockery.MockStorageContext{} + vmHooksMockery.instance = &mockery.MockInstance{} + vmHooksMockery.blockchain = &mockery.MockBlockchainContext{} + vmHooksMockery.managedType = &mockery.MockManagedTypesContext{} + vmHooksMockery.async = &mockery.MockAsyncContext{} + + vmHooksMockery.host.On("Runtime").Return(vmHooksMockery.runtime) + vmHooksMockery.host.On("Metering").Return(vmHooksMockery.metering) + vmHooksMockery.host.On("Output").Return(vmHooksMockery.output) + vmHooksMockery.host.On("Storage").Return(vmHooksMockery.storage) + vmHooksMockery.host.On("Blockchain").Return(vmHooksMockery.blockchain) + vmHooksMockery.host.On("ManagedTypes").Return(vmHooksMockery.managedType) + vmHooksMockery.host.On("Async").Return(vmHooksMockery.async) + vmHooksMockery.host.On("EnableEpochsHandler").Return(&mock2.EnableEpochsHandlerStub{}) + + vmHooksMockery.hooks = NewVMHooksImpl(vmHooksMockery.host) + return vmHooksMockery +} + +func baseInstanceSetup(runtime *mockery.MockRuntimeContext, instance *mockery.MockInstance) { + runtime.On("GetInstance").Return(instance) + instance.On("MemLoad", mock.Anything, mock.Anything).Return(nil, nil) + instance.On("MemStore", mock.Anything, mock.Anything).Return(nil) +} + +func baseMeteringSetup(metering *mockery.MockMeteringContext) { + gasSchedule, _ := config.CreateGasConfig(config.MakeGasMapForTests()) + metering.On("GasSchedule").Return(gasSchedule) + metering.On("StartGasTracing", mock.Anything) + metering.On("UseGasBounded", mock.Anything).Return(nil) + metering.On("UseGasBoundedAndAddTracedGas", mock.Anything, mock.Anything).Return(nil) + metering.On("GasLeft").Return(uint64(100)) + metering.On("BoundGasLimit", mock.Anything).Return(uint64(100)) +} + +func createTestVMHooksWithSetMetering() (*VMHooksImpl, *mockery.MockVMHost, *mockery.MockRuntimeContext, *mockery.MockMeteringContext, *mockery.MockOutputContext, *mockery.MockStorageContext, *mockery.MockBlockchainContext, *mockery.MockManagedTypesContext, *mockery.MockAsyncContext, *mockery.MockInstance) { + vmHooks := createTestVMHooksClear() + baseMeteringSetup(vmHooks.metering) + baseInstanceSetup(vmHooks.runtime, vmHooks.instance) + return vmHooks.hooks, vmHooks.host, vmHooks.runtime, vmHooks.metering, vmHooks.output, vmHooks.storage, vmHooks.blockchain, vmHooks.managedType, vmHooks.async, vmHooks.instance +} + +func createHooksWithBaseSetup() *mockeryStruct { + vmHooks := createTestVMHooksClear() + baseMeteringSetup(vmHooks.metering) + baseInstanceSetup(vmHooks.runtime, vmHooks.instance) + vmHooks.host.On("IsBuiltinFunctionName", mock.Anything).Return(false) + vmHooks.host.On("IsBuiltinFunctionCall", mock.Anything).Return(false) + vmHooks.runtime.On("FailExecution", mock.Anything).Return() + vmHooks.runtime.On("SetRuntimeBreakpointValue", mock.Anything).Return() + + return vmHooks +} diff --git a/vmhost/vmhooks/unsafeOps.go b/vmhost/vmhooks/unsafeOps.go new file mode 100644 index 000000000..62c5c1121 --- /dev/null +++ b/vmhost/vmhooks/unsafeOps.go @@ -0,0 +1,157 @@ +package vmhooks + +import "github.com/multiversx/mx-chain-vm-go/vmhost" + +const ( + activateUnsafeModeName = "activateUnsafeMode" + deactivateUnsafeModeName = "deactivateUnsafeMode" + managedGetNumErrorsName = "managedGetNumErrors" + managedGetErrorWithIndexName = "managedGetErrorWithIndex" + managedGetLastErrorName = "managedGetLastError" +) + +func (context *VMHooksImpl) useGasForUnsafeActivation(traceString string) error { + metering := context.GetMeteringContext() + gasToUse := metering.GasSchedule().BaseOpsAPICost.Finish + err := metering.UseGasBoundedAndAddTracedGas(traceString, gasToUse) + if err != nil { + context.FailExecution(err) + return err + } + + return nil +} + +// ActivateUnsafeMode VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) ActivateUnsafeMode() { + if err := context.useGasForUnsafeActivation(activateUnsafeModeName); err != nil { + return + } + + context.GetRuntimeContext().SetUnsafeMode(true) +} + +// DeactivateUnsafeMode VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) DeactivateUnsafeMode() { + if err := context.useGasForUnsafeActivation(deactivateUnsafeModeName); err != nil { + return + } + + context.GetRuntimeContext().SetUnsafeMode(false) +} + +// ManagedGetNumErrors VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) ManagedGetNumErrors() int32 { + runtime := context.GetRuntimeContext() + metering := context.GetMeteringContext() + + gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument + err := metering.UseGasBoundedAndAddTracedGas(managedGetNumErrorsName, gasToUse) + if err != nil { + context.FailExecution(err) + return -1 + } + + allErrorsWrapper := runtime.GetAllErrors() + if allErrorsWrapper == nil { + return 0 + } + + wrappableErr, ok := allErrorsWrapper.(vmhost.WrappableError) + if !ok { + context.FailExecution(vmhost.ErrWrongType) + return -1 + } + + return int32(len(wrappableErr.GetAllErrors())) +} + +// ManagedGetErrorWithIndex VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) ManagedGetErrorWithIndex(index int32, errorHandle int32) { + runtime := context.GetRuntimeContext() + metering := context.GetMeteringContext() + managedType := context.GetManagedTypesContext() + + gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument + err := metering.UseGasBoundedAndAddTracedGas(managedGetErrorWithIndexName, gasToUse) + if err != nil { + context.FailExecution(err) + return + } + + allErrorsWrapper := runtime.GetAllErrors() + if allErrorsWrapper == nil { + context.FailExecutionConditionally(vmhost.ErrInvalidArgument) + return + } + + wrappableErr, ok := allErrorsWrapper.(vmhost.WrappableError) + if !ok { + context.FailExecution(vmhost.ErrWrongType) // Should not happen + return + } + + allErrors := wrappableErr.GetAllErrors() + if index < 0 || int(index) >= len(allErrors) { + context.FailExecutionConditionally(vmhost.ErrInvalidArgument) + return + } + + theError := allErrors[index] + errorMessage := []byte(theError.Error()) + + err = managedType.ConsumeGasForBytes(errorMessage) + if err != nil { + context.FailExecution(err) + return + } + + managedType.SetBytes(errorHandle, errorMessage) +} + +// ManagedGetLastError VMHooks implementation. +// @autogenerate(VMHooks) +func (context *VMHooksImpl) ManagedGetLastError(errorHandle int32) { + runtime := context.GetRuntimeContext() + metering := context.GetMeteringContext() + managedType := context.GetManagedTypesContext() + + gasToUse := metering.GasSchedule().BaseOpsAPICost.GetArgument + err := metering.UseGasBoundedAndAddTracedGas(managedGetLastErrorName, gasToUse) + if err != nil { + context.FailExecution(err) + return + } + + allErrorsWrapper := runtime.GetAllErrors() + if allErrorsWrapper == nil { + managedType.SetBytes(errorHandle, []byte{}) + return + } + + wrappableErr, ok := allErrorsWrapper.(vmhost.WrappableError) + if !ok { + context.FailExecution(vmhost.ErrWrongType) + return + } + + lastError := wrappableErr.GetLastError() + if lastError == nil { + managedType.SetBytes(errorHandle, []byte{}) + return + } + + errorMessage := []byte(lastError.Error()) + + err = managedType.ConsumeGasForBytes(errorMessage) + if err != nil { + context.FailExecution(err) + return + } + + managedType.SetBytes(errorHandle, errorMessage) +} diff --git a/vmhost/vmhooks/vmHooksImpl.go b/vmhost/vmhooks/vmHooksImpl.go index 647014daf..f72af7391 100644 --- a/vmhost/vmhooks/vmHooksImpl.go +++ b/vmhost/vmhooks/vmHooksImpl.go @@ -92,16 +92,16 @@ func (context *VMHooksImpl) GetStorageContext() vmhost.StorageContext { return context.host.Storage() } -// FailExecution fails the execution with the provided error -func (context *VMHooksImpl) FailExecution(err error) { - FailExecution(context.host, err) -} - // GetEnableEpochsHandler returns the enable epochs handler func (context *VMHooksImpl) GetEnableEpochsHandler() vmhost.EnableEpochsHandler { return context.host.EnableEpochsHandler() } +// FailExecution fails the execution with the provided error +func (context *VMHooksImpl) FailExecution(err error) { + FailExecution(context.host, err) +} + // FailExecution fails the execution with the provided error func FailExecution(host vmhost.VMHost, err error) { if err == nil { @@ -113,3 +113,23 @@ func FailExecution(host vmhost.VMHost, err error) { _ = metering.UseGasBounded(metering.GasLeft()) runtime.FailExecution(err) } + +// FailExecutionConditionally fails the execution with the provided error if the unsafe mode is not active +func (context *VMHooksImpl) FailExecutionConditionally(err error) { + FailExecutionConditionally(context.host, err) +} + +// FailExecutionConditionally fails the execution with the provided error if the unsafe mode is not active +func FailExecutionConditionally(host vmhost.VMHost, err error) { + if err == nil { + return + } + + runtime := host.Runtime() + if !runtime.IsUnsafeMode() || !host.EnableEpochsHandler().IsFlagEnabled(vmhost.FailConditionallyFlag) { + FailExecution(host, err) + return + } + + runtime.AddError(err, "unsafe") +} diff --git a/vmhost/vmhooks/vmHooksImpl_test.go b/vmhost/vmhooks/vmHooksImpl_test.go new file mode 100644 index 000000000..dc33be392 --- /dev/null +++ b/vmhost/vmhooks/vmHooksImpl_test.go @@ -0,0 +1,157 @@ +package vmhooks + +import ( + "errors" + "github.com/multiversx/mx-chain-core-go/core" + mock2 "github.com/multiversx/mx-chain-vm-common-go/mock" + "testing" + + "github.com/multiversx/mx-chain-vm-go/mock/mockery" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestNewVMHooksImpl(t *testing.T) { + t.Parallel() + host := &mockery.MockVMHost{} + hooks := NewVMHooksImpl(host) + require.NotNil(t, hooks) + require.Equal(t, host, hooks.host) +} + +func TestVMHooksImpl_MemLoad(t *testing.T) { + t.Parallel() + vmHooks := createTestVMHooksClear() + instance := vmHooks.instance + runtime := vmHooks.runtime + hooks := vmHooks.hooks + + runtime.On("GetInstance").Return(instance) + instance.On("MemLoad", mock.Anything, mock.Anything).Return([]byte("data"), nil) + + data, err := hooks.MemLoad(0, 0) + require.Nil(t, err) + require.Equal(t, []byte("data"), data) +} + +func TestVMHooksImpl_MemLoadMultiple(t *testing.T) { + t.Parallel() + hooks, _, runtime, _, _, _ := createTestVMHooks() + instance := &mockery.MockInstance{} + runtime.On("GetInstance").Return(instance) + instance.On("MemLoad", mock.Anything, mock.Anything).Return([]byte("data"), nil) + + data, err := hooks.MemLoadMultiple(0, []int32{4, 4}) + require.Nil(t, err) + require.Len(t, data, 2) +} + +func TestVMHooksImpl_MemStore(t *testing.T) { + t.Parallel() + hooks, _, runtime, _, _, _ := createTestVMHooks() + instance := &mockery.MockInstance{} + runtime.On("GetInstance").Return(instance) + instance.On("MemStore", mock.Anything, mock.Anything).Return(nil) + + err := hooks.MemStore(0, []byte("data")) + require.Nil(t, err) +} + +func TestVMHooksImpl_Getters(t *testing.T) { + t.Parallel() + hooks, host, runtime, metering, output, storage := createTestVMHooks() + + require.Equal(t, host, hooks.GetVMHost()) + require.Equal(t, host.Blockchain(), hooks.GetBlockchainContext()) + require.Equal(t, runtime, hooks.GetRuntimeContext()) + require.Equal(t, host.ManagedTypes(), hooks.GetManagedTypesContext()) + require.Equal(t, output, hooks.GetOutputContext()) + require.Equal(t, metering, hooks.GetMeteringContext()) + require.Equal(t, storage, hooks.GetStorageContext()) + require.Equal(t, host.EnableEpochsHandler(), hooks.GetEnableEpochsHandler()) +} + +func TestVMHooksImpl_FailExecution(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("GasLeft").Return(uint64(1000)) + metering.On("UseGasBounded", mock.Anything).Return(nil) + runtime.On("FailExecution", mock.Anything).Return() + + hooks.FailExecution(errors.New("test error")) + runtime.AssertCalled(t, "FailExecution", mock.Anything) +} + +func TestFailExecution(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("GasLeft").Return(uint64(1000)) + metering.On("UseGasBounded", mock.Anything).Return(nil) + runtime.On("FailExecution", mock.Anything).Return() + + FailExecution(hooks.GetVMHost(), errors.New("test error")) + runtime.AssertCalled(t, "FailExecution", mock.Anything) +} + +func TestVMHooksImpl_FailExecutionConditionally_SafeMode(t *testing.T) { + t.Parallel() + hooks, _, runtime, metering, _, _ := createTestVMHooks() + metering.On("GasLeft").Return(uint64(1000)) + metering.On("UseGasBounded", mock.Anything).Return(nil) + runtime.On("FailExecution", mock.Anything).Return() + + hooks.FailExecutionConditionally(errors.New("test error")) + runtime.AssertCalled(t, "FailExecution", mock.Anything) +} + +func TestVMHooksImpl_FailExecutionConditionally_NotActive(t *testing.T) { + t.Parallel() + vmHooksMockery := &mockeryStruct{} + + vmHooksMockery.host = &mockery.MockVMHost{} + vmHooksMockery.runtime = &mockery.MockRuntimeContext{} + vmHooksMockery.metering = &mockery.MockMeteringContext{} + + vmHooksMockery.host.On("Metering").Return(vmHooksMockery.metering) + vmHooksMockery.host.On("Runtime").Return(vmHooksMockery.runtime) + vmHooksMockery.runtime.On("FailExecution", mock.Anything).Return() + vmHooksMockery.host.On("EnableEpochsHandler").Return(&mock2.EnableEpochsHandlerStub{ + IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool { + return false + }, + }) + vmHooksMockery.metering.On("GasLeft").Return(uint64(1000)) + vmHooksMockery.metering.On("UseGasBounded", mock.Anything).Return(nil) + vmHooksMockery.hooks = NewVMHooksImpl(vmHooksMockery.host) + + vmHooksMockery.runtime.On("IsUnsafeMode").Return(true) + vmHooksMockery.hooks.FailExecutionConditionally(errors.New("test error")) + vmHooksMockery.runtime.AssertCalled(t, "FailExecution", mock.Anything) +} + +func TestVMHooksImpl_FailExecutionConditionally_UnSafeMode(t *testing.T) { + t.Parallel() + + vmHooksMockery := &mockeryStruct{} + vmHooksMockery.host = &mockery.MockVMHost{} + vmHooksMockery.runtime = &mockery.MockRuntimeContext{} + vmHooksMockery.metering = &mockery.MockMeteringContext{} + + vmHooksMockery.host.On("Metering").Return(vmHooksMockery.metering) + vmHooksMockery.host.On("Runtime").Return(vmHooksMockery.runtime) + vmHooksMockery.runtime.On("FailExecution", mock.Anything).Return() + vmHooksMockery.host.On("EnableEpochsHandler").Return(&mock2.EnableEpochsHandlerStub{ + IsFlagEnabledCalled: func(flag core.EnableEpochFlag) bool { + return true + }, + }) + vmHooksMockery.metering.On("GasLeft").Return(uint64(1000)) + vmHooksMockery.metering.On("UseGasBounded", mock.Anything).Return(nil) + vmHooksMockery.hooks = NewVMHooksImpl(vmHooksMockery.host) + + vmHooksMockery.runtime.On("IsUnsafeMode").Return(true) + vmHooksMockery.runtime.On("AddError", mock.Anything, mock.Anything) + vmHooksMockery.hooks.FailExecutionConditionally(errors.New("test error")) + vmHooksMockery.runtime.AssertNotCalled(t, "FailExecution", mock.Anything) + vmHooksMockery.runtime.AssertCalled(t, "AddError", mock.Anything, mock.Anything) +} diff --git a/wasmer2/libvmexeccapi.dylib b/wasmer2/libvmexeccapi.dylib index 26f7bfb81..1bc201858 100755 Binary files a/wasmer2/libvmexeccapi.dylib and b/wasmer2/libvmexeccapi.dylib differ diff --git a/wasmer2/libvmexeccapi.h b/wasmer2/libvmexeccapi.h index 14ab42707..bd83b544f 100644 --- a/wasmer2/libvmexeccapi.h +++ b/wasmer2/libvmexeccapi.h @@ -315,6 +315,11 @@ typedef struct { int32_t (*managed_verify_secp256r1_func_ptr)(void *context, int32_t key_handle, int32_t message_handle, int32_t sig_handle); int32_t (*managed_verify_blssignature_share_func_ptr)(void *context, int32_t key_handle, int32_t message_handle, int32_t sig_handle); int32_t (*managed_verify_blsaggregated_signature_func_ptr)(void *context, int32_t key_handle, int32_t message_handle, int32_t sig_handle); + void (*activate_unsafe_mode_func_ptr)(void *context); + void (*deactivate_unsafe_mode_func_ptr)(void *context); + int32_t (*managed_get_num_errors_func_ptr)(void *context); + void (*managed_get_error_with_index_func_ptr)(void *context, int32_t index, int32_t error_handle); + void (*managed_get_last_error_func_ptr)(void *context, int32_t error_handle); } vm_exec_vm_hook_c_func_pointers; typedef struct { diff --git a/wasmer2/libvmexeccapi.so b/wasmer2/libvmexeccapi.so index c024872c1..bfb92d5df 100755 Binary files a/wasmer2/libvmexeccapi.so and b/wasmer2/libvmexeccapi.so differ diff --git a/wasmer2/libvmexeccapi_arm.dylib b/wasmer2/libvmexeccapi_arm.dylib index 6cf080c64..09a7afaae 100755 Binary files a/wasmer2/libvmexeccapi_arm.dylib and b/wasmer2/libvmexeccapi_arm.dylib differ diff --git a/wasmer2/libvmexeccapi_arm.so b/wasmer2/libvmexeccapi_arm.so index 1a31d9385..8f3202859 100644 Binary files a/wasmer2/libvmexeccapi_arm.so and b/wasmer2/libvmexeccapi_arm.so differ diff --git a/wasmer2/wasmer2ImportsCgo.go b/wasmer2/wasmer2ImportsCgo.go index 2e7a83134..a755ccc2f 100644 --- a/wasmer2/wasmer2ImportsCgo.go +++ b/wasmer2/wasmer2ImportsCgo.go @@ -288,6 +288,11 @@ package wasmer2 // extern int32_t w2_managedVerifySecp256r1(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); // extern int32_t w2_managedVerifyBLSSignatureShare(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); // extern int32_t w2_managedVerifyBLSAggregatedSignature(void* context, int32_t keyHandle, int32_t messageHandle, int32_t sigHandle); +// extern void w2_activateUnsafeMode(void* context); +// extern void w2_deactivateUnsafeMode(void* context); +// extern int32_t w2_managedGetNumErrors(void* context); +// extern void w2_managedGetErrorWithIndex(void* context, int32_t index, int32_t errorHandle); +// extern void w2_managedGetLastError(void* context, int32_t errorHandle); import "C" import ( @@ -576,6 +581,11 @@ func populateCgoFunctionPointers() *cWasmerVmHookPointers { managed_verify_secp256r1_func_ptr: funcPointer(C.w2_managedVerifySecp256r1), managed_verify_blssignature_share_func_ptr: funcPointer(C.w2_managedVerifyBLSSignatureShare), managed_verify_blsaggregated_signature_func_ptr: funcPointer(C.w2_managedVerifyBLSAggregatedSignature), + activate_unsafe_mode_func_ptr: funcPointer(C.w2_activateUnsafeMode), + deactivate_unsafe_mode_func_ptr: funcPointer(C.w2_deactivateUnsafeMode), + managed_get_num_errors_func_ptr: funcPointer(C.w2_managedGetNumErrors), + managed_get_error_with_index_func_ptr: funcPointer(C.w2_managedGetErrorWithIndex), + managed_get_last_error_func_ptr: funcPointer(C.w2_managedGetLastError), } } @@ -2240,3 +2250,33 @@ func w2_managedVerifyBLSAggregatedSignature(context unsafe.Pointer, keyHandle in vmHooks := getVMHooksFromContextRawPtr(context) return vmHooks.ManagedVerifyBLSAggregatedSignature(keyHandle, messageHandle, sigHandle) } + +//export w2_activateUnsafeMode +func w2_activateUnsafeMode(context unsafe.Pointer) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.ActivateUnsafeMode() +} + +//export w2_deactivateUnsafeMode +func w2_deactivateUnsafeMode(context unsafe.Pointer) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.DeactivateUnsafeMode() +} + +//export w2_managedGetNumErrors +func w2_managedGetNumErrors(context unsafe.Pointer) int32 { + vmHooks := getVMHooksFromContextRawPtr(context) + return vmHooks.ManagedGetNumErrors() +} + +//export w2_managedGetErrorWithIndex +func w2_managedGetErrorWithIndex(context unsafe.Pointer, index int32, errorHandle int32) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.ManagedGetErrorWithIndex(index, errorHandle) +} + +//export w2_managedGetLastError +func w2_managedGetLastError(context unsafe.Pointer, errorHandle int32) { + vmHooks := getVMHooksFromContextRawPtr(context) + vmHooks.ManagedGetLastError(errorHandle) +} diff --git a/wasmer2/wasmer2Names.go b/wasmer2/wasmer2Names.go index bba5cf140..5e654624a 100644 --- a/wasmer2/wasmer2Names.go +++ b/wasmer2/wasmer2Names.go @@ -286,4 +286,9 @@ var functionNames = map[string]struct{}{ "managedVerifySecp256r1": empty, "managedVerifyBLSSignatureShare": empty, "managedVerifyBLSAggregatedSignature": empty, + "activateUnsafeMode": empty, + "deactivateUnsafeMode": empty, + "managedGetNumErrors": empty, + "managedGetErrorWithIndex": empty, + "managedGetLastError": empty, }