Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Vow
- Optimization enabled
- true
- Compiler version
- v0.6.12+commit.27d51765
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2025-04-18T14:04:08.822340Z
Constructor Arguments
0x00000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b67000000000000000000000000f0dbe81a887a43859bfed59fe44bd3d5d3523d2d000000000000000000000000a46b5e615b3c5a754538252ff4cf6420b1452e86
Arg [0] (address) : 0x16ca93f2f65d5495c874109fff38d11d39850b67
Arg [1] (address) : 0xf0dbe81a887a43859bfed59fe44bd3d5d3523d2d
Arg [2] (address) : 0xa46b5e615b3c5a754538252ff4cf6420b1452e86
Contract source code
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.6.12;
interface FlopLike {
function kick(address gal, uint lot, uint bid) external returns (uint);
function cage() external;
function live() external returns (uint);
}
interface FlapLike {
function kick(uint lot, uint bid) external returns (uint);
function cage(uint) external;
function live() external returns (uint);
}
interface VatLike {
function dai (address) external view returns (uint);
function sin (address) external view returns (uint);
function heal(uint256) external;
function hope(address) external;
function nope(address) external;
}
contract Vow {
// --- Auth ---
mapping (address => uint) public wards;
function rely(address usr) external auth { require(live == 1, "Vow/not-live"); wards[usr] = 1; emit Rely(usr); }
function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); }
modifier auth {
require(wards[msg.sender] == 1, "Vow/not-authorized");
_;
}
// --- Data ---
VatLike public vat;
FlapLike public flapper;
FlopLike public flopper;
mapping (uint256 => uint256) public sin;
uint256 public Sin;
uint256 public Ash;
uint256 public wait;
uint256 public dump;
uint256 public sump;
uint256 public bump;
uint256 public hump;
uint256 public live;
// --- Events ---
event Rely(address indexed usr);
event Deny(address indexed usr);
event File(bytes32 indexed what, uint data);
event FileAddress(bytes32 indexed what, address data);
event Fess(uint256 indexed era, uint256 tab);
event Flog(uint256 indexed era, uint256 tab);
event Heal(uint256 rad);
event Kiss(uint256 rad);
event Flop(uint256 indexed id, uint256 lot, uint256 bid);
event Flap(uint256 indexed id, uint256 lot);
event Cage();
// --- Init ---
constructor(address vat_, address flapper_, address flopper_) public {
wards[msg.sender] = 1;
vat = VatLike(vat_);
flapper = FlapLike(flapper_);
flopper = FlopLike(flopper_);
vat.hope(flapper_);
live = 1;
}
// --- Math ---
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x);
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x);
}
function min(uint x, uint y) internal pure returns (uint z) {
return x <= y ? x : y;
}
// --- Administration ---
function file(bytes32 what, uint data) external auth {
if (what == "wait") wait = data;
else if (what == "bump") bump = data;
else if (what == "sump") sump = data;
else if (what == "dump") dump = data;
else if (what == "hump") hump = data;
else revert("Vow/file-unrecognized-param");
emit File(what, data);
}
function file(bytes32 what, address data) external auth {
if (what == "flapper") {
vat.nope(address(flapper));
flapper = FlapLike(data);
vat.hope(data);
}
else if (what == "flopper") flopper = FlopLike(data);
else revert("Vow/file-unrecognized-param");
emit FileAddress(what, data);
}
// Push to debt-queue
function fess(uint tab) external auth {
sin[now] = add(sin[now], tab);
Sin = add(Sin, tab);
emit Fess(now, tab);
}
// Pop from debt-queue
function flog(uint era) external {
require(add(era, wait) <= now, "Vow/wait-not-finished");
uint tab = sin[era];
Sin = sub(Sin, tab);
sin[era] = 0;
emit Flog(era, tab);
}
// Debt settlement
function heal(uint rad) external {
require(rad <= vat.dai(address(this)), "Vow/insufficient-surplus");
require(rad <= sub(sub(vat.sin(address(this)), Sin), Ash), "Vow/insufficient-debt");
vat.heal(rad);
emit Heal(rad);
}
function kiss(uint rad) external {
require(rad <= Ash, "Vow/not-enough-ash");
require(rad <= vat.dai(address(this)), "Vow/insufficient-surplus");
Ash = sub(Ash, rad);
vat.heal(rad);
emit Kiss(rad);
}
// Debt auction
function flop() external returns (uint id) {
require(sump <= sub(sub(vat.sin(address(this)), Sin), Ash), "Vow/insufficient-debt");
require(vat.dai(address(this)) == 0, "Vow/surplus-not-zero");
Ash = add(Ash, sump);
id = flopper.kick(address(this), dump, sump);
emit Flop(id, dump, sump);
}
// Surplus auction
function flap() external returns (uint id) {
require(vat.dai(address(this)) >= add(add(vat.sin(address(this)), bump), hump), "Vow/insufficient-surplus");
require(sub(sub(vat.sin(address(this)), Sin), Ash) == 0, "Vow/debt-not-zero");
id = flapper.kick(bump, 0);
emit Flap(id, bump);
}
function cage() external auth {
require(live == 1, "Vow/not-live");
live = 0;
Sin = 0;
Ash = 0;
flapper.cage(vat.dai(address(flapper)));
flopper.cage();
vat.heal(min(vat.dai(address(this)), vat.sin(address(this))));
emit Cage();
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"vat_","internalType":"address"},{"type":"address","name":"flapper_","internalType":"address"},{"type":"address","name":"flopper_","internalType":"address"}]},{"type":"event","name":"Cage","inputs":[],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Fess","inputs":[{"type":"uint256","name":"era","internalType":"uint256","indexed":true},{"type":"uint256","name":"tab","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"uint256","name":"data","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FileAddress","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"address","name":"data","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Flap","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Flog","inputs":[{"type":"uint256","name":"era","internalType":"uint256","indexed":true},{"type":"uint256","name":"tab","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Flop","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Heal","inputs":[{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Kiss","inputs":[{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"Ash","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"Sin","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"bump","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"dump","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"fess","inputs":[{"type":"uint256","name":"tab","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"uint256","name":"data","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"address","name":"data","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"id","internalType":"uint256"}],"name":"flap","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract FlapLike"}],"name":"flapper","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"flog","inputs":[{"type":"uint256","name":"era","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"id","internalType":"uint256"}],"name":"flop","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract FlopLike"}],"name":"flopper","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"heal","inputs":[{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"hump","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"kiss","inputs":[{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"live","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sin","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sump","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract VatLike"}],"name":"vat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wait","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b506040516117db3803806117db8339818101604052606081101561003357600080fd5b5080516020808301516040938401513360009081529283905284832060019081905580546001600160a01b038087166001600160a01b031992831617928390556002805482871690841681179091556003805483871694169390931790925587516328ec8bf160e21b815260048101929092529651959693959294919093169263a3b22fc4926024808301939282900301818387803b1580156100d557600080fd5b505af11580156100e9573d6000803e3d6000fd5b50506001600c5550505050506116d7806101046000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146102bc578063d0adc35f146102d9578063d4e8be83146102e1578063d7ee674b1461030d578063e43305451461032a578063f37ac61c1461033257610158565b8063697efb781461023b578063957aa58c146102585780639c52a7f114610260578063bbbb0d7b14610286578063bf353dbb1461028e578063c349d362146102b457610158565b80634081d73a116101155780634081d73a146101ed5780635ca0d723146101f557806364bd7013146101fd57806365fae35e1461020557806368110b2f1461022b578063692450091461023357610158565b80630e01198b1461015d5780631b8e8cfa146101775780632506855a1461017f57806329ae81141461019e5780632a1d2b3c146101c157806336569e77146101c9575b600080fd5b61016561034f565b60408051918252519081900360200190f35b61016561063f565b61019c6004803603602081101561019557600080fd5b5035610645565b005b61019c600480360360408110156101b457600080fd5b5080359060200135610802565b61016561095f565b6101d1610965565b604080516001600160a01b039092168252519081900360200190f35b6101d1610974565b6101d1610983565b610165610992565b61019c6004803603602081101561021b57600080fd5b50356001600160a01b0316610998565b610165610a7c565b61019c610a82565b61019c6004803603602081101561025157600080fd5b5035610de9565b610165610eb5565b61019c6004803603602081101561027657600080fd5b50356001600160a01b0316610ebb565b610165610f58565b610165600480360360208110156102a457600080fd5b50356001600160a01b03166111a4565b6101656111b6565b610165600480360360208110156102d257600080fd5b50356111bc565b6101656111ce565b61019c600480360360408110156102f757600080fd5b50803590602001356001600160a01b03166111d4565b61019c6004803603602081101561032357600080fd5b5035611399565b61016561145b565b61019c6004803603602081101561034857600080fd5b5035611461565b6001546040805163782c909560e11b815230600482015290516000926103e1926103d9926001600160a01b039092169163f059212a91602480820192602092909190829003018186803b1580156103a557600080fd5b505afa1580156103b9573d6000803e3d6000fd5b505050506040513d60208110156103cf57600080fd5b5051600a54611662565b600b54611662565b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b15801561042c57600080fd5b505afa158015610440573d6000803e3d6000fd5b505050506040513d602081101561045657600080fd5b505110156104a6576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b6001546040805163782c909560e11b815230600482015290516105359261052d926001600160a01b039091169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b505afa15801561050d573d6000803e3d6000fd5b505050506040513d602081101561052357600080fd5b5051600554611678565b600654611678565b1561057b576040805162461bcd60e51b8152602060048201526011602482015270566f772f646562742d6e6f742d7a65726f60781b604482015290519081900360640190fd5b600254600a546040805163ca40c41960e01b8152600481019290925260006024830181905290516001600160a01b039093169263ca40c419926044808201936020939283900390910190829087803b1580156105d657600080fd5b505af11580156105ea573d6000803e3d6000fd5b505050506040513d602081101561060057600080fd5b5051600a54604080519182525191925082917faa4293c9990158fe97be00b7fc80439694e32756d61a34e36d35803db62ac26a9181900360200190a290565b600b5481565b600654811115610691576040805162461bcd60e51b81526020600482015260126024820152710acdeee5edcdee85acadcdeeaced05ac2e6d60731b604482015290519081900360640190fd5b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d602081101561070657600080fd5b5051811115610757576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b61076360065482611678565b60065560015460408051633cdeb18760e21b81526004810184905290516001600160a01b039092169163f37ac61c9160248082019260009290919082900301818387803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b50506040805184815290517fdf1d0254f949dd4607095c8a45ed43a96d548776dbb1d6e8347513d07b109e9b9350908190036020019150a150565b3360009081526020819052604090205460011461085b576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b81631dd85a5d60e21b1415610874576007819055610925565b8163062756d760e41b141561088d57600a819055610925565b8163073756d760e41b14156108a6576009819055610925565b8163064756d760e41b14156108bf576008819055610925565b8163068756d760e41b14156108d857600b819055610925565b6040805162461bcd60e51b815260206004820152601b60248201527f566f772f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b60065481565b6001546001600160a01b031681565b6003546001600160a01b031681565b6002546001600160a01b031681565b60075481565b336000908152602081905260409020546001146109f1576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600c54600114610a37576040805162461bcd60e51b815260206004820152600c60248201526b566f772f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b600a5481565b33600090815260208190526040902054600114610adb576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600c54600114610b21576040805162461bcd60e51b815260206004820152600c60248201526b566f772f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6000600c819055600581905560065560025460015460408051633612d9a360e11b81526001600160a01b03938416600482018190529151919363a2f91af2931691636c25b34691602480820192602092909190829003018186803b158015610b8857600080fd5b505afa158015610b9c573d6000803e3d6000fd5b505050506040513d6020811015610bb257600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015610bf257600080fd5b505af1158015610c06573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b505060015460408051633612d9a360e11b815230600482015290516001600160a01b03909216935063f37ac61c9250610d70918491636c25b346916024808301926020929190829003018186803b158015610cc857600080fd5b505afa158015610cdc573d6000803e3d6000fd5b505050506040513d6020811015610cf257600080fd5b50516001546040805163782c909560e11b815230600482015290516001600160a01b039092169163f059212a91602480820192602092909190829003018186803b158015610d3f57600080fd5b505afa158015610d53573d6000803e3d6000fd5b505050506040513d6020811015610d6957600080fd5b5051611688565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b50506040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda925060009150a1565b33600090815260208190526040902054600114610e42576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b42600090815260046020526040902054610e5c9082611662565b42600090815260046020526040902055600554610e799082611662565b60055560408051828152905142917fec6aabc8ebabf9cf9e97376009d8c9a2d2807697fead1b96074a1e786276fb08919081900360200190a250565b600c5481565b33600090815260208190526040902054600114610f14576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001546040805163782c909560e11b81523060048201529051600092610fae9261052d926001600160a01b039092169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b6009541115610ffc576040805162461bcd60e51b8152602060048201526015602482015274159bddcbda5b9cdd59999a58da595b9d0b5919589d605a1b604482015290519081900360640190fd5b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d602081101561107157600080fd5b5051156110bc576040805162461bcd60e51b8152602060048201526014602482015273566f772f737572706c75732d6e6f742d7a65726f60601b604482015290519081900360640190fd5b6110ca600654600954611662565b60065560035460085460095460408051632dfa734960e21b815230600482015260248101939093526044830191909152516001600160a01b039092169163b7e9cd24916064808201926020929091908290030181600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b5051600854600954604080519283526020830191909152805192935083927f71220da0d6a18fdcb119b93d05387ffc264a73b9a1fda95000aeeae4ca846a5f9281900390910190a290565b60006020819052908152604090205481565b60095481565b60046020526000908152604090205481565b60055481565b3360009081526020819052604090205460011461122d576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b8166333630b83832b960c91b14156113285760015460025460408051636e26907d60e11b81526001600160a01b0392831660048201529051919092169163dc4d20fa91602480830192600092919082900301818387803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b5050600280546001600160a01b0319166001600160a01b03858116918217909255600154604080516328ec8bf160e21b81526004810193909352519216935063a3b22fc4925060248082019260009290919082900301818387803b15801561130b57600080fd5b505af115801561131f573d6000803e3d6000fd5b50505050611356565b8166333637b83832b960c91b14156108d857600380546001600160a01b0319166001600160a01b0383161790555b604080516001600160a01b0383168152905183917f41a50316b758972a692a69178de3d99c3138a652f5213364ee8eff829f22048a919081900360200190a25050565b426113a682600754611662565b11156113f1576040805162461bcd60e51b8152602060048201526015602482015274159bddcbddd85a5d0b5b9bdd0b599a5b9a5cda1959605a1b604482015290519081900360640190fd5b60008181526004602052604090205460055461140d9082611678565b6005556000828152600460209081526040808320929092558151838152915184927f77f6d637bdb297972e16e03f99afbda73b21a36342b99e24dca178d404e6ab9f92908290030190a25050565b60085481565b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d60208110156114d657600080fd5b5051811115611527576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b6001546040805163782c909560e11b8152306004820152905161157a9261052d926001600160a01b039091169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b8111156115c6576040805162461bcd60e51b8152602060048201526015602482015274159bddcbda5b9cdd59999a58da595b9d0b5919589d605a1b604482015290519081900360640190fd5b60015460408051633cdeb18760e21b81526004810184905290516001600160a01b039092169163f37ac61c9160248082019260009290919082900301818387803b15801561161357600080fd5b505af1158015611627573d6000803e3d6000fd5b50506040805184815290517f917d6982889419f491488c036c2e6abe788b07222064ab462158ec64ca2c4db79350908190036020019150a150565b8082018281101561167257600080fd5b92915050565b8082038281111561167257600080fd5b600081831115611698578161169a565b825b939250505056fea2646970667358221220613241414d1d231f68ec33d7175d2238693495b70e01836165712646fe427b5c64736f6c634300060c003300000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b67000000000000000000000000f0dbe81a887a43859bfed59fe44bd3d5d3523d2d000000000000000000000000a46b5e615b3c5a754538252ff4cf6420b1452e86
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063697efb78116100c3578063cb5cc1091161007c578063cb5cc109146102bc578063d0adc35f146102d9578063d4e8be83146102e1578063d7ee674b1461030d578063e43305451461032a578063f37ac61c1461033257610158565b8063697efb781461023b578063957aa58c146102585780639c52a7f114610260578063bbbb0d7b14610286578063bf353dbb1461028e578063c349d362146102b457610158565b80634081d73a116101155780634081d73a146101ed5780635ca0d723146101f557806364bd7013146101fd57806365fae35e1461020557806368110b2f1461022b578063692450091461023357610158565b80630e01198b1461015d5780631b8e8cfa146101775780632506855a1461017f57806329ae81141461019e5780632a1d2b3c146101c157806336569e77146101c9575b600080fd5b61016561034f565b60408051918252519081900360200190f35b61016561063f565b61019c6004803603602081101561019557600080fd5b5035610645565b005b61019c600480360360408110156101b457600080fd5b5080359060200135610802565b61016561095f565b6101d1610965565b604080516001600160a01b039092168252519081900360200190f35b6101d1610974565b6101d1610983565b610165610992565b61019c6004803603602081101561021b57600080fd5b50356001600160a01b0316610998565b610165610a7c565b61019c610a82565b61019c6004803603602081101561025157600080fd5b5035610de9565b610165610eb5565b61019c6004803603602081101561027657600080fd5b50356001600160a01b0316610ebb565b610165610f58565b610165600480360360208110156102a457600080fd5b50356001600160a01b03166111a4565b6101656111b6565b610165600480360360208110156102d257600080fd5b50356111bc565b6101656111ce565b61019c600480360360408110156102f757600080fd5b50803590602001356001600160a01b03166111d4565b61019c6004803603602081101561032357600080fd5b5035611399565b61016561145b565b61019c6004803603602081101561034857600080fd5b5035611461565b6001546040805163782c909560e11b815230600482015290516000926103e1926103d9926001600160a01b039092169163f059212a91602480820192602092909190829003018186803b1580156103a557600080fd5b505afa1580156103b9573d6000803e3d6000fd5b505050506040513d60208110156103cf57600080fd5b5051600a54611662565b600b54611662565b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b15801561042c57600080fd5b505afa158015610440573d6000803e3d6000fd5b505050506040513d602081101561045657600080fd5b505110156104a6576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b6001546040805163782c909560e11b815230600482015290516105359261052d926001600160a01b039091169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b505afa15801561050d573d6000803e3d6000fd5b505050506040513d602081101561052357600080fd5b5051600554611678565b600654611678565b1561057b576040805162461bcd60e51b8152602060048201526011602482015270566f772f646562742d6e6f742d7a65726f60781b604482015290519081900360640190fd5b600254600a546040805163ca40c41960e01b8152600481019290925260006024830181905290516001600160a01b039093169263ca40c419926044808201936020939283900390910190829087803b1580156105d657600080fd5b505af11580156105ea573d6000803e3d6000fd5b505050506040513d602081101561060057600080fd5b5051600a54604080519182525191925082917faa4293c9990158fe97be00b7fc80439694e32756d61a34e36d35803db62ac26a9181900360200190a290565b600b5481565b600654811115610691576040805162461bcd60e51b81526020600482015260126024820152710acdeee5edcdee85acadcdeeaced05ac2e6d60731b604482015290519081900360640190fd5b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d602081101561070657600080fd5b5051811115610757576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b61076360065482611678565b60065560015460408051633cdeb18760e21b81526004810184905290516001600160a01b039092169163f37ac61c9160248082019260009290919082900301818387803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b50506040805184815290517fdf1d0254f949dd4607095c8a45ed43a96d548776dbb1d6e8347513d07b109e9b9350908190036020019150a150565b3360009081526020819052604090205460011461085b576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b81631dd85a5d60e21b1415610874576007819055610925565b8163062756d760e41b141561088d57600a819055610925565b8163073756d760e41b14156108a6576009819055610925565b8163064756d760e41b14156108bf576008819055610925565b8163068756d760e41b14156108d857600b819055610925565b6040805162461bcd60e51b815260206004820152601b60248201527f566f772f66696c652d756e7265636f676e697a65642d706172616d0000000000604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b60065481565b6001546001600160a01b031681565b6003546001600160a01b031681565b6002546001600160a01b031681565b60075481565b336000908152602081905260409020546001146109f1576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600c54600114610a37576040805162461bcd60e51b815260206004820152600c60248201526b566f772f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b600a5481565b33600090815260208190526040902054600114610adb576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b600c54600114610b21576040805162461bcd60e51b815260206004820152600c60248201526b566f772f6e6f742d6c69766560a01b604482015290519081900360640190fd5b6000600c819055600581905560065560025460015460408051633612d9a360e11b81526001600160a01b03938416600482018190529151919363a2f91af2931691636c25b34691602480820192602092909190829003018186803b158015610b8857600080fd5b505afa158015610b9c573d6000803e3d6000fd5b505050506040513d6020811015610bb257600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015610bf257600080fd5b505af1158015610c06573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b505060015460408051633612d9a360e11b815230600482015290516001600160a01b03909216935063f37ac61c9250610d70918491636c25b346916024808301926020929190829003018186803b158015610cc857600080fd5b505afa158015610cdc573d6000803e3d6000fd5b505050506040513d6020811015610cf257600080fd5b50516001546040805163782c909560e11b815230600482015290516001600160a01b039092169163f059212a91602480820192602092909190829003018186803b158015610d3f57600080fd5b505afa158015610d53573d6000803e3d6000fd5b505050506040513d6020811015610d6957600080fd5b5051611688565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610da657600080fd5b505af1158015610dba573d6000803e3d6000fd5b50506040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda925060009150a1565b33600090815260208190526040902054600114610e42576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b42600090815260046020526040902054610e5c9082611662565b42600090815260046020526040902055600554610e799082611662565b60055560408051828152905142917fec6aabc8ebabf9cf9e97376009d8c9a2d2807697fead1b96074a1e786276fb08919081900360200190a250565b600c5481565b33600090815260208190526040902054600114610f14576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001546040805163782c909560e11b81523060048201529051600092610fae9261052d926001600160a01b039092169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b6009541115610ffc576040805162461bcd60e51b8152602060048201526015602482015274159bddcbda5b9cdd59999a58da595b9d0b5919589d605a1b604482015290519081900360640190fd5b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d602081101561107157600080fd5b5051156110bc576040805162461bcd60e51b8152602060048201526014602482015273566f772f737572706c75732d6e6f742d7a65726f60601b604482015290519081900360640190fd5b6110ca600654600954611662565b60065560035460085460095460408051632dfa734960e21b815230600482015260248101939093526044830191909152516001600160a01b039092169163b7e9cd24916064808201926020929091908290030181600087803b15801561112f57600080fd5b505af1158015611143573d6000803e3d6000fd5b505050506040513d602081101561115957600080fd5b5051600854600954604080519283526020830191909152805192935083927f71220da0d6a18fdcb119b93d05387ffc264a73b9a1fda95000aeeae4ca846a5f9281900390910190a290565b60006020819052908152604090205481565b60095481565b60046020526000908152604090205481565b60055481565b3360009081526020819052604090205460011461122d576040805162461bcd60e51b8152602060048201526012602482015271159bddcbdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b8166333630b83832b960c91b14156113285760015460025460408051636e26907d60e11b81526001600160a01b0392831660048201529051919092169163dc4d20fa91602480830192600092919082900301818387803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b5050600280546001600160a01b0319166001600160a01b03858116918217909255600154604080516328ec8bf160e21b81526004810193909352519216935063a3b22fc4925060248082019260009290919082900301818387803b15801561130b57600080fd5b505af115801561131f573d6000803e3d6000fd5b50505050611356565b8166333637b83832b960c91b14156108d857600380546001600160a01b0319166001600160a01b0383161790555b604080516001600160a01b0383168152905183917f41a50316b758972a692a69178de3d99c3138a652f5213364ee8eff829f22048a919081900360200190a25050565b426113a682600754611662565b11156113f1576040805162461bcd60e51b8152602060048201526015602482015274159bddcbddd85a5d0b5b9bdd0b599a5b9a5cda1959605a1b604482015290519081900360640190fd5b60008181526004602052604090205460055461140d9082611678565b6005556000828152600460209081526040808320929092558151838152915184927f77f6d637bdb297972e16e03f99afbda73b21a36342b99e24dca178d404e6ab9f92908290030190a25050565b60085481565b60015460408051633612d9a360e11b815230600482015290516001600160a01b0390921691636c25b34691602480820192602092909190829003018186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d60208110156114d657600080fd5b5051811115611527576040805162461bcd60e51b8152602060048201526018602482015277566f772f696e73756666696369656e742d737572706c757360401b604482015290519081900360640190fd5b6001546040805163782c909560e11b8152306004820152905161157a9261052d926001600160a01b039091169163f059212a91602480820192602092909190829003018186803b1580156104f957600080fd5b8111156115c6576040805162461bcd60e51b8152602060048201526015602482015274159bddcbda5b9cdd59999a58da595b9d0b5919589d605a1b604482015290519081900360640190fd5b60015460408051633cdeb18760e21b81526004810184905290516001600160a01b039092169163f37ac61c9160248082019260009290919082900301818387803b15801561161357600080fd5b505af1158015611627573d6000803e3d6000fd5b50506040805184815290517f917d6982889419f491488c036c2e6abe788b07222064ab462158ec64ca2c4db79350908190036020019150a150565b8082018281101561167257600080fd5b92915050565b8082038281111561167257600080fd5b600081831115611698578161169a565b825b939250505056fea2646970667358221220613241414d1d231f68ec33d7175d2238693495b70e01836165712646fe427b5c64736f6c634300060c0033