{ "_format": "hh-sol-artifact-1", "contractName": "PoraMine", "sourceName": "contracts/miner/Mine.sol", "abi": [ { "inputs": [ { "internalType": "uint256", "name": "settings", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" } ], "name": "NewMinerId", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "epoch", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "epochIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "recallPosition", "type": "uint256" } ], "name": "NewSubmission", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "UpdateMinerId", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PARAMS_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "contextDigest", "type": "bytes32" }, { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, { "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "components": [ { "internalType": "uint256", "name": "startPosition", "type": "uint256" }, { "internalType": "uint256", "name": "mineLength", "type": "uint256" }, { "internalType": "uint64", "name": "shardId", "type": "uint64" }, { "internalType": "uint64", "name": "shardMask", "type": "uint64" } ], "internalType": "struct RecallRange", "name": "range", "type": "tuple" }, { "internalType": "uint256", "name": "recallPosition", "type": "uint256" }, { "internalType": "uint256", "name": "sealOffset", "type": "uint256" }, { "internalType": "bytes32", "name": "sealedContextDigest", "type": "bytes32" }, { "internalType": "bytes32[128]", "name": "sealedData", "type": "bytes32[128]" }, { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" } ], "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "epoch", "type": "uint256" }, { "internalType": "uint256", "name": "mineStart", "type": "uint256" }, { "internalType": "bytes32", "name": "flowRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "flowLength", "type": "uint256" }, { "internalType": "bytes32", "name": "blockDigest", "type": "bytes32" }, { "internalType": "bytes32", "name": "digest", "type": "bytes32" } ], "internalType": "struct MineContext", "name": "context", "type": "tuple" } ], "name": "basicCheck", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "beneficiaries", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "canSubmit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentSubmissions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataProofEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "difficultyAdjustRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fixedDifficulty", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "flow", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "difficulty", "type": "uint256" }, { "internalType": "address", "name": "flow_", "type": "address" }, { "internalType": "address", "name": "reward_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastMinedEpoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxShards", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "contextDigest", "type": "bytes32" }, { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, { "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "components": [ { "internalType": "uint256", "name": "startPosition", "type": "uint256" }, { "internalType": "uint256", "name": "mineLength", "type": "uint256" }, { "internalType": "uint64", "name": "shardId", "type": "uint64" }, { "internalType": "uint64", "name": "shardMask", "type": "uint64" } ], "internalType": "struct RecallRange", "name": "range", "type": "tuple" }, { "internalType": "uint256", "name": "recallPosition", "type": "uint256" }, { "internalType": "uint256", "name": "sealOffset", "type": "uint256" }, { "internalType": "bytes32", "name": "sealedContextDigest", "type": "bytes32" }, { "internalType": "bytes32[128]", "name": "sealedData", "type": "bytes32[128]" }, { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" } ], "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" } ], "name": "pora", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poraTarget", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "beneficiary", "type": "address" }, { "internalType": "uint64", "name": "seed", "type": "uint64" } ], "name": "requestMinerId", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reward", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sealDataEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "difficultyAdjustRatio_", "type": "uint256" } ], "name": "setDifficultyAdjustRatio", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "maxShards_", "type": "uint64" } ], "name": "setMaxShards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "targetMineBlocks_", "type": "uint256" } ], "name": "setTargetMineBlocks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "targetSubmissions_", "type": "uint256" } ], "name": "setTargetSubmissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "contextDigest", "type": "bytes32" }, { "internalType": "bytes32", "name": "nonce", "type": "bytes32" }, { "internalType": "bytes32", "name": "minerId", "type": "bytes32" }, { "components": [ { "internalType": "uint256", "name": "startPosition", "type": "uint256" }, { "internalType": "uint256", "name": "mineLength", "type": "uint256" }, { "internalType": "uint64", "name": "shardId", "type": "uint64" }, { "internalType": "uint64", "name": "shardMask", "type": "uint64" } ], "internalType": "struct RecallRange", "name": "range", "type": "tuple" }, { "internalType": "uint256", "name": "recallPosition", "type": "uint256" }, { "internalType": "uint256", "name": "sealOffset", "type": "uint256" }, { "internalType": "bytes32", "name": "sealedContextDigest", "type": "bytes32" }, { "internalType": "bytes32[128]", "name": "sealedData", "type": "bytes32[128]" }, { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" } ], "internalType": "struct MineLib.PoraAnswer", "name": "answer", "type": "tuple" } ], "name": "submit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetMineBlocks", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetSubmissions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "targetSubmissionsNextEpoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32", "name": "minerId", "type": "bytes32" } ], "name": "transferBeneficial", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60e06040523480156200001157600080fd5b506040516200364e3803806200364e833981016040819052620000349162000052565b6001811615608052600281161560a052600416151560c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613596620000b8600039600081816103d40152818161110e01526114aa0152600081816104040152610e400152600081816104620152610e0301526135966000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80637bba7d6111610125578063aed75224116100ad578063b776a5121161007c578063b776a512146104e5578063ca15c873146104ee578063d547741f14610501578063dddc61a814610514578063ffbc9bd01461051d57600080fd5b8063aed7522414610497578063b0628ee0146104aa578063b15d20da146104bd578063b4988fd0146104d257600080fd5b806391d14854116100f457806391d1485414610439578063a217fddf1461044c578063a827918214610454578063adaa7a0f1461045d578063ae722e821461048457600080fd5b80637bba7d61146103cf5780637eca5688146103f657806382975fe7146103ff5780639010d07c1461042657600080fd5b806331223ba7116101a857806339cd53ee1161017757806339cd53ee146103645780633baebb751461038d57806348f61441146103a05780635bdca855146103a9578063704d3c96146103bc57600080fd5b806331223ba71461032c578063331f3b9c14610335578063343aad821461033e57806336568abe1461035157600080fd5b806316a4be6f116101ef57806316a4be6f1461027e578063228cb733146102a9578063248a9ca3146102d45780632a02573b146103065780632f2ff15d1461031957600080fd5b806301ffc9a714610221578063047c13f514610249578063158ef93e1461025e5780631600c6241461026b575b600080fd5b61023461022f366004612d83565b610525565b60405190151581526020015b60405180910390f35b61025c610257366004612ddb565b610550565b005b6000546102349060ff1681565b61025c610279366004612e0e565b61066c565b600a54610291906001600160401b031681565b6040516001600160401b039091168152602001610240565b6004546102bc906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102f86102e2366004612e0e565b6000908152600160208190526040909120015490565b604051908152602001610240565b61025c610314366004612e27565b61068a565b61025c610327366004612e42565b610790565b6102f8600b5481565b6102f860065481565b6003546102bc906001600160a01b031681565b61025c61035f366004612e42565b6107bb565b6102bc610372366004612e0e565b600e602052600090815260409020546001600160a01b031681565b61025c61039b3660046130e2565b610839565b6102f8600d5481565b61025c6103b7366004612e0e565b610ad0565b61025c6103ca366004612e0e565b610afd565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102f860085481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102bc61043436600461317a565b610b6b565b610234610447366004612e42565b610b8a565b6102f8600081565b6102f8600c5481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b61025c61049236600461319c565b610bb5565b6102f86104a536600461319c565b611142565b61025c6104b83660046131d8565b611345565b6102f860008051602061354183398151915281565b61025c6104e0366004613202565b611405565b6102f860075481565b6102f86104fc366004612e0e565b61152c565b61025c61050f366004612e42565b611543565b6102f860095481565b610234611569565b60006001600160e01b03198216635a05180f60e01b148061054a575061054a82611604565b92915050565b600061055d600143613254565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106125760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061354183398151915261068481611639565b50600655565b6000805160206135418339815191526106a281611639565b6000826001600160401b0316116106fb5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610609565b610706600183613267565b82166001600160401b031660001461076c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610609565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107ac81611639565b6107b68383611646565b505050565b6001600160a01b038116331461082b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610609565b6108358282611668565b5050565b815160a08201511461088d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610609565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109005760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610609565b600754600c54106109535760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610609565b600061010061096461040082613287565b61096e91906132bc565b61010061097d61040082613287565b61098791906132bc565b836060015161099691906132bc565b6109a09190613287565b60608401519091506109b2908261168a565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906132e7565b90506000610100610a396104006004613287565b610a4391906132bc565b8560800151610a529190613341565b90508082600001516001600160801b0316108015610a7d57508082602001516001600160801b031610155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610609565b5050505050565b600080516020613541833981519152610ae881611639565b6008829055600b546000036108355750600755565b600080516020613541833981519152610b1581611639565b60008211610b655760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610609565b50600955565b6000828152600260205260408120610b8390836118ce565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610bff5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610609565b6040808201516000908152600e60205220546001600160a01b031680610c675760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610609565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190613354565b9050600b5481600001511015610d3c5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610609565b600b548151118015610d5057506000600b54115b15610d7557600754600c541015610d6957610d696118da565b6000600c556008546007555b610d7f8382610839565b600a5460608401516001600160401b0390911690610d9c906118ec565b1115610df95760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610609565b610e01612d46565b7f000000000000000000000000000000000000000000000000000000000000000015610e3757610e3084611936565b9050610e3e565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610ec7576000610e708583611a4a565b905082604001518114610ec55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610609565b505b610ecf612d46565b90506000610edc85611142565b90506000610efb84606001518760600151611cbd90919063ffffffff16565b9050604081600d54610f0d91906132bc565b901b821115610f5e5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610609565b60008281526005602052604090205460ff1615610fbd5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610609565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100610ff661040080613287565b61100290610400613287565b61100d906008613287565b61101791906132bc565b886080015161102691906132bc565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906110f3908490613341565b9091555050600754600c54101561110c57505050505050565b7f000000000000000000000000000000000000000000000000000000000000000061113a5761113a84611dfd565b505050505050565b60408101516000906111965760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610609565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016111ce8560600151611e36565b9052905060006111dd82611e9e565b905060006111ee6104006040613287565b6111fc610400610100613287565b61120691906132bc565b6112136104006004613287565b611221610400610100613287565b61122b91906132bc565b61123591906132bc565b8560a0015161124491906133cd565b905061124e612d46565b611256612d65565b6112658760e001518486611f16565b925090506101006112796104006004613287565b61128391906132bc565b8760a001516112929190613287565b6112cf826040516020016112a691906133e1565b60405160208183030381529060405280519060200120896060015161210c90919063ffffffff16565b6112d99190613341565b87608001511461132b5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610609565b61133a8760a001518584612212565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146113ab5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610609565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114645760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610609565b6000805460ff191660011781556114819061147c3390565b611646565b61149960008051602061354183398151915233611646565b6114a5836000196132bc565b600d557f0000000000000000000000000000000000000000000000000000000000000000156114d557600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061054a90612494565b6000828152600160208190526040909120015461155f81611639565b6107b68383611668565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190613354565b9050600b54816000015111806115fe5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061054a57506301ffc9a760e01b6001600160e01b031983161461054a565b611643813361249e565b50565b61165082826124f7565b60008281526002602052604090206107b69082612562565b6116728282612577565b60008281526002602052604090206107b690826125de565b61010061169961040080613287565b6116a590610400613287565b6116b0906008613287565b6116ba91906132bc565b82516116c691906133cd565b156117135760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610609565b60208201518251829161172591613341565b111561176b5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610609565b6000611776836118ec565b61010061178561040080613287565b61179190610400613287565b61179d90610400613287565b6117a8906008613287565b6117b291906132bc565b6117bc9190613287565b9050808360200151111561180a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610609565b600061181683836125f3565b905080846020015110156118655760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610609565b83606001518460400151166001600160401b03166000146118c85760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610609565b50505050565b6000610b838383612609565b6118ea6001600160f01b03612633565b565b606081015160009019815b6001600160401b0382161561192757611911600183613267565b909116908061191f81613412565b9150506118f7565b600160ff9091161b9392505050565b61193e612d46565b60408083015160c08401516080850151925161196e93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119a16104006004613287565b6119ab91906132bc565b811015611a445760e08301516119c2600183613254565b608081106119d2576119d2613431565b60200201516040516020016119e991815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a1557611a15613431565b602002015118828260808110611a2d57611a2d613431565b6020020152611a3d600182613341565b9050611992565b50919050565b6000805b6020611a5d6104006004613287565b611a6791906132bc565b811015611ab5576101006020820284012080848360808110611a8b57611a8b613431565b602002018181525050506020610100611aa491906132bc565b611aae9082613341565b9050611a4e565b506000611ac560206101006132bc565b90505b6020611ad76104006004613287565b611ae191906132bc565b811015611bb45760005b6020611afa6104006004613287565b611b0491906132bc565b811015611bab576000848260808110611b1f57611b1f613431565b60200201519050600085611b338585613341565b60808110611b4357611b43613431565b602002015190508181604051602001611b66929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611b8e57611b8e613431565b602002015250611ba49050600183901b82613341565b9050611aeb565b5060011b611ac8565b508151611bbf612d46565b92506000610100611bd36104006004613287565b611bdd91906132bc565b8560800151611bec91906132bc565b905060005b85610100015151811015611cb357600080611c0d6002856133cd565b600003611c3d578491508761010001518381518110611c2e57611c2e613431565b60200260200101519050611c62565b8761010001518381518110611c5457611c54613431565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611c9b91906132bc565b93505050600181611cac9190613341565b9050611bf1565b5090949350505050565b600080610100611ccf61040080613287565b611cdb90610400613287565b611ce790610400613287565b611cf2906008613287565b611cfc91906132bc565b8311611d085782611d44565b610100611d1761040080613287565b611d2390610400613287565b611d2f90610400613287565b611d3a906008613287565b611d4491906132bc565b90506000611d51856118ec565b611d5b90856132bc565b90506000610100611d6e61040080613287565b611d7a90610400613287565b611d8690610400613287565b611d91906008613287565b611d9b91906132bc565b8211611da75781611de3565b610100611db661040080613287565b611dc290610400613287565b611dce90610400613287565b611dd9906008613287565b611de391906132bc565b9050611df381604085901b6132bc565b9695505050505050565b6000816020015143611e0f9190613254565b905060006010600d54901c90506000611e2b82846006546126d3565b90506118c881612633565b60008160000151826020015183604001518460600151604051602001611e81949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ea6612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161054a9385939092909160806001612782565b611f1e612d65565b611f26612d46565b60005b84811015611f845760005b6040611f436104006004613287565b611f4d91906132bc565b811015611f7157611f5d85612841565b9450611f6a600182613341565b9050611f34565b50611f7d600182613341565b9050611f29565b5060005b6020611f976104006004613287565b611fa191906132bc565b81101561204157611fb184612841565b9350858160808110611fc557611fc5613431565b6020020151845118828260808110611fdf57611fdf613431565b602002015285611ff0826001613341565b6080811061200057612000613431565b60200201518460016020020151188261201a836001613341565b6080811061202a5761202a613431565b602002015261203a600282613341565b9050611f88565b50600061204f856001613341565b90505b61205f6104006040613287565b61206d610400610100613287565b61207791906132bc565b6120846104006004613287565b612092610400610100613287565b61209c91906132bc565b6120a691906132bc565b8110156121005760005b60406120bf6104006004613287565b6120c991906132bc565b8110156120ed576120d985612841565b94506120e6600182613341565b90506120b0565b506120f9600182613341565b9050612052565b50829150935093915050565b60008061010061211e61040082613287565b61212891906132bc565b846020015161213791906132bc565b61214190846133cd565b6040850151606086015160208701519293508316179061010061216661040082613287565b61217091906132bc565b612183906001600160401b038416613287565b11156121d15760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610609565b6101006121e061040082613287565b6121ea91906132bc565b6121fd906001600160401b038316613287565b85516122099190613341565b95945050505050565b600061221c612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122829183918891906000608081612782565b905060005b6004602061229761040083613287565b6122a191906132bc565b6122ab9190613254565b81101561235c576000816004016020026080019050612346838684608081106122d6576122d6613431565b6020020151876122e7866001613341565b608081106122f7576122f7613431565b602002015188612308876002613341565b6080811061231857612318613431565b602002015189612329886003613341565b6080811061233957612339613431565b6020020151866000612782565b92506123559050600482613341565b9050612287565b5061248a81846004602061237261040083613287565b61237c91906132bc565b6123869190613254565b6080811061239657612396613431565b6020020151856003602061040060046123af9190613287565b6123b991906132bc565b6123c39190613254565b608081106123d3576123d3613431565b6020020151866002602061040060046123ec9190613287565b6123f691906132bc565b6124009190613254565b6080811061241057612410613431565b6020020151876001602061040060046124299190613287565b61243391906132bc565b61243d9190613254565b6080811061244d5761244d613431565b6020020151602061040060046124639190613287565b61246d91906132bc565b612478906020613287565b612483906080613341565b6001612782565b5195945050505050565b600061054a825490565b6124a88282610b8a565b610835576124b5816128ae565b6124c08360206128c0565b6040516020016124d192919061346b565b60408051601f198184030181529082905262461bcd60e51b8252610609916004016134e0565b6125018282610b8a565b6108355760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b83836001600160a01b038416612a5b565b6125818282610b8a565b156108355760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b83836001600160a01b038416612aaa565b60008183106126025781610b83565b5090919050565b600082600001828154811061262057612620613431565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461264f600183613254565b6126599086613287565b6126639190613341565b61266d91906132bc565b905061267a836002613287565b81111561268f5761268c836002613287565b90505b61269a6002846132bc565b8110156126af576126ac6002846132bc565b90505b6001600160f01b038111156126c857506001600160f01b035b60101b600d55505050565b600080806000198587098587029250828110838203039150508060000361270d57838281612703576127036132a6565b0492505050610b83565b80841161271957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61278a612d65565b600c600061279785612ba4565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61283357600080fd5b505050979650505050505050565b612849612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161054a91839160008060406001612782565b606061054a6001600160a01b03831660145b606060006128cf836002613287565b6128da906002613341565b6001600160401b038111156128f1576128f1612e65565b6040519080825280601f01601f19166020018201604052801561291b576020820181803683370190505b509050600360fc1b8160008151811061293657612936613431565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061296557612965613431565b60200101906001600160f81b031916908160001a9053506000612989846002613287565b612994906001613341565b90505b6001811115612a0c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129c8576129c8613431565b1a60f81b8282815181106129de576129de613431565b60200101906001600160f81b031916908160001a90535060049490941c93612a0581613513565b9050612997565b508315610b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610609565b6000818152600183016020526040812054612aa25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561054a565b50600061054a565b60008181526001830160205260408120548015612b93576000612ace600183613254565b8554909150600090612ae290600190613254565b9050818114612b47576000866000018281548110612b0257612b02613431565b9060005260206000200154905080876000018481548110612b2557612b25613431565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b5857612b5861352a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061054a565b600091505061054a565b5092915050565b612bac612d65565b62010000821015612bf057600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c3057600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612bd8565b68010000000000000000821015612c4a57612bd882612ce0565b600160801b821015612c9a576001600160401b038216604083901c612c6e82612ce0565b6001600160c01b0319168352612c8381612ce0565b6001600160c01b031916602084015250612cdb9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610609565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612d9557600080fd5b81356001600160e01b031981168114610b8357600080fd5b80356001600160a01b0381168114612cdb57600080fd5b80356001600160401b0381168114612cdb57600080fd5b60008060408385031215612dee57600080fd5b612df783612dad565b9150612e0560208401612dc4565b90509250929050565b600060208284031215612e2057600080fd5b5035919050565b600060208284031215612e3957600080fd5b610b8382612dc4565b60008060408385031215612e5557600080fd5b82359150612e0560208401612dad565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e9e57612e9e612e65565b60405290565b60405160c081016001600160401b0381118282101715612e9e57612e9e612e65565b600060808284031215612ed857600080fd5b604051608081018181106001600160401b0382111715612efa57612efa612e65565b80604052508091508235815260208301356020820152612f1c60408401612dc4565b6040820152612f2d60608401612dc4565b60608201525092915050565b600082601f830112612f4a57600080fd5b6040516110008082018281106001600160401b0382111715612f6e57612f6e612e65565b60405283018185821115612f8157600080fd5b845b82811015612f9b578035825260209182019101612f83565b509195945050505050565b600082601f830112612fb757600080fd5b813560206001600160401b0380831115612fd357612fd3612e65565b8260051b604051601f19603f83011681018181108482111715612ff857612ff8612e65565b60405293845285810183019383810192508785111561301657600080fd5b83870191505b8482101561133a5781358352918301919083019061301c565b6000611160828403121561304857600080fd5b613050612e7b565b90508135815260208201356020820152604082013560408201526130778360608401612ec6565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526130ab846101408501612f39565b60e08301526111408301356001600160401b038111156130ca57600080fd5b6130d685828601612fa6565b82840152505092915050565b60008082840360e08112156130f657600080fd5b83356001600160401b0381111561310c57600080fd5b61311886828701613035565b93505060c0601f198201121561312d57600080fd5b50613136612ea4565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000806040838503121561318d57600080fd5b50508035926020909101359150565b6000602082840312156131ae57600080fd5b81356001600160401b038111156131c457600080fd5b6131d084828501613035565b949350505050565b600080604083850312156131eb57600080fd5b6131f483612dad565b946020939093013593505050565b60008060006060848603121561321757600080fd5b8335925061322760208501612dad565b915061323560408501612dad565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054a5761054a61323e565b6001600160401b03828116828216039080821115612b9d57612b9d61323e565b60008160001904831182151516156132a1576132a161323e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132cb576132cb6132a6565b500490565b80516001600160801b0381168114612cdb57600080fd5b6000604082840312156132f957600080fd5b604051604081018181106001600160401b038211171561331b5761331b612e65565b604052613327836132d0565b8152613335602084016132d0565b60208201529392505050565b8082018082111561054a5761054a61323e565b600060c0828403121561336657600080fd5b60405160c081018181106001600160401b038211171561338857613388612e65565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133dc576133dc6132a6565b500690565b60408101818360005b60028110156134095781518352602092830192909101906001016133ea565b50505092915050565b600060ff821660ff81036134285761342861323e565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561346257818101518382015260200161344a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516134a3816017850160208801613447565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134d4816028840160208801613447565b01602801949350505050565b60208152600082518060208401526134ff816040850160208701613447565b601f01601f19169190910160400192915050565b6000816135225761352261323e565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220e3068cd9caadbadc58058c3a8cb2fe788ec1305be456d7e458fb364de5ab3fab64736f6c63430008100033", "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80637bba7d6111610125578063aed75224116100ad578063b776a5121161007c578063b776a512146104e5578063ca15c873146104ee578063d547741f14610501578063dddc61a814610514578063ffbc9bd01461051d57600080fd5b8063aed7522414610497578063b0628ee0146104aa578063b15d20da146104bd578063b4988fd0146104d257600080fd5b806391d14854116100f457806391d1485414610439578063a217fddf1461044c578063a827918214610454578063adaa7a0f1461045d578063ae722e821461048457600080fd5b80637bba7d61146103cf5780637eca5688146103f657806382975fe7146103ff5780639010d07c1461042657600080fd5b806331223ba7116101a857806339cd53ee1161017757806339cd53ee146103645780633baebb751461038d57806348f61441146103a05780635bdca855146103a9578063704d3c96146103bc57600080fd5b806331223ba71461032c578063331f3b9c14610335578063343aad821461033e57806336568abe1461035157600080fd5b806316a4be6f116101ef57806316a4be6f1461027e578063228cb733146102a9578063248a9ca3146102d45780632a02573b146103065780632f2ff15d1461031957600080fd5b806301ffc9a714610221578063047c13f514610249578063158ef93e1461025e5780631600c6241461026b575b600080fd5b61023461022f366004612d83565b610525565b60405190151581526020015b60405180910390f35b61025c610257366004612ddb565b610550565b005b6000546102349060ff1681565b61025c610279366004612e0e565b61066c565b600a54610291906001600160401b031681565b6040516001600160401b039091168152602001610240565b6004546102bc906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102f86102e2366004612e0e565b6000908152600160208190526040909120015490565b604051908152602001610240565b61025c610314366004612e27565b61068a565b61025c610327366004612e42565b610790565b6102f8600b5481565b6102f860065481565b6003546102bc906001600160a01b031681565b61025c61035f366004612e42565b6107bb565b6102bc610372366004612e0e565b600e602052600090815260409020546001600160a01b031681565b61025c61039b3660046130e2565b610839565b6102f8600d5481565b61025c6103b7366004612e0e565b610ad0565b61025c6103ca366004612e0e565b610afd565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102f860085481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6102bc61043436600461317a565b610b6b565b610234610447366004612e42565b610b8a565b6102f8600081565b6102f8600c5481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b61025c61049236600461319c565b610bb5565b6102f86104a536600461319c565b611142565b61025c6104b83660046131d8565b611345565b6102f860008051602061354183398151915281565b61025c6104e0366004613202565b611405565b6102f860075481565b6102f86104fc366004612e0e565b61152c565b61025c61050f366004612e42565b611543565b6102f860095481565b610234611569565b60006001600160e01b03198216635a05180f60e01b148061054a575061054a82611604565b92915050565b600061055d600143613254565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106125760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061354183398151915261068481611639565b50600655565b6000805160206135418339815191526106a281611639565b6000826001600160401b0316116106fb5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f006044820152606401610609565b610706600183613267565b82166001600160401b031660001461076c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b6064820152608401610609565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b600082815260016020819052604090912001546107ac81611639565b6107b68383611646565b505050565b6001600160a01b038116331461082b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610609565b6108358282611668565b5050565b815160a08201511461088d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610609565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109005760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610609565b600754600c54106109535760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610609565b600061010061096461040082613287565b61096e91906132bc565b61010061097d61040082613287565b61098791906132bc565b836060015161099691906132bc565b6109a09190613287565b60608401519091506109b2908261168a565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906132e7565b90506000610100610a396104006004613287565b610a4391906132bc565b8560800151610a529190613341565b90508082600001516001600160801b0316108015610a7d57508082602001516001600160801b031610155b610ac95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610609565b5050505050565b600080516020613541833981519152610ae881611639565b6008829055600b546000036108355750600755565b600080516020613541833981519152610b1581611639565b60008211610b655760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f0000006044820152606401610609565b50600955565b6000828152600260205260408120610b8390836118ce565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610bff5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610609565b6040808201516000908152600e60205220546001600160a01b031680610c675760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610609565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190613354565b9050600b5481600001511015610d3c5760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610609565b600b548151118015610d5057506000600b54115b15610d7557600754600c541015610d6957610d696118da565b6000600c556008546007555b610d7f8382610839565b600a5460608401516001600160401b0390911690610d9c906118ec565b1115610df95760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b6064820152608401610609565b610e01612d46565b7f000000000000000000000000000000000000000000000000000000000000000015610e3757610e3084611936565b9050610e3e565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610ec7576000610e708583611a4a565b905082604001518114610ec55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610609565b505b610ecf612d46565b90506000610edc85611142565b90506000610efb84606001518760600151611cbd90919063ffffffff16565b9050604081600d54610f0d91906132bc565b901b821115610f5e5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610609565b60008281526005602052604090205460ff1615610fbd5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d6974746564000000000000006044820152606401610609565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c610100610ff661040080613287565b61100290610400613287565b61100d906008613287565b61101791906132bc565b886080015161102691906132bc565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906110f3908490613341565b9091555050600754600c54101561110c57505050505050565b7f000000000000000000000000000000000000000000000000000000000000000061113a5761113a84611dfd565b505050505050565b60408101516000906111965760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610609565b600060405180608001604052808460400151815260200184602001518152602001846000015181526020016111ce8560600151611e36565b9052905060006111dd82611e9e565b905060006111ee6104006040613287565b6111fc610400610100613287565b61120691906132bc565b6112136104006004613287565b611221610400610100613287565b61122b91906132bc565b61123591906132bc565b8560a0015161124491906133cd565b905061124e612d46565b611256612d65565b6112658760e001518486611f16565b925090506101006112796104006004613287565b61128391906132bc565b8760a001516112929190613287565b6112cf826040516020016112a691906133e1565b60405160208183030381529060405280519060200120896060015161210c90919063ffffffff16565b6112d99190613341565b87608001511461132b5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610609565b61133a8760a001518584612212565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146113ab5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610609565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156114645760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608401610609565b6000805460ff191660011781556114819061147c3390565b611646565b61149960008051602061354183398151915233611646565b6114a5836000196132bc565b600d557f0000000000000000000000000000000000000000000000000000000000000000156114d557600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b600081815260026020526040812061054a90612494565b6000828152600160208190526040909120015461155f81611639565b6107b68383611668565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190613354565b9050600b54816000015111806115fe5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061054a57506301ffc9a760e01b6001600160e01b031983161461054a565b611643813361249e565b50565b61165082826124f7565b60008281526002602052604090206107b69082612562565b6116728282612577565b60008281526002602052604090206107b690826125de565b61010061169961040080613287565b6116a590610400613287565b6116b0906008613287565b6116ba91906132bc565b82516116c691906133cd565b156117135760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610609565b60208201518251829161172591613341565b111561176b5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610609565b6000611776836118ec565b61010061178561040080613287565b61179190610400613287565b61179d90610400613287565b6117a8906008613287565b6117b291906132bc565b6117bc9190613287565b9050808360200151111561180a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610609565b600061181683836125f3565b905080846020015110156118655760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610609565b83606001518460400151166001600160401b03166000146118c85760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610609565b50505050565b6000610b838383612609565b6118ea6001600160f01b03612633565b565b606081015160009019815b6001600160401b0382161561192757611911600183613267565b909116908061191f81613412565b9150506118f7565b600160ff9091161b9392505050565b61193e612d46565b60408083015160c08401516080850151925161196e93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119a16104006004613287565b6119ab91906132bc565b811015611a445760e08301516119c2600183613254565b608081106119d2576119d2613431565b60200201516040516020016119e991815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a1557611a15613431565b602002015118828260808110611a2d57611a2d613431565b6020020152611a3d600182613341565b9050611992565b50919050565b6000805b6020611a5d6104006004613287565b611a6791906132bc565b811015611ab5576101006020820284012080848360808110611a8b57611a8b613431565b602002018181525050506020610100611aa491906132bc565b611aae9082613341565b9050611a4e565b506000611ac560206101006132bc565b90505b6020611ad76104006004613287565b611ae191906132bc565b811015611bb45760005b6020611afa6104006004613287565b611b0491906132bc565b811015611bab576000848260808110611b1f57611b1f613431565b60200201519050600085611b338585613341565b60808110611b4357611b43613431565b602002015190508181604051602001611b66929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611b8e57611b8e613431565b602002015250611ba49050600183901b82613341565b9050611aeb565b5060011b611ac8565b508151611bbf612d46565b92506000610100611bd36104006004613287565b611bdd91906132bc565b8560800151611bec91906132bc565b905060005b85610100015151811015611cb357600080611c0d6002856133cd565b600003611c3d578491508761010001518381518110611c2e57611c2e613431565b60200260200101519050611c62565b8761010001518381518110611c5457611c54613431565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611c9b91906132bc565b93505050600181611cac9190613341565b9050611bf1565b5090949350505050565b600080610100611ccf61040080613287565b611cdb90610400613287565b611ce790610400613287565b611cf2906008613287565b611cfc91906132bc565b8311611d085782611d44565b610100611d1761040080613287565b611d2390610400613287565b611d2f90610400613287565b611d3a906008613287565b611d4491906132bc565b90506000611d51856118ec565b611d5b90856132bc565b90506000610100611d6e61040080613287565b611d7a90610400613287565b611d8690610400613287565b611d91906008613287565b611d9b91906132bc565b8211611da75781611de3565b610100611db661040080613287565b611dc290610400613287565b611dce90610400613287565b611dd9906008613287565b611de391906132bc565b9050611df381604085901b6132bc565b9695505050505050565b6000816020015143611e0f9190613254565b905060006010600d54901c90506000611e2b82846006546126d3565b90506118c881612633565b60008160000151826020015183604001518460600151604051602001611e81949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611ea6612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161054a9385939092909160806001612782565b611f1e612d65565b611f26612d46565b60005b84811015611f845760005b6040611f436104006004613287565b611f4d91906132bc565b811015611f7157611f5d85612841565b9450611f6a600182613341565b9050611f34565b50611f7d600182613341565b9050611f29565b5060005b6020611f976104006004613287565b611fa191906132bc565b81101561204157611fb184612841565b9350858160808110611fc557611fc5613431565b6020020151845118828260808110611fdf57611fdf613431565b602002015285611ff0826001613341565b6080811061200057612000613431565b60200201518460016020020151188261201a836001613341565b6080811061202a5761202a613431565b602002015261203a600282613341565b9050611f88565b50600061204f856001613341565b90505b61205f6104006040613287565b61206d610400610100613287565b61207791906132bc565b6120846104006004613287565b612092610400610100613287565b61209c91906132bc565b6120a691906132bc565b8110156121005760005b60406120bf6104006004613287565b6120c991906132bc565b8110156120ed576120d985612841565b94506120e6600182613341565b90506120b0565b506120f9600182613341565b9050612052565b50829150935093915050565b60008061010061211e61040082613287565b61212891906132bc565b846020015161213791906132bc565b61214190846133cd565b6040850151606086015160208701519293508316179061010061216661040082613287565b61217091906132bc565b612183906001600160401b038416613287565b11156121d15760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610609565b6101006121e061040082613287565b6121ea91906132bc565b6121fd906001600160401b038316613287565b85516122099190613341565b95945050505050565b600061221c612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528451908501516122829183918891906000608081612782565b905060005b6004602061229761040083613287565b6122a191906132bc565b6122ab9190613254565b81101561235c576000816004016020026080019050612346838684608081106122d6576122d6613431565b6020020151876122e7866001613341565b608081106122f7576122f7613431565b602002015188612308876002613341565b6080811061231857612318613431565b602002015189612329886003613341565b6080811061233957612339613431565b6020020151866000612782565b92506123559050600482613341565b9050612287565b5061248a81846004602061237261040083613287565b61237c91906132bc565b6123869190613254565b6080811061239657612396613431565b6020020151856003602061040060046123af9190613287565b6123b991906132bc565b6123c39190613254565b608081106123d3576123d3613431565b6020020151866002602061040060046123ec9190613287565b6123f691906132bc565b6124009190613254565b6080811061241057612410613431565b6020020151876001602061040060046124299190613287565b61243391906132bc565b61243d9190613254565b6080811061244d5761244d613431565b6020020151602061040060046124639190613287565b61246d91906132bc565b612478906020613287565b612483906080613341565b6001612782565b5195945050505050565b600061054a825490565b6124a88282610b8a565b610835576124b5816128ae565b6124c08360206128c0565b6040516020016124d192919061346b565b60408051601f198184030181529082905262461bcd60e51b8252610609916004016134e0565b6125018282610b8a565b6108355760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610b83836001600160a01b038416612a5b565b6125818282610b8a565b156108355760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b83836001600160a01b038416612aaa565b60008183106126025781610b83565b5090919050565b600082600001828154811061262057612620613431565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461264f600183613254565b6126599086613287565b6126639190613341565b61266d91906132bc565b905061267a836002613287565b81111561268f5761268c836002613287565b90505b61269a6002846132bc565b8110156126af576126ac6002846132bc565b90505b6001600160f01b038111156126c857506001600160f01b035b60101b600d55505050565b600080806000198587098587029250828110838203039150508060000361270d57838281612703576127036132a6565b0492505050610b83565b80841161271957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61278a612d65565b600c600061279785612ba4565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61283357600080fd5b505050979650505050505050565b612849612d65565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161054a91839160008060406001612782565b606061054a6001600160a01b03831660145b606060006128cf836002613287565b6128da906002613341565b6001600160401b038111156128f1576128f1612e65565b6040519080825280601f01601f19166020018201604052801561291b576020820181803683370190505b509050600360fc1b8160008151811061293657612936613431565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061296557612965613431565b60200101906001600160f81b031916908160001a9053506000612989846002613287565b612994906001613341565b90505b6001811115612a0c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106129c8576129c8613431565b1a60f81b8282815181106129de576129de613431565b60200101906001600160f81b031916908160001a90535060049490941c93612a0581613513565b9050612997565b508315610b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610609565b6000818152600183016020526040812054612aa25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561054a565b50600061054a565b60008181526001830160205260408120548015612b93576000612ace600183613254565b8554909150600090612ae290600190613254565b9050818114612b47576000866000018281548110612b0257612b02613431565b9060005260206000200154905080876000018481548110612b2557612b25613431565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b5857612b5861352a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061054a565b600091505061054a565b5092915050565b612bac612d65565b62010000821015612bf057600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612c3057600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612bd8565b68010000000000000000821015612c4a57612bd882612ce0565b600160801b821015612c9a576001600160401b038216604083901c612c6e82612ce0565b6001600160c01b0319168352612c8381612ce0565b6001600160c01b031916602084015250612cdb9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610609565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612d9557600080fd5b81356001600160e01b031981168114610b8357600080fd5b80356001600160a01b0381168114612cdb57600080fd5b80356001600160401b0381168114612cdb57600080fd5b60008060408385031215612dee57600080fd5b612df783612dad565b9150612e0560208401612dc4565b90509250929050565b600060208284031215612e2057600080fd5b5035919050565b600060208284031215612e3957600080fd5b610b8382612dc4565b60008060408385031215612e5557600080fd5b82359150612e0560208401612dad565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612e9e57612e9e612e65565b60405290565b60405160c081016001600160401b0381118282101715612e9e57612e9e612e65565b600060808284031215612ed857600080fd5b604051608081018181106001600160401b0382111715612efa57612efa612e65565b80604052508091508235815260208301356020820152612f1c60408401612dc4565b6040820152612f2d60608401612dc4565b60608201525092915050565b600082601f830112612f4a57600080fd5b6040516110008082018281106001600160401b0382111715612f6e57612f6e612e65565b60405283018185821115612f8157600080fd5b845b82811015612f9b578035825260209182019101612f83565b509195945050505050565b600082601f830112612fb757600080fd5b813560206001600160401b0380831115612fd357612fd3612e65565b8260051b604051601f19603f83011681018181108482111715612ff857612ff8612e65565b60405293845285810183019383810192508785111561301657600080fd5b83870191505b8482101561133a5781358352918301919083019061301c565b6000611160828403121561304857600080fd5b613050612e7b565b90508135815260208201356020820152604082013560408201526130778360608401612ec6565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526130ab846101408501612f39565b60e08301526111408301356001600160401b038111156130ca57600080fd5b6130d685828601612fa6565b82840152505092915050565b60008082840360e08112156130f657600080fd5b83356001600160401b0381111561310c57600080fd5b61311886828701613035565b93505060c0601f198201121561312d57600080fd5b50613136612ea4565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b6000806040838503121561318d57600080fd5b50508035926020909101359150565b6000602082840312156131ae57600080fd5b81356001600160401b038111156131c457600080fd5b6131d084828501613035565b949350505050565b600080604083850312156131eb57600080fd5b6131f483612dad565b946020939093013593505050565b60008060006060848603121561321757600080fd5b8335925061322760208501612dad565b915061323560408501612dad565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054a5761054a61323e565b6001600160401b03828116828216039080821115612b9d57612b9d61323e565b60008160001904831182151516156132a1576132a161323e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132cb576132cb6132a6565b500490565b80516001600160801b0381168114612cdb57600080fd5b6000604082840312156132f957600080fd5b604051604081018181106001600160401b038211171561331b5761331b612e65565b604052613327836132d0565b8152613335602084016132d0565b60208201529392505050565b8082018082111561054a5761054a61323e565b600060c0828403121561336657600080fd5b60405160c081018181106001600160401b038211171561338857613388612e65565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826133dc576133dc6132a6565b500690565b60408101818360005b60028110156134095781518352602092830192909101906001016133ea565b50505092915050565b600060ff821660ff81036134285761342861323e565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101561346257818101518382015260200161344a565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516134a3816017850160208801613447565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134d4816028840160208801613447565b01602801949350505050565b60208152600082518060208401526134ff816040850160208701613447565b601f01601f19169190910160400192915050565b6000816135225761352261323e565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220e3068cd9caadbadc58058c3a8cb2fe788ec1305be456d7e458fb364de5ab3fab64736f6c63430008100033", "linkReferences": {}, "deployedLinkReferences": {} }