{
  "contractName": "ContinuousLocking4Reputation",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_locker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_extendPeriod",
          "type": "uint256"
        }
      ],
      "name": "ExtendLocking",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_locker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_period",
          "type": "uint256"
        }
      ],
      "name": "LockToken",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_batchIndex",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Release",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_LOCKING_BATCHES_HARDCAP",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "contract Avatar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "batchTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "batches",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalScore",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "batchesIndexCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_extendPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_batchIndexToLockIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_agreementHash",
          "type": "bytes32"
        }
      ],
      "name": "extendLocking",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAgreementHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_batchIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        }
      ],
      "name": "getLockingIdScore",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_batchIndex",
          "type": "uint256"
        }
      ],
      "name": "getRepRewardPerBatch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "repReward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_reputationReward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_batchTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_redeemEnableTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxLockingBatches",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_repRewardConstA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_repRewardConstB",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_batchesIndexCap",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_agreementHash",
          "type": "bytes32"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_batchIndexToLockIn",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_agreementHash",
          "type": "bytes32"
        }
      ],
      "name": "lock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lockingId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lockCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lockers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lockingTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLockingBatches",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reputation",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "redeemEnableTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_lockingId",
          "type": "uint256"
        }
      ],
      "name": "release",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "repRewardConstA",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "repRewardConstB",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reputationRewardLeft",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalLockedLeft",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "voteParamsHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "votingMachine",
      "outputs": [
        {
          "internalType": "contract IntVoteInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611c63806100206000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636c9d43b6116100de578063a6e1a54c11610097578063c348a24b11610071578063c348a24b14610352578063ef5a3e4a1461035a578063f6a740011461037d578063fc0c546a146103e757610173565b8063a6e1a54c146102e3578063afe0e33c1461032d578063b32c4d8d1461033557610173565b80636c9d43b6146102635780636e57307b1461026b578063746c0a601461029c57806378e97925146102a45780637b3e46f8146102ac5780638db564c2146102db57610173565b80634ea2c7ec116101305780634ea2c7ec14610233578063591451f71461023b5780635aef7de6146102435780635b42f48b1461024b5780635eff3f2914610253578063696da9211461025b57610173565b8063029489a9146101785780630357371d146101a757806303840c6c146101d35780631e9a6950146101db5780633d1678f4146102075780633edf7ca11461020f575b600080fd5b6101956004803603602081101561018e57600080fd5b50356103ef565b60408051918252519081900360200190f35b610195600480360360408110156101bd57600080fd5b506001600160a01b038135169060200135610422565b61019561058c565b610195600480360360408110156101f157600080fd5b506001600160a01b038135169060200135610592565b61019561096f565b610217610975565b604080516001600160a01b039092168252519081900360200190f35b610195610984565b61019561098a565b610217610990565b61019561099f565b6101956109a5565b6101956109aa565b6101956109b0565b61029a6004803603608081101561028157600080fd5b50803590602081013590604081013590606001356109b6565b005b610195610ce2565b610195610ce8565b610195600480360360808110156102c257600080fd5b5080359060208101359060408101359060600135610cee565b61019561100d565b61030f600480360360408110156102f957600080fd5b506001600160a01b038135169060200135611013565b60408051938452602084019290925282820152519081900360600190f35b61019561103f565b6101956004803603602081101561034b57600080fd5b5035611045565b610195611057565b6101956004803603604081101561037057600080fd5b508035906020013561105d565b61029a600480360361016081101561039457600080fd5b506001600160a01b03813581169160208101359160408201359160608101359160808201359160a08101359160c08201359160e08101359161010082013591610120810135909116906101400135611081565b6102176112a6565b6000604354821161041d5761041a604154610415846042546112b590919063ffffffff16565b611306565b90505b919050565b6001600160a01b038216600090815260376020908152604080832084845290915281208054610498576040805162461bcd60e51b815260206004820152601860248201527f6e6f20616d6f756e74206c65667420746f20756e6c6f636b0000000000000000604482015290519081900360640190fd5b805460008255603d54600283015460018401549294506104bf92910263ffffffff61136a16565b4211610512576040805162461bcd60e51b815260206004820152601e60248201527f6c6f636b696e6720706572696f64206973207374696c6c206163746976650000604482015290519081900360640190fd5b604054610525908363ffffffff6113cb16565b604055603e54610545906001600160a01b0316858463ffffffff61140d16565b6040805183815290516001600160a01b0386169185917fe332e9963bc980fb82ccd3e7e181d76bddde349eec46b4ba393f3444529cd17f9181900360200190a35092915050565b60425481565b6000603b5442116105e3576040805162461bcd60e51b81526020600482015260166024820152756e6f77203e2072656465656d456e61626c6554696d6560501b604482015290519081900360640190fd5b6001600160a01b038316600090815260376020908152604080832085845290915290206001810154610658576040805162461bcd60e51b815260206004820152601960248201527817db1bd8dada5b99d25908191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6000603d54603a548360010154038161066d57fe5b0490506000603d54603a5442038161068157fe5b04905060006106ad6106a085600201548561136a90919063ffffffff16565b839063ffffffff61146416565b90505b808310156107a55760008381526038602090815260408083208984526001810190925290912054801561079857600088815260018301602052604081208190556106f9866103ef565b9050600061070f6107098461147a565b83611306565b9050600061072982610724876000015461147a565b61148f565b905061073b8a8263ffffffff61136a16565b99508b6001600160a01b03168b7facf9103edd7d12d169ab5037ce643ee56e59d5986362a9e903d86f2544fefcaa610772846114a8565b604080516001600160d81b03929092168252602082018d90528051918290030190a35050505b50506001909201916106b0565b6107ae856114a8565b6001600160d81b031694506000851161080e576040805162461bcd60e51b815260206004820152601960248201527f72657075746174696f6e20746f2072656465656d206973203000000000000000604482015290519081900360640190fd5b603954610821908663ffffffff6113cb16565b60395560345460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d602081101561089357600080fd5b50516040805163dea9e24d60e01b8152600481018890526001600160a01b038a811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b1580156108e857600080fd5b505af11580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b5051610965576040805162461bcd60e51b815260206004820152601e60248201527f6d696e742072657075746174696f6e2073686f756c6420737563636565640000604482015290519081900360640190fd5b5050505092915050565b603b5481565b6035546001600160a01b031681565b60365481565b60415481565b6034546001600160a01b031681565b603c5481565b601881565b60005490565b603d5481565b8060005481146109f75760405162461bcd60e51b8152600401808060200182810382526028815260200180611aea6028913960400191505060405180910390fd5b33600090815260376020908152604080832086845290915290206001810154610a63576040805162461bcd60e51b815260206004820152601960248201527817db1bd8dada5b99d25908191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6000610ab186603d54610a9d603a54610a91603d54886002015402886001015461136a90919063ffffffff16565b9063ffffffff6113cb16565b81610aa457fe5b049063ffffffff6113cb16565b90506000610ac5828963ffffffff61136a16565b9050603c54811115610b085760405162461bcd60e51b815260040180806020018281038252602a815260200180611a11602a913960400191505060405180910390fd5b60008811610b5d576040805162461bcd60e51b815260206004820152601960248201527f5f657874656e64506572696f64206d757374206265203e203000000000000000604482015290519081900360640190fd5b604354610b70888363ffffffff61136a16565b1115610bad5760405162461bcd60e51b8152600401808060200182810382526028815260200180611b6e6028913960400191505060405180910390fd5b6000603d54603a54420381610bbe57fe5b049050878114610c0d576040805162461bcd60e51b81526020600482015260156024820152746c6f636b696e67206973206e6f742061637469766560581b604482015290519081900360640190fd5b60005b82811015610c855781810160009081526038602052604081208654909190610c41908487039063ffffffff6114b216565b60008b81526001840160205260409020548354919250610c6b91610a91908463ffffffff61136a16565b825560008a81526001928301602052604090205501610c10565b506002840154610c9b908a63ffffffff61136a16565b6002850155604080518a81529051889133917fbf1612e584a5355572c05134f25811613efa611499c6597f74d7dde53adc104c9181900360200190a3505050505050505050565b60435481565b603a5481565b6000816000548114610d315760405162461bcd60e51b8152600401808060200182810382526028815260200180611aea6028913960400191505060405180910390fd5b60008611610d7e576040805162461bcd60e51b815260206004820152601560248201527405f616d6f756e742073686f756c64206265203e203605c1b604482015290519081900360640190fd5b603a54421015610dbf5760405162461bcd60e51b8152600401808060200182810382526033815260200180611a8a6033913960400191505060405180910390fd5b603c54851115610e005760405162461bcd60e51b8152600401808060200182810382526022815260200180611b126022913960400191505060405180910390fd5b60008511610e4b576040805162461bcd60e51b815260206004820152601360248201527205f706572696f64206d757374206265203e203606c1b604482015290519081900360640190fd5b604354610e5e858763ffffffff61136a16565b1115610e9b5760405162461bcd60e51b81526004018080602001828103825260388152602001806119906038913960400191505060405180910390fd5b603f54610eaf90600163ffffffff61136a16565b603f819055336000818152603760209081526040808320858452909152902088815560028101889055426001820155603e5492945091610efc916001600160a01b0390911690308a61150b565b6000603d54603a54420381610f0d57fe5b049050858114610f4e5760405162461bcd60e51b8152600401808060200182810382526044815260200180611bea6044913960600191505060405180910390fd5b60005b87811015610fac57818101600090815260386020526040812090610f7d838b038c63ffffffff6114b216565b8254909150610f92908263ffffffff61136a16565b825560008781526001928301602052604090205501610f51565b50604054610fc0908963ffffffff61136a16565b60409081558051898152602081018990528151869233927fe24d345c42b1d6b6d4bdaf4acbd768c1dfdfb0242ff6df221c68ce443b8c2d0d929081900390910190a3505050949350505050565b603f5481565b603760209081526000928352604080842090915290825290208054600182015460029092015490919083565b60395481565b60386020526000908152604090205481565b60405481565b60008281526038602090815260408083208484526001019091529020545b92915050565b61108a8b61156b565b600f88116110df576040805162461bcd60e51b815260206004820152601860248201527f626174636854696d652073686f756c64206265203e2031350000000000000000604482015290519081900360640190fd5b601886111561111f5760405162461bcd60e51b815260040180806020018281038252603a815260200180611b34603a913960400191505060405180910390fd5b61112f898963ffffffff61136a16565b87101561116d5760405162461bcd60e51b815260040180806020018281038252602a815260200180611bc0602a913960400191505060405180910390fd5b60648311156111ad5760405162461bcd60e51b81526004018080602001828103825260288152602001806119c86028913960400191505060405180910390fd5b603e80546001600160a01b0319166001600160a01b038416179055603a89905560398a9055603b879055603c869055603d8890556103e884106112215760405162461bcd60e51b81526004018080602001828103825260218152602001806119f06021913960400191505060405180910390fd5b89604154106112615760405162461bcd60e51b815260040180806020018281038252602d815260200180611abd602d913960400191505060405180910390fd5b61126a8561147a565b6041556112886001600160d81b0385166103e863ffffffff61168316565b6042556043839055611299816116a4565b5050505050505050505050565b603e546001600160a01b031681565b60008282600160281b5b81156112fd5781600116600114156112de576112db8184611306565b90505b60019190911c9081156112f8576112f58384611306565b92505b6112bf565b95945050505050565b60008282028284828161131557fe5b0414611360576040805162461bcd60e51b81526020600482015260156024820152745265616c4d617468206d756c206f766572666c6f7760581b604482015290519081900360640190fd5b60281c9392505050565b6000828201838110156113c4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006113c483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116fe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261145f908490611795565b505050565b600081831061147357816113c4565b5090919050565b6001600160d81b038116600160281b02919050565b600081600160281b8402816114a057fe5b049392505050565b600160281b900490565b6000826114c15750600061107b565b828202828482816114ce57fe5b04146113c45760405162461bcd60e51b8152600401808060200182810382526021815260200180611a3b6021913960400191505060405180910390fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611565908590611795565b50505050565b600154610100900460ff1680611584575061158461194d565b80611592575060015460ff16155b6115cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a5c602e913960400191505060405180910390fd5b600154610100900460ff161580156115f7576001805460ff1961ff00199091166101001716811790555b6001600160a01b038216611652576040805162461bcd60e51b815260206004820152601760248201527f536368656d65206d757374206861766520617661746172000000000000000000604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b038416179055801561167f576001805461ff00191690555b5050565b60006113c46001600160d81b03808516600160281b9081029185160261148f565b600054156116f9576040805162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207365742061677265656d656e742074776963650000000000604482015290519081900360640190fd5b600055565b6000818484111561178d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175257818101518382015260200161173a565b50505050905090810190601f16801561177f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6117a7826001600160a01b0316611953565b6117f8576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106118365780518252601f199092019160209182019101611817565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611898576040519150601f19603f3d011682016040523d82523d6000602084013e61189d565b606091505b5091509150816118f4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156115655780806020019051602081101561191057600080fd5b50516115655760405162461bcd60e51b815260040180806020018281038252602a815260200180611b96602a913960400191505060405180910390fd5b303b1590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061198757508115155b94935050505056fe5f6261746368496e646578546f4c6f636b496e202b205f706572696f6420657863656564206d617820616c6c6f77656420626174636865735f62617463686573496e646578436170203e20424154434845535f494e4445585f484152444341505f726570526577617264436f6e7374422073686f756c64206265203c20313030306c6f636b696e6720706572696f64206578636565647320746865206d6178696d756d20616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65646c6f636b696e67206973206e6f7420656e61626c656420796574202869742073746172747320617420737461727454696d6529726570526577617264436f6e7374412073686f756c64206265203c205f72657075746174696f6e52657761726453656e646572206d7573742073656e64207468652072696768742061677265656d656e74486173685f706572696f642065786365656420746865206d6178696d756d20616c6c6f7765646d61784c6f636b696e67426174636865732073686f756c64206265203c3d204d41585f4c4f434b494e475f424154434845535f484152444341505f657874656e64506572696f6420657863656564206d617820616c6c6f77656420626174636865735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645f72656465656d456e61626c6554696d65203e3d205f737461727454696d652b5f626174636854696d655f6261746368496e646578546f4c6f636b496e206d75737420626520746865206f6e6520636f72726573706f6e64696e6720746f207468652063757272656e74206f6e65a2646970667358221220e52f7aa4c2e4c8b54c8740500c62c43c31ec137f31cf63e0d9e6e6318f03083564736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636c9d43b6116100de578063a6e1a54c11610097578063c348a24b11610071578063c348a24b14610352578063ef5a3e4a1461035a578063f6a740011461037d578063fc0c546a146103e757610173565b8063a6e1a54c146102e3578063afe0e33c1461032d578063b32c4d8d1461033557610173565b80636c9d43b6146102635780636e57307b1461026b578063746c0a601461029c57806378e97925146102a45780637b3e46f8146102ac5780638db564c2146102db57610173565b80634ea2c7ec116101305780634ea2c7ec14610233578063591451f71461023b5780635aef7de6146102435780635b42f48b1461024b5780635eff3f2914610253578063696da9211461025b57610173565b8063029489a9146101785780630357371d146101a757806303840c6c146101d35780631e9a6950146101db5780633d1678f4146102075780633edf7ca11461020f575b600080fd5b6101956004803603602081101561018e57600080fd5b50356103ef565b60408051918252519081900360200190f35b610195600480360360408110156101bd57600080fd5b506001600160a01b038135169060200135610422565b61019561058c565b610195600480360360408110156101f157600080fd5b506001600160a01b038135169060200135610592565b61019561096f565b610217610975565b604080516001600160a01b039092168252519081900360200190f35b610195610984565b61019561098a565b610217610990565b61019561099f565b6101956109a5565b6101956109aa565b6101956109b0565b61029a6004803603608081101561028157600080fd5b50803590602081013590604081013590606001356109b6565b005b610195610ce2565b610195610ce8565b610195600480360360808110156102c257600080fd5b5080359060208101359060408101359060600135610cee565b61019561100d565b61030f600480360360408110156102f957600080fd5b506001600160a01b038135169060200135611013565b60408051938452602084019290925282820152519081900360600190f35b61019561103f565b6101956004803603602081101561034b57600080fd5b5035611045565b610195611057565b6101956004803603604081101561037057600080fd5b508035906020013561105d565b61029a600480360361016081101561039457600080fd5b506001600160a01b03813581169160208101359160408201359160608101359160808201359160a08101359160c08201359160e08101359161010082013591610120810135909116906101400135611081565b6102176112a6565b6000604354821161041d5761041a604154610415846042546112b590919063ffffffff16565b611306565b90505b919050565b6001600160a01b038216600090815260376020908152604080832084845290915281208054610498576040805162461bcd60e51b815260206004820152601860248201527f6e6f20616d6f756e74206c65667420746f20756e6c6f636b0000000000000000604482015290519081900360640190fd5b805460008255603d54600283015460018401549294506104bf92910263ffffffff61136a16565b4211610512576040805162461bcd60e51b815260206004820152601e60248201527f6c6f636b696e6720706572696f64206973207374696c6c206163746976650000604482015290519081900360640190fd5b604054610525908363ffffffff6113cb16565b604055603e54610545906001600160a01b0316858463ffffffff61140d16565b6040805183815290516001600160a01b0386169185917fe332e9963bc980fb82ccd3e7e181d76bddde349eec46b4ba393f3444529cd17f9181900360200190a35092915050565b60425481565b6000603b5442116105e3576040805162461bcd60e51b81526020600482015260166024820152756e6f77203e2072656465656d456e61626c6554696d6560501b604482015290519081900360640190fd5b6001600160a01b038316600090815260376020908152604080832085845290915290206001810154610658576040805162461bcd60e51b815260206004820152601960248201527817db1bd8dada5b99d25908191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6000603d54603a548360010154038161066d57fe5b0490506000603d54603a5442038161068157fe5b04905060006106ad6106a085600201548561136a90919063ffffffff16565b839063ffffffff61146416565b90505b808310156107a55760008381526038602090815260408083208984526001810190925290912054801561079857600088815260018301602052604081208190556106f9866103ef565b9050600061070f6107098461147a565b83611306565b9050600061072982610724876000015461147a565b61148f565b905061073b8a8263ffffffff61136a16565b99508b6001600160a01b03168b7facf9103edd7d12d169ab5037ce643ee56e59d5986362a9e903d86f2544fefcaa610772846114a8565b604080516001600160d81b03929092168252602082018d90528051918290030190a35050505b50506001909201916106b0565b6107ae856114a8565b6001600160d81b031694506000851161080e576040805162461bcd60e51b815260206004820152601960248201527f72657075746174696f6e20746f2072656465656d206973203000000000000000604482015290519081900360640190fd5b603954610821908663ffffffff6113cb16565b60395560345460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d602081101561089357600080fd5b50516040805163dea9e24d60e01b8152600481018890526001600160a01b038a811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b1580156108e857600080fd5b505af11580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b5051610965576040805162461bcd60e51b815260206004820152601e60248201527f6d696e742072657075746174696f6e2073686f756c6420737563636565640000604482015290519081900360640190fd5b5050505092915050565b603b5481565b6035546001600160a01b031681565b60365481565b60415481565b6034546001600160a01b031681565b603c5481565b601881565b60005490565b603d5481565b8060005481146109f75760405162461bcd60e51b8152600401808060200182810382526028815260200180611aea6028913960400191505060405180910390fd5b33600090815260376020908152604080832086845290915290206001810154610a63576040805162461bcd60e51b815260206004820152601960248201527817db1bd8dada5b99d25908191bd95cc81b9bdd08195e1a5cdd603a1b604482015290519081900360640190fd5b6000610ab186603d54610a9d603a54610a91603d54886002015402886001015461136a90919063ffffffff16565b9063ffffffff6113cb16565b81610aa457fe5b049063ffffffff6113cb16565b90506000610ac5828963ffffffff61136a16565b9050603c54811115610b085760405162461bcd60e51b815260040180806020018281038252602a815260200180611a11602a913960400191505060405180910390fd5b60008811610b5d576040805162461bcd60e51b815260206004820152601960248201527f5f657874656e64506572696f64206d757374206265203e203000000000000000604482015290519081900360640190fd5b604354610b70888363ffffffff61136a16565b1115610bad5760405162461bcd60e51b8152600401808060200182810382526028815260200180611b6e6028913960400191505060405180910390fd5b6000603d54603a54420381610bbe57fe5b049050878114610c0d576040805162461bcd60e51b81526020600482015260156024820152746c6f636b696e67206973206e6f742061637469766560581b604482015290519081900360640190fd5b60005b82811015610c855781810160009081526038602052604081208654909190610c41908487039063ffffffff6114b216565b60008b81526001840160205260409020548354919250610c6b91610a91908463ffffffff61136a16565b825560008a81526001928301602052604090205501610c10565b506002840154610c9b908a63ffffffff61136a16565b6002850155604080518a81529051889133917fbf1612e584a5355572c05134f25811613efa611499c6597f74d7dde53adc104c9181900360200190a3505050505050505050565b60435481565b603a5481565b6000816000548114610d315760405162461bcd60e51b8152600401808060200182810382526028815260200180611aea6028913960400191505060405180910390fd5b60008611610d7e576040805162461bcd60e51b815260206004820152601560248201527405f616d6f756e742073686f756c64206265203e203605c1b604482015290519081900360640190fd5b603a54421015610dbf5760405162461bcd60e51b8152600401808060200182810382526033815260200180611a8a6033913960400191505060405180910390fd5b603c54851115610e005760405162461bcd60e51b8152600401808060200182810382526022815260200180611b126022913960400191505060405180910390fd5b60008511610e4b576040805162461bcd60e51b815260206004820152601360248201527205f706572696f64206d757374206265203e203606c1b604482015290519081900360640190fd5b604354610e5e858763ffffffff61136a16565b1115610e9b5760405162461bcd60e51b81526004018080602001828103825260388152602001806119906038913960400191505060405180910390fd5b603f54610eaf90600163ffffffff61136a16565b603f819055336000818152603760209081526040808320858452909152902088815560028101889055426001820155603e5492945091610efc916001600160a01b0390911690308a61150b565b6000603d54603a54420381610f0d57fe5b049050858114610f4e5760405162461bcd60e51b8152600401808060200182810382526044815260200180611bea6044913960600191505060405180910390fd5b60005b87811015610fac57818101600090815260386020526040812090610f7d838b038c63ffffffff6114b216565b8254909150610f92908263ffffffff61136a16565b825560008781526001928301602052604090205501610f51565b50604054610fc0908963ffffffff61136a16565b60409081558051898152602081018990528151869233927fe24d345c42b1d6b6d4bdaf4acbd768c1dfdfb0242ff6df221c68ce443b8c2d0d929081900390910190a3505050949350505050565b603f5481565b603760209081526000928352604080842090915290825290208054600182015460029092015490919083565b60395481565b60386020526000908152604090205481565b60405481565b60008281526038602090815260408083208484526001019091529020545b92915050565b61108a8b61156b565b600f88116110df576040805162461bcd60e51b815260206004820152601860248201527f626174636854696d652073686f756c64206265203e2031350000000000000000604482015290519081900360640190fd5b601886111561111f5760405162461bcd60e51b815260040180806020018281038252603a815260200180611b34603a913960400191505060405180910390fd5b61112f898963ffffffff61136a16565b87101561116d5760405162461bcd60e51b815260040180806020018281038252602a815260200180611bc0602a913960400191505060405180910390fd5b60648311156111ad5760405162461bcd60e51b81526004018080602001828103825260288152602001806119c86028913960400191505060405180910390fd5b603e80546001600160a01b0319166001600160a01b038416179055603a89905560398a9055603b879055603c869055603d8890556103e884106112215760405162461bcd60e51b81526004018080602001828103825260218152602001806119f06021913960400191505060405180910390fd5b89604154106112615760405162461bcd60e51b815260040180806020018281038252602d815260200180611abd602d913960400191505060405180910390fd5b61126a8561147a565b6041556112886001600160d81b0385166103e863ffffffff61168316565b6042556043839055611299816116a4565b5050505050505050505050565b603e546001600160a01b031681565b60008282600160281b5b81156112fd5781600116600114156112de576112db8184611306565b90505b60019190911c9081156112f8576112f58384611306565b92505b6112bf565b95945050505050565b60008282028284828161131557fe5b0414611360576040805162461bcd60e51b81526020600482015260156024820152745265616c4d617468206d756c206f766572666c6f7760581b604482015290519081900360640190fd5b60281c9392505050565b6000828201838110156113c4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006113c483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116fe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261145f908490611795565b505050565b600081831061147357816113c4565b5090919050565b6001600160d81b038116600160281b02919050565b600081600160281b8402816114a057fe5b049392505050565b600160281b900490565b6000826114c15750600061107b565b828202828482816114ce57fe5b04146113c45760405162461bcd60e51b8152600401808060200182810382526021815260200180611a3b6021913960400191505060405180910390fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611565908590611795565b50505050565b600154610100900460ff1680611584575061158461194d565b80611592575060015460ff16155b6115cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180611a5c602e913960400191505060405180910390fd5b600154610100900460ff161580156115f7576001805460ff1961ff00199091166101001716811790555b6001600160a01b038216611652576040805162461bcd60e51b815260206004820152601760248201527f536368656d65206d757374206861766520617661746172000000000000000000604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b038416179055801561167f576001805461ff00191690555b5050565b60006113c46001600160d81b03808516600160281b9081029185160261148f565b600054156116f9576040805162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207365742061677265656d656e742074776963650000000000604482015290519081900360640190fd5b600055565b6000818484111561178d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175257818101518382015260200161173a565b50505050905090810190601f16801561177f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6117a7826001600160a01b0316611953565b6117f8576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106118365780518252601f199092019160209182019101611817565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611898576040519150601f19603f3d011682016040523d82523d6000602084013e61189d565b606091505b5091509150816118f4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156115655780806020019051602081101561191057600080fd5b50516115655760405162461bcd60e51b815260040180806020018281038252602a815260200180611b96602a913960400191505060405180910390fd5b303b1590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061198757508115155b94935050505056fe5f6261746368496e646578546f4c6f636b496e202b205f706572696f6420657863656564206d617820616c6c6f77656420626174636865735f62617463686573496e646578436170203e20424154434845535f494e4445585f484152444341505f726570526577617264436f6e7374422073686f756c64206265203c20313030306c6f636b696e6720706572696f64206578636565647320746865206d6178696d756d20616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65646c6f636b696e67206973206e6f7420656e61626c656420796574202869742073746172747320617420737461727454696d6529726570526577617264436f6e7374412073686f756c64206265203c205f72657075746174696f6e52657761726453656e646572206d7573742073656e64207468652072696768742061677265656d656e74486173685f706572696f642065786365656420746865206d6178696d756d20616c6c6f7765646d61784c6f636b696e67426174636865732073686f756c64206265203c3d204d41585f4c4f434b494e475f424154434845535f484152444341505f657874656e64506572696f6420657863656564206d617820616c6c6f77656420626174636865735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645f72656465656d456e61626c6554696d65203e3d205f737461727454696d652b5f626174636854696d655f6261746368496e646578546f4c6f636b496e206d75737420626520746865206f6e6520636f72726573706f6e64696e6720746f207468652063757272656e74206f6e65a2646970667358221220e52f7aa4c2e4c8b54c8740500c62c43c31ec137f31cf63e0d9e6e6318f03083564736f6c634300060a0033"
}