VeChain
Explorer
Testnet
Search
Networks
Main
Test
Contract
0x3Ec63C…d72c
Summary
Transactions
Transfers
Address
0x3Ec63C7c91EdfF056559BF4a60bE45cf8883d72c
VET
0.00
VET
VTHO
0.00
VTHO
Master
0x43A633bFFF0316aF414607FecAe45A606192840c
Deployer
0x43A633bFFF0316aF414607FecAe45A606192840c
Code
0x60806040526004361061021a5760003560e01c8063758b1ce311610123578063b88d4fde116100ab578063e1bfb5291161006f578063e1bfb529146107b4578063e985e9c5146107df578063eb91d37e1461081c578063f2fde38b14610847578063f851a440146108705761021a565b8063b88d4fde146106d1578063bf234202146106fa578063c87b56dd14610723578063d0c433d314610760578063d936547e146107775761021a565b80639cf9fd73116100f25780639cf9fd731461061f578063a0712d681461064a578063a22cb46514610666578063a2309ff81461068f578063b66a0e5d146106ba5761021a565b8063758b1ce3146105755780637d4cb9641461059e5780638da5cb5b146105c957806395d89b41146105f45761021a565b806348b15166116101a65780635c474f9e116101755780635c474f9e1461048e5780635c975abb146104b95780636352211e146104e457806370a0823114610521578063715018a61461055e5761021a565b806348b15166146103d257806348cd4cb1146103fd5780634f6ccce71461042857806355f804b3146104655761021a565b806318160ddd116101ed57806318160ddd146102ed57806319cc02aa1461031857806323b872dd146103435780632f745c591461036c57806342842e0e146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612f73565b61089b565b6040516102539190612fbb565b60405180910390f35b34801561026857600080fd5b50610271610915565b60405161027e919061306f565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906130c7565b6109a7565b6040516102bb9190613135565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061317c565b610a2c565b005b3480156102f957600080fd5b50610302610b44565b60405161030f91906131cb565b60405180910390f35b34801561032457600080fd5b5061032d610b51565b60405161033a9190612fbb565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906131e6565b610b64565b005b34801561037857600080fd5b50610393600480360381019061038e919061317c565b610bc4565b6040516103a091906131cb565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906131e6565b610c69565b005b3480156103de57600080fd5b506103e7610c89565b6040516103f491906131cb565b60405180910390f35b34801561040957600080fd5b50610412610c8f565b60405161041f91906131cb565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906130c7565b610c95565b60405161045c91906131cb565b60405180910390f35b34801561047157600080fd5b5061048c6004803603810190610487919061336e565b610d06565b005b34801561049a57600080fd5b506104a3610d9c565b6040516104b09190612fbb565b60405180910390f35b3480156104c557600080fd5b506104ce610daf565b6040516104db9190612fbb565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906130c7565b610dc6565b6040516105189190613135565b60405180910390f35b34801561052d57600080fd5b50610548600480360381019061054391906133b7565b610e78565b60405161055591906131cb565b60405180910390f35b34801561056a57600080fd5b50610573610f30565b005b34801561058157600080fd5b5061059c600480360381019061059791906130c7565b610fb8565b005b3480156105aa57600080fd5b506105b361103e565b6040516105c091906131cb565b60405180910390f35b3480156105d557600080fd5b506105de611044565b6040516105eb9190613135565b60405180910390f35b34801561060057600080fd5b5061060961106e565b604051610616919061306f565b60405180910390f35b34801561062b57600080fd5b50610634611100565b60405161064191906131cb565b60405180910390f35b610664600480360381019061065f91906130c7565b611106565b005b34801561067257600080fd5b5061068d60048036038101906106889190613410565b6115d9565b005b34801561069b57600080fd5b506106a46115ef565b6040516106b191906131cb565b60405180910390f35b3480156106c657600080fd5b506106cf6115f5565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906134f1565b611695565b005b34801561070657600080fd5b50610721600480360381019061071c91906135d4565b6116f7565b005b34801561072f57600080fd5b5061074a600480360381019061074591906130c7565b61188f565b604051610757919061306f565b60405180910390f35b34801561076c57600080fd5b50610775611936565b005b34801561078357600080fd5b5061079e600480360381019061079991906133b7565b611a18565b6040516107ab9190612fbb565b60405180910390f35b3480156107c057600080fd5b506107c9611a38565b6040516107d691906131cb565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190613621565b611a3e565b6040516108139190612fbb565b60405180910390f35b34801561082857600080fd5b50610831611ad2565b60405161083e91906131cb565b60405180910390f35b34801561085357600080fd5b5061086e600480360381019061086991906133b7565b611b01565b005b34801561087c57600080fd5b50610885611bf9565b6040516108929190613135565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090e575061090d82611c1f565b5b9050919050565b60606000805461092490613690565b80601f016020809104026020016040519081016040528092919081815260200182805461095090613690565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b5050505050905090565b60006109b282611d01565b6109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890613734565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3782610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906137c6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac7611d6d565b73ffffffffffffffffffffffffffffffffffffffff161480610af65750610af581610af0611d6d565b611a3e565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613858565b60405180910390fd5b610b3f8383611d75565b505050565b6000600880549050905090565b601e60019054906101000a900460ff1681565b610b75610b6f611d6d565b82611e2e565b610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906138ea565b60405180910390fd5b610bbf838383611f0c565b505050565b6000610bcf83610e78565b8210610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c079061397c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c8483838360405180602001604052806000815250611695565b505050565b601c5481565b601d5481565b6000610c9f610b44565b8210610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613a0e565b60405180910390fd5b60088281548110610cf457610cf3613a2e565b5b90600052602060002001549050919050565b610d0e611d6d565b73ffffffffffffffffffffffffffffffffffffffff16610d2c611044565b73ffffffffffffffffffffffffffffffffffffffff1614610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990613aa9565b60405180910390fd5b80600b9080519060200190610d98929190612e64565b5050565b601e60009054906101000a900460ff1681565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690613b3b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090613bcd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f38611d6d565b73ffffffffffffffffffffffffffffffffffffffff16610f56611044565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390613aa9565b60405180910390fd5b610fb66000612168565b565b610fc0611d6d565b73ffffffffffffffffffffffffffffffffffffffff16610fde611044565b73ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613aa9565b60405180910390fd5b80601c8190555050565b61271081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461107d90613690565b80601f01602080910402602001604051908101604052809291908181526020018280546110a990613690565b80156110f65780601f106110cb576101008083540402835291602001916110f6565b820191906000526020600020905b8154815290600101906020018083116110d957829003601f168201915b5050505050905090565b601b5481565b60011515601e60009054906101000a900460ff1615151461115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613c39565b60405180910390fd5b612710601a548261116d9190613c88565b11156111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590613d2a565b60405180910390fd5b62015180601c54601d54436111c39190613d4a565b6111cd9190613d7e565b10156113395761025881601a546111e49190613c88565b1115611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613e24565b60405180910390fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a890613eb6565b60405180910390fd5b60176000600281106112c6576112c5613a2e565b5b602091828204019190069054906101000a900460ff1660ff16816112e933610e78565b6112f39190613c88565b1115611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90613f22565b60405180910390fd5b6113aa565b601760016002811061134e5761134d613a2e565b5b602091828204019190069054906101000a900460ff1660ff168111156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090613f22565b60405180910390fd5b5b60006103e8601a546113bc9190613f71565b6103e86113c99190613d4a565b905060008183111561149a5781836113e19190613d4a565b600d6001601860009054906101000a900460ff166113ff9190613faf565b60ff16600a811061141357611412613a2e565b5b015461141f9190613d7e565b82600d601860009054906101000a900460ff1660ff16600a811061144657611445613a2e565b5b01546114529190613d7e565b61145c9190613c88565b90506001601860008282829054906101000a900460ff1661147d9190613faf565b92506101000a81548160ff021916908360ff1602179055506114d0565b82600d601860009054906101000a900460ff1660ff16600a81106114c1576114c0613a2e565b5b01546114cd9190613d7e565b90505b80341015611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a90614032565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561157b573d6000803e3d6000fd5b506000600190505b838160ff16116115ba576115a7338260ff16601a546115a29190613c88565b61222e565b80806115b290614052565b915050611583565b5082601a60008282546115cd9190613c88565b92505081905550505050565b6115eb6115e4611d6d565b838361224c565b5050565b601a5481565b6115fd611d6d565b73ffffffffffffffffffffffffffffffffffffffff1661161b611044565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613aa9565b60405180910390fd5b6001601e60006101000a81548160ff02191690831515021790555043601d81905550565b6116a66116a0611d6d565b83611e2e565b6116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906138ea565b60405180910390fd5b6116f1848484846123b9565b50505050565b6116ff611d6d565b73ffffffffffffffffffffffffffffffffffffffff1661171d611044565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613aa9565b60405180910390fd5b6101f482829050601b546117879190613c88565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906140c8565b60405180910390fd5b60005b828290508160ff16101561186e5760016019600085858560ff168181106117f5576117f4613a2e565b5b905060200201602081019061180a91906133b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061186690614052565b9150506117cb565b5081819050601b60008282546118849190613c88565b925050819055505050565b606061189a82611d01565b6118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d09061415a565b60405180910390fd5b60006118e3612415565b90506000815111611903576040518060200160405280600081525061192e565b8061190d846124a7565b60405160200161191e9291906141b6565b6040516020818303038152906040525b915050919050565b60001515601e60019054906101000a900460ff1615151461198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390614226565b60405180910390fd5b6000600190505b60648160ff16116119e0576119cd600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260ff1661222e565b80806119d890614052565b915050611993565b506064601a60008282546119f49190613c88565b925050819055506001601e60016101000a81548160ff021916908315150217905550565b60196020528060005260406000206000915054906101000a900460ff1681565b61025881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600d601860009054906101000a900460ff1660ff16600a8110611afa57611af9613a2e565b5b0154905090565b611b09611d6d565b73ffffffffffffffffffffffffffffffffffffffff16611b27611044565b73ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490613aa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be4906142b8565b60405180910390fd5b611bf681612168565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cfa5750611cf982612608565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de883610dc6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3982611d01565b611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f9061434a565b60405180910390fd5b6000611e8383610dc6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ef257508373ffffffffffffffffffffffffffffffffffffffff16611eda846109a7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f035750611f028185611a3e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2c82610dc6565b73ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f79906143dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe99061446e565b60405180910390fd5b611ffd838383612672565b612008600082611d75565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120589190613d4a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120af9190613c88565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612248828260405180602001604052806000815250612786565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b2906144da565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ac9190612fbb565b60405180910390a3505050565b6123c4848484611f0c565b6123d0848484846127e1565b61240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061456c565b60405180910390fd5b50505050565b6060600b805461242490613690565b80601f016020809104026020016040519081016040528092919081815260200182805461245090613690565b801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b5050505050905090565b606060008214156124ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612603565b600082905060005b6000821461252157808061250a9061458c565b915050600a8261251a91906145d5565b91506124f7565b60008167ffffffffffffffff81111561253d5761253c613243565b5b6040519080825280601f01601f19166020018201604052801561256f5781602001600182028036833780820191505090505b5090505b600085146125fc576001826125889190613d4a565b9150600a856125979190613f71565b60306125a39190613c88565b60f81b8183815181106125b9576125b8613a2e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f591906145d5565b9450612573565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267d838383612978565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c0576126bb8161297d565b6126ff565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fe576126fd83826129c6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127425761273d81612b33565b612781565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127805761277f8282612c04565b5b5b505050565b6127908383612c83565b61279d60008484846127e1565b6127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d39061456c565b60405180910390fd5b505050565b60006128028473ffffffffffffffffffffffffffffffffffffffff16612e51565b1561296b578373ffffffffffffffffffffffffffffffffffffffff16631500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000