@realitio/realitio-contracts
Version:
Collection of smart contracts for the Realitio fact verification platform
1,069 lines • 2.5 MB
JSON
{
"contractName": "Realitio",
"abi": [
{
"constant": false,
"inputs": [],
"name": "withdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "uint256"
}
],
"name": "template_hashes",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "bytes32"
}
],
"name": "question_claims",
"outputs": [
{
"name": "payee",
"type": "address"
},
{
"name": "last_bond",
"type": "uint256"
},
{
"name": "queued_funds",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "arbitrator_question_fees",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "bytes32"
}
],
"name": "commitments",
"outputs": [
{
"name": "reveal_ts",
"type": "uint32"
},
{
"name": "is_revealed",
"type": "bool"
},
{
"name": "revealed_answer",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "bytes32"
}
],
"name": "questions",
"outputs": [
{
"name": "content_hash",
"type": "bytes32"
},
{
"name": "arbitrator",
"type": "address"
},
{
"name": "opening_ts",
"type": "uint32"
},
{
"name": "timeout",
"type": "uint32"
},
{
"name": "finalize_ts",
"type": "uint32"
},
{
"name": "is_pending_arbitration",
"type": "bool"
},
{
"name": "bounty",
"type": "uint256"
},
{
"name": "best_answer",
"type": "bytes32"
},
{
"name": "history_hash",
"type": "bytes32"
},
{
"name": "bond",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "uint256"
}
],
"name": "templates",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "arbitrator",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "LogSetQuestionFee",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "template_id",
"type": "uint256"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "question_text",
"type": "string"
}
],
"name": "LogNewTemplate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "template_id",
"type": "uint256"
},
{
"indexed": false,
"name": "question",
"type": "string"
},
{
"indexed": true,
"name": "content_hash",
"type": "bytes32"
},
{
"indexed": false,
"name": "arbitrator",
"type": "address"
},
{
"indexed": false,
"name": "timeout",
"type": "uint32"
},
{
"indexed": false,
"name": "opening_ts",
"type": "uint32"
},
{
"indexed": false,
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"name": "created",
"type": "uint256"
}
],
"name": "LogNewQuestion",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": false,
"name": "bounty_added",
"type": "uint256"
},
{
"indexed": false,
"name": "bounty",
"type": "uint256"
},
{
"indexed": true,
"name": "user",
"type": "address"
}
],
"name": "LogFundAnswerBounty",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "answer",
"type": "bytes32"
},
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": false,
"name": "history_hash",
"type": "bytes32"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "bond",
"type": "uint256"
},
{
"indexed": false,
"name": "ts",
"type": "uint256"
},
{
"indexed": false,
"name": "is_commitment",
"type": "bool"
}
],
"name": "LogNewAnswer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": true,
"name": "answer_hash",
"type": "bytes32"
},
{
"indexed": false,
"name": "answer",
"type": "bytes32"
},
{
"indexed": false,
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"name": "bond",
"type": "uint256"
}
],
"name": "LogAnswerReveal",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": true,
"name": "user",
"type": "address"
}
],
"name": "LogNotifyOfArbitrationRequest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": true,
"name": "answer",
"type": "bytes32"
}
],
"name": "LogFinalize",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "question_id",
"type": "bytes32"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "LogClaim",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "LogWithdraw",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"name": "fee",
"type": "uint256"
}
],
"name": "setQuestionFee",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "content",
"type": "string"
}
],
"name": "createTemplate",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "content",
"type": "string"
},
{
"name": "question",
"type": "string"
},
{
"name": "arbitrator",
"type": "address"
},
{
"name": "timeout",
"type": "uint32"
},
{
"name": "opening_ts",
"type": "uint32"
},
{
"name": "nonce",
"type": "uint256"
}
],
"name": "createTemplateAndAskQuestion",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "template_id",
"type": "uint256"
},
{
"name": "question",
"type": "string"
},
{
"name": "arbitrator",
"type": "address"
},
{
"name": "timeout",
"type": "uint32"
},
{
"name": "opening_ts",
"type": "uint32"
},
{
"name": "nonce",
"type": "uint256"
}
],
"name": "askQuestion",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "fundAnswerBounty",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "answer",
"type": "bytes32"
},
{
"name": "max_previous",
"type": "uint256"
}
],
"name": "submitAnswer",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "answer_hash",
"type": "bytes32"
},
{
"name": "max_previous",
"type": "uint256"
},
{
"name": "_answerer",
"type": "address"
}
],
"name": "submitAnswerCommitment",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "answer",
"type": "bytes32"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "bond",
"type": "uint256"
}
],
"name": "submitAnswerReveal",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "requester",
"type": "address"
},
{
"name": "max_previous",
"type": "uint256"
}
],
"name": "notifyOfArbitrationRequest",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "answer",
"type": "bytes32"
},
{
"name": "answerer",
"type": "address"
}
],
"name": "submitAnswerByArbitrator",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "isFinalized",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getFinalAnswer",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "resultFor",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "content_hash",
"type": "bytes32"
},
{
"name": "arbitrator",
"type": "address"
},
{
"name": "min_timeout",
"type": "uint32"
},
{
"name": "min_bond",
"type": "uint256"
}
],
"name": "getFinalAnswerIfMatches",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
},
{
"name": "history_hashes",
"type": "bytes32[]"
},
{
"name": "addrs",
"type": "address[]"
},
{
"name": "bonds",
"type": "uint256[]"
},
{
"name": "answers",
"type": "bytes32[]"
}
],
"name": "claimWinnings",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "question_ids",
"type": "bytes32[]"
},
{
"name": "lengths",
"type": "uint256[]"
},
{
"name": "hist_hashes",
"type": "bytes32[]"
},
{
"name": "addrs",
"type": "address[]"
},
{
"name": "bonds",
"type": "uint256[]"
},
{
"name": "answers",
"type": "bytes32[]"
}
],
"name": "claimMultipleAndWithdrawBalance",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getContentHash",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getArbitrator",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getOpeningTS",
"outputs": [
{
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getTimeout",
"outputs": [
{
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getFinalizeTS",
"outputs": [
{
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "isPendingArbitration",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getBounty",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getBestAnswer",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getHistoryHash",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "question_id",
"type": "bytes32"
}
],
"name": "getBond",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405260006001553480156200001657600080fd5b506200008d606060405190810160405280603f81526020017f7b227469746c65223a20222573222c202274797065223a2022626f6f6c222c2081526020017f2263617465676f7279223a20222573222c20226c616e67223a20222573227d0081525062000308640100000000026401000000009004565b506200012a608060405190810160405280604f81526020017f7b227469746c65223a20222573222c202274797065223a202275696e74222c2081526020017f22646563696d616c73223a2031382c202263617465676f7279223a202225732281526020017f2c20226c616e67223a20222573227d000000000000000000000000000000000081525062000308640100000000026401000000009004565b50620001c7608060405190810160405280605a81526020017f7b227469746c65223a20222573222c202274797065223a202273696e676c652d81526020017f73656c656374222c20226f7574636f6d6573223a205b25735d2c20226361746581526020017f676f7279223a20222573222c20226c616e67223a20222573227d00000000000081525062000308640100000000026401000000009004565b5062000264608060405190810160405280605c81526020017f7b227469746c65223a20222573222c202274797065223a20226d756c7469706c81526020017f652d73656c656374222c20226f7574636f6d6573223a205b25735d2c2022636181526020017f7465676f7279223a20222573222c20226c616e67223a20222573227d0000000081525062000308640100000000026401000000009004565b5062000301608060405190810160405280604381526020017f7b227469746c65223a20222573222c202274797065223a20226461746574696d81526020017f65222c202263617465676f7279223a20222573222c20226c616e67223a20222581526020017f73227d000000000000000000000000000000000000000000000000000000000081525062000308640100000000026401000000009004565b506200051f565b6000806001549050436002600083815260200190815260200160002081905550826040516020018082805190602001908083835b6020831015156200036357805182526020820191506020810190506020830392506200033c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b602083101515620003ce5780518252602082019150602081019050602083039250620003a7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206003600083815260200190815260200160002081600019169055503373ffffffffffffffffffffffffffffffffffffffff16817fb87fb721c0a557bb8dff89a86796466931d82ba530a66a239263eb8735ade2e4856040518080602001828103825283818151815260200191508051906020019080838360005b838110156200049257808201518184015260208101905062000475565b50505050905090810190601f168015620004c05780820380516001836020036101000a031916815260200191505b509250505060405180910390a3620004f1600182620005006401000000000262004ada179091906401000000009004565b60018190555080915050919050565b60008082840190508381101515156200051557fe5b8091505092915050565b615839806200052f6000396000f3006080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631101a0fd146101b157806312a203c3146102ee5780632417395c146103835780632518904c146103c857806326d6c97b1461043957806328828b1e1461047e5780633ccfd60b146106335780634dc266b41461064a5780634df6ca2a1461069d5780634e60f883146106ca57806351577ea914610713578063590158a71461076057806359245ff3146107df5780636fa427421461080357806370a082311461085a578063762c38fd146108b157806377f325df1461097d5780637f8d429e146109b957806382ffa9f714610a02578063839df94514610a4f57806383bf460914610aba5780638d552d4614610b37578063924532fb14610b8457806395addb9014610bcd5780639e63fa6a14610cbd5780639f1025c614610d0e578063a1130d0414610d5f578063a462fb7b14610e67578063acae8f4e14610eb4578063bc52565214610f05578063d09cc57e14610f46578063d7cff98614610f93578063f6a94ecb14610fef578063fe92049d1461104a575b600080fd5b3480156101bd57600080fd5b506102ec6004803603810190808035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506110a9565b005b3480156102fa57600080fd5b5061036560048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291908035906020019092919050505061156e565b60405180826000191660001916815260200191505060405180910390f35b34801561038f57600080fd5b506103b260048036038101908080356000191690602001909291905050506118df565b6040518082815260200191505060405180910390f35b3480156103d457600080fd5b506103f76004803603810190808035600019169060200190929190505050611907565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044557600080fd5b50610468600480360381019080803560001916906020019092919050505061194f565b6040518082815260200191505060405180910390f35b34801561048a57600080fd5b50610631600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611977565b005b34801561063f57600080fd5b50610648611bf5565b005b34801561065657600080fd5b5061069b600480360381019080803560001916906020019092919080356000191690602001909291908035906020019092919080359060200190929190505050611d14565b005b3480156106a957600080fd5b506106c86004803603810190808035906020019092919050505061238d565b005b3480156106d657600080fd5b506106f56004803603810190808035906020019092919050505061243f565b60405180826000191660001916815260200191505060405180910390f35b34801561071f57600080fd5b506107426004803603810190808035600019169060200190929190505050612457565b60405180826000191660001916815260200191505060405180910390f35b34801561076c57600080fd5b5061078f600480360381019080803560001916906020019092919050505061247f565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b61080160048036038101908080356000191690602001909291905050506124c9565b005b34801561080f57600080fd5b50610844600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128c9565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b5061089b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128e1565b6040518082815260200191505060405180910390f35b61095f60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803590602001909291905050506128f9565b60405180826000191660001916815260200191505060405180910390f35b6109b76004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190505050612d2e565b005b3480156109c557600080fd5b506109e86004803603810190808035600019169060200190929190505050613298565b604051808215151515815260200191505060405180910390f35b348015610a0e57600080fd5b50610a316004803603810190808035600019169060200190929190505050613331565b60405180826000191660001916815260200191505060405180910390f35b348015610a5b57600080fd5b50610a7e6004803603810190808035600019169060200190929190505050613359565b604051808463ffffffff1663ffffffff168152602001831515151581526020018260001916600019168152602001935050505060405180910390f35b348015610ac657600080fd5b50610b21600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506133a0565b6040518082815260200191505060405180910390f35b348015610b4357600080fd5b50610b666004803603810190808035600019169060200190929190505050613581565b60405180826000191660001916815260200191505060405180910390f35b348015610b9057600080fd5b50610bb360048036038101908080356000191690602001909291905050506135a9565b604051808215151515815260200191505060405180910390f35b348015610bd957600080fd5b50610bfc60048036038101908080356000191690602001909291905050506135de565b604051808b600019166000191681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018963ffffffff1663ffffffff1681526020018863ffffffff1663ffffffff1681526020018763ffffffff1663ffffffff16815260200186151515158152602001858152602001846000191660001916815260200183600019166000191681526020018281526020019a505050505050505050505060405180910390f35b348015610cc957600080fd5b50610cec600480360381019080803560001916906020019092919050505061368f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610d1a57600080fd5b50610d3d60048036038101908080356000191690602001909291905050506136c7565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610e49600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803590602001909291905050506136ff565b60405180826000191660001916815260200191505060405180910390f35b348015610e7357600080fd5b50610e966004803603810190808035600019169060200190929190505050613728565b60405180826000191660001916815260200191505060405180910390f35b348015610ec057600080fd5b50610ee360048036038101908080356000191690602001909291905050506137cf565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610f1157600080fd5b50610f3060048036038101908080359060200190929190505050613807565b6040518082815260200191505060405180910390f35b348015610f5257600080fd5b50610f75600480360381019080803560001916906020019092919050505061381f565b60405180826000191660001916815260200191505060405180910390f35b610fed6004803603810190808035600019169060200190929190803560001916906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506138c6565b005b348015610ffb57600080fd5b506110486004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613ee9565b005b34801561105657600080fd5b506110a760048036038101908080356000191690602001909291908035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614507565b005b60008060008060008060008b6110be81613298565b1515611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7175657374696f6e206d7573742062652066696e616c697a656400000000000081525060200191505060405180910390fd5b60008c511115156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f6174206c65617374206f6e6520686973746f7279206861736820656e7472792081526020017f6d7573742062652070726f76696465640000000000000000000000000000000081525060400191505060405180910390fd5b600560008e6000191660001916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169750600560008e60001916600019168152602001908152602001600020600101549650600560008e60001916600019168152602001908152602001600020600201549550600460008e60001916600019168152602001908152602001600020600501549450600460008e60001916600019168152602001908152602001600020600401549350600092505b8b518310156113c25761130d858d858151811015156112b657fe5b906020019060200201518b868151811015156112ce57fe5b906020019060200201518d878151811015156112e657fe5b906020019060200201518f888151811015156112fe57fe5b906020019060200201516147e3565b91506113228787614ada90919063ffffffff16565b95506113798d85888b8f8881518110151561133957fe5b906020019060200201518f8981518110151561135157fe5b906020019060200201518f8a81518110151561136957fe5b9060200190602002015189614af8565b8099508197505050898381518110151561138f57fe5b9060200190602002015196508b838151811015156113a957fe5b906020019060200201519450828060010193505061129b565b60006001026000191685600019161415156114c557600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151561141d576114188d8988614d2f565b600095505b87600560008f6000191660001916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600560008f600019166000191681526020019081526020016000206001018190555085600560008f6000191660001916815260200190815260200160002060020181905550611538565b6114e28d896114dd8a8a614ada90919063ffffffff16565b614d2f565b600560008e60001916600019168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055600282016000905550505b84600460008f60001916600019168152602001908152602001600020600501816000191690555050505050505050505050505050565b60008561157a81613298565b15156115ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7175657374696f6e206d7573742062652066696e616c697a656400000000000081525060200191505060405180910390fd5b6004600088600019166000191681526020019081526020016000206000015460001916866000191614151561168b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f636f6e74656e742068617368206d757374206d6174636800000000000000000081525060200191505060405180910390fd5b60046000886000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151561176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f61726269747261746f72206d757374206d61746368000000000000000000000081525060200191505060405180910390fd5b60046000886000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff168463ffffffff161115151561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f74696d656f7574206d757374206265206c6f6e6720656e6f756768000000000081525060200191505060405180910390fd5b6004600088600019166000191681526020019081526020016000206006015483111515156118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f626f6e64206d757374206265206869676820656e6f756768000000000000000081525060200191505060405180910390fd5b6004600088600019166000191681526020019081526020016000206004015491505095945050505050565b6000600460008360001916600019168152602001908152602001600020600301549050919050565b600060046000836000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460008360001916600019168152602001908152602001600020600601549050919050565b60008060008060608060608060008098505b8e51891015611bdc578e898151811015156119a057fe5b9060200190602002015196508d898151811015156119ba57fe5b906020019060200201519550856040519080825280602002602001820160405280156119f55781602001602082028038833980820191505090505b50945085604051908082528060200260200182016040528015611a275781602001602082028038833980820191505090505b50935085604051908082528060200260200182016040528015611a595781602001602082028038833980820191505090505b50925085604051908082528060200260200182016040528015611a8b5781602001602082028038833980820191505090505b509150600090505b85811015611bc2578c88815181101515611aa957fe5b906020019060200201518582815181101515611ac157fe5b9060200190602002019060001916908160001916815250508b88815181101515611ae757fe5b906020019060200201518482815181101515611aff57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508a88815181101515611b4957fe5b906020019060200201518382815181101515611b6157fe5b90602001906020020181815250508988815181101515611b7d57fe5b906020019060200201518282815181101515611b9557fe5b90602001906020020190600019169081600019168152505087806001019850508080600101915050611a93565b611bcf87868686866110a9565b8880600101995050611989565b611be4611bf5565b505050505050505050505050505050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cc2573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f4ce7033d118120e254016dccf195288400b28fc8936425acd5f17ce2df3ab708826040518082815260200191505060405180910390a250565b60008085600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16111515611dc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff161480611e1e57504263ffffffff168263ffffffff16115b1515611eb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f66696e616c697a6174696f6e206465616c696e65206d757374206e6f7420686181526020017f766520706173736564000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff161480611f0a57504263ffffffff168163ffffffff1611155b1515611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b8787604051602001808360001916600019168152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611fe35780518252602082019150602081019050602083039250611fbe565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209450888587604051602001808460001916600019168152602001836000191660001916815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156120875780518252602082019150602081019050602083039250612062565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020935060066000856000191660001916815260200190815260200160002060000160049054906101000a900460ff1615151561217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f636f6d6d69746d656e74206d757374206e6f742068617665206265656e20726581526020017f7665616c6564207965740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b4263ffffffff1660066000866000191660001916815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111515612254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f72657665616c20646561646c696e65206d757374206e6f74206861766520706181526020017f737365640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b876006600086600019166000191681526020019081526020016000206001018160001916905550600160066000866000191660001916815260200190815260200160002060000160046101000a81548160ff021916908315150217905550600460008a6000191660001916815260200190815260200160002060060154861415612312576123118989600460008d6000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff16614e1a565b5b84600019163373ffffffffffffffffffffffffffffffffffffffff168a600019167fa7b2d313bc7a062e30b2c3b811aa4c9faf09755a6b4ea3bf42deff920944332f8b8b8b604051808460001916600019168152602001838152602001828152602001935050505060405180910390a4505050505050505050565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdca703d022171824d3d639b33c1525fd2338120b4cfb89507c0b59596893acda3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60036020528060005260406000206000915090505481565b6000600460008360001916600019168152602001908152602001600020600001549050919050565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b80600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16111515612579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060020160009054906101000a900460ff16151515612640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f7175657374696f6e206d757374206e6f742062652070656e64696e672061726281526020017f6974726174696f6e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff16148061269757504263ffffffff168263ffffffff16115b1515612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f66696e616c697a6174696f6e20646561646c696e65206d757374206e6f74206881526020017f617665207061737365640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff16148061278357504263ffffffff168163ffffffff1611155b15156127f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b6128283460046000876000191660001916815260200190815260200160002060030154614ada90919063ffffffff16565b600460008660001916600019168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff1684600019167f54d68405b79f2aa4fd4e8db7b67844ad254cf8f208aac476c2894134a9deab663460046000896000191660001916815260200190815260200160002060030154604051808381526020018281526020019250505060405180910390a350505050565b60076020528060005260406000206000915090505481565b60006020528060005260406000206000915090505481565b600080600080600260008b815260200190815260200160002054111515612988576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f74656d706c617465206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b888589604051602001808481526020018363ffffffff1663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040182805190602001908083835b6020831015156129fa57805182526020820191506020810190506020830392506129d5565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612a655780518252602082019150602081019050602083039250612a40565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915081878733876040516020018086600019166000191681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001955050505050506040516020818303038152906040526040518082805190602001908083835b602083101515612bb25780518252602082019150602081019050602083039250612b8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050612bee8183898989614e9b565b81600019163373ffffffffffffffffffffffffffffffffffffffff1682600019167ffe2dac156a3890636ce13f65f4fdf41dcaee11526e4a5374531572d92194796c8c8c8c8c8c8c4260405180888152602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b83811015612cdf578082015181840152602081019050612cc4565b50505050905090810190601f168015612d0c5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a480925050509695505050505050565b82600080600060046000856000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff1663ffffffff16111515612dde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7175657374696f6e206d7573742065786973740000000000000000000000000081525060200191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060020160009054906101000a900460ff16151515612ea5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f7175657374696f6e206d757374206e6f742062652070656e64696e672061726281526020017f6974726174696f6e00000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff169150600063ffffffff168263ffffffff161480612efc57504263ffffffff168263ffffffff16115b1515612f96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f66696e616c697a6174696f6e20646561646c696e65206d757374206e6f74206881526020017f617665207061737365640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60046000846000191660001916815260200190815260200160002060010160149054906101000a900463ffffffff16905060008163ffffffff161480612fe857504263ffffffff168163ffffffff1611155b151561305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f70656e696e672064617465206d75737420686176652070617373656400000081525060200191505060405180910390fd5b856000341115156130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f626f6e64206d75737420626520706f736974697665000000000000000000000081525060200191505060405180910390fd5b61310760026004600084600019166000191681526020019081526020016000206006015461540190919063ffffffff16565b34101515156131a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f626f6e64206d75737420626520646f75626c65206174206c656173742070726581526020017f76696f757320626f6e640000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8685600081111561324657806004600084600019166000191681526020019081526020016000206006015411151515613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f626f6e64206d75737420657863656564206d61785f70726576696f757300000081525060200191505060405180910390fd5b5b61325489893334600061543c565b61328d8989600460008d6000191660001916815260200190815260200160002060010160189054906101000a900463ffffffff16614e1a565b505050505050505050565b600080600460008460001916600019168152602001908152602001600020600101601c9054906101000a900463ffffffff16905060046000846000191660001916815260200190815260200160002060020160009054906101000a900460ff161580156133115750600063ffffffff168163ffffffff16115b801561332957504263ffffffff168163ffffffff1611155b915050919050565b6000600460008360001916600019168152602001908152602001600020600501549050919050565b60066020528060005260406000206000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900460ff16908060010154905083565b60008060015490504360026000