{
  "contractName": "TokenElection",
  "abi": [
    {
      "constant": false,
      "inputs": [],
      "name": "activate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "gateway",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "b",
          "type": "address"
        }
      ],
      "name": "ballotExists",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "voteToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "electionStartTime",
          "type": "uint256"
        },
        {
          "name": "electionEndTime",
          "type": "uint256"
        }
      ],
      "name": "setTimes",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "isAdmin",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "electionPhase",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "votes",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "endTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "abort",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "createdBy",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "voteId",
          "type": "bytes32"
        },
        {
          "name": "vote",
          "type": "string"
        },
        {
          "name": "passphrase",
          "type": "string"
        },
        {
          "name": "jti",
          "type": "bytes32"
        }
      ],
      "name": "castVote",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "entry",
          "type": "bytes32"
        }
      ],
      "name": "addAuthorized",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "close",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "acct",
          "type": "address"
        }
      ],
      "name": "setVoteOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "electionType",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "privateKey",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "election",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "removeSelf",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "entry",
          "type": "bytes32"
        }
      ],
      "name": "isAuthorized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "publicKey",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "key",
          "type": "string"
        }
      ],
      "name": "setPublicKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "entry",
          "type": "bytes32"
        }
      ],
      "name": "removeAuthorized",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "startTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "withdrawVotes",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getVoteAt",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenAddress",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isLocked",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unlock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getBallotCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "balanceTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "metadataLocation",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "allowVoteUpdates",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isClosed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "voteId",
          "type": "bytes32"
        },
        {
          "name": "vote",
          "type": "string"
        },
        {
          "name": "passphrase",
          "type": "string"
        },
        {
          "name": "jti",
          "type": "bytes32"
        }
      ],
      "name": "updateVote",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "b",
          "type": "address"
        }
      ],
      "name": "removeBallot",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "b",
          "type": "address"
        }
      ],
      "name": "getBallotIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "deductVote",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "key",
          "type": "string"
        }
      ],
      "name": "setPrivateKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getVoteCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "withdrawAllVotes",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "checkConfig",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "lock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "b",
          "type": "address"
        }
      ],
      "name": "addBallot",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getBallot",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "hashedUserId",
          "type": "bytes32"
        },
        {
          "name": "allowanceAddress",
          "type": "address"
        },
        {
          "name": "ownerOfAllowance",
          "type": "address"
        },
        {
          "name": "allowUpdates",
          "type": "bool"
        },
        {
          "name": "revealerAddress",
          "type": "address"
        },
        {
          "name": "location",
          "type": "string"
        },
        {
          "name": "gatewayAddress",
          "type": "address"
        },
        {
          "name": "autoActivate",
          "type": "bool"
        },
        {
          "name": "erc20Token",
          "type": "address"
        },
        {
          "name": "balanceTimestamp",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "KeyReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "voteId",
          "type": "bytes32"
        }
      ],
      "name": "Vote",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "voteId",
          "type": "bytes32"
        }
      ],
      "name": "UpdateVote",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Closed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Activated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Aborted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Locked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unlocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    }
  ],
  "bytecode": "0x60606040526003805461ffff191690556012805460ff1916905534156200002557600080fd5b604051620025b9380380620025b983398101604052808051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805191906020018051919060200180519190602001805190602001909190505089898989898989600087878787878033898f308b336000806101000a815481600160a060020a030219169083600160a060020a031602179055506000600160a060020a031682600160a060020a031614158015620000ed5750600160a060020a03811615155b1515620000f957600080fd5b620001128364010000000062000e856200038282021704565b60098054600160a060020a0319908116600160a060020a0394851617909155600d805490911691831691909117905583166000908152600160208190526040909120805460ff1916909117905550600e81805162000175929160200190620006a3565b5050600f8054600160a060020a031916600160a060020a03939093169290921790915550620001b28564010000000062000382810262000e851704565b506012805461010060a860020a031916610100600160a060020a039586160217905560138054600160a060020a031916929093169190911760a060020a60ff02191674010000000000000000000000000000000000000000911515919091021790555060408051908101604052600581527f4241534943000000000000000000000000000000000000000000000000000000602082015260149080516200025e929160200190620006a3565b50620002783064010000000062001be5620003c282021704565b8015620002975762000297640100000000620008cf620004c082021704565b5050505050600160a060020a03851615159250620002b791505057600080fd5b620002d08264010000000062001e306200056d82021704565b1515620002dc57600080fd5b60408051908101604052600581527f544f4b454e0000000000000000000000000000000000000000000000000000006020820152601490805162000325929160200190620006a3565b5060178054600160a060020a031916600160a060020a0384161790554281106200034e57600080fd5b60188190558215620003725762000372640100000000620008cf620004c082021704565b5050505050505050505062000745565b6200039b3364010000000062000a8e6200057582021704565b1515620003a757600080fd5b6000908152600260205260409020805460ff19166001179055565b620003da640100000000620013bb620005c682021704565b158015620003fe5750600060038054610100900460ff1690811115620003fc57fe5b145b15156200040a57600080fd5b620004233364010000000062000a8e6200057582021704565b15156200042f57600080fd5b73__AddressSet____________________________63f9802f856004836040517c010000000000000000000000000000000000000000000000000000000063ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b1515620004a857600080fd5b6102c65a03f41515620004ba57600080fd5b50505050565b620004d8640100000000620013bb620005c682021704565b158015620004fc5750600060038054610100900460ff1690811115620004fa57fe5b145b15156200050857600080fd5b620005213364010000000062000a8e6200057582021704565b15156200052d57600080fd5b6015541580156200053e5750601654155b1562000553574260158190556224ea00016016555b6200056b64010000000062001ced620005d082021704565b565b6000903b1190565b6000600160a060020a03821615801590620005c05750600054600160a060020a0383811691161480620005c05750600160a060020a03821660009081526001602052604090205460ff165b92915050565b60035460ff165b90565b620005e8640100000000620013bb620005c682021704565b1580156200060c5750600060038054610100900460ff16908111156200060a57fe5b145b15156200061857600080fd5b620006313364010000000062000a8e6200057582021704565b15156200063d57600080fd5b6200065564010000000062001ae66200069e82021704565b15156200066157600080fd5b6003805461ff0019166101001790557fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a1565b600190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e657805160ff191683800117855562000716565b8280016001018555821562000716579182015b8281111562000716578251825591602001919060010190620006f9565b506200072492915062000728565b5090565b620005cd91905b808211156200072457600081556001016200072f565b611e6480620007556000396000f3006060604052600436106102375763ffffffff60e060020a6000350416630f15f4c0811461023c578063116191b614610251578063138b1fa014610280578063160d66ae146102b35780631785f53c146102c657806322434836146102e557806324d7806c146102fe578063265050b61461031d5780632b38cd96146103545780633197cbb6146103e157806335a063b4146104065780633a5673a4146104195780634126ebe21461042c57806341af099d146104c657806343d726d6146104dc57806347beabd6146104ef5780634885c72a1461050e57806349da5a0f146105215780634b1d3ede146105345780635e898dac1461054757806362f4ed901461055a57806363ffab31146105705780636f6fc0771461058357806370480275146105d457806372e789b3146105f357806378e97925146106095780638da5cb5b1461061c578063961edb251461062f5780639cc8f2b3146106455780639d76ea581461065b578063a4e2d6341461066e578063a69df4b514610681578063b474149514610694578063b752619b146106a7578063b86901af146106ba578063bf41bf36146106cd578063c2b6b58c146106e0578063d6807a5c146106f3578063d71c67721461078d578063db30eafb146107ac578063de61a732146107cb578063e0d4f017146107de578063e7b3387c1461082f578063ee51d4e114610842578063f098fe4714610855578063f2fde38b14610868578063f83d08ba14610887578063f8c74afa1461089a578063f9d5ee75146108b9575b600080fd5b341561024757600080fd5b61024f6108cf565b005b341561025c57600080fd5b610264610946565b604051600160a060020a03909116815260200160405180910390f35b341561028b57600080fd5b61029f600160a060020a0360043516610955565b604051901515815260200160405180910390f35b34156102be57600080fd5b6102646109de565b34156102d157600080fd5b61024f600160a060020a03600435166109f2565b34156102f057600080fd5b61024f600435602435610a2e565b341561030957600080fd5b61029f600160a060020a0360043516610a8e565b341561032857600080fd5b610330610add565b6040518082600381111561034057fe5b60ff16815260200191505060405180910390f35b341561035f57600080fd5b61036a600435610aeb565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103a657808201518382015260200161038e565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103ec57600080fd5b6103f4610b9b565b60405190815260200160405180910390f35b341561041157600080fd5b61024f610ba1565b341561042457600080fd5b61036a610bf2565b341561043757600080fd5b61024f600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505093359350610c5d92505050565b34156104d157600080fd5b61024f600435610e85565b34156104e757600080fd5b61024f610eb4565b34156104fa57600080fd5b61024f600160a060020a0360043516610f3a565b341561051957600080fd5b61036a610f7d565b341561052c57600080fd5b61036a610fe8565b341561053f57600080fd5b610264611053565b341561055257600080fd5b61024f611062565b341561056557600080fd5b61029f600435611098565b341561057b57600080fd5b61036a6110ad565b341561058e57600080fd5b61024f60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061111895505050505050565b34156105df57600080fd5b61024f600160a060020a036004351661114a565b34156105fe57600080fd5b61024f60043561118c565b341561061457600080fd5b6103f46111b8565b341561062757600080fd5b6102646111be565b341561063a57600080fd5b61024f6004356111cd565b341561065057600080fd5b61036a600435611271565b341561066657600080fd5b6102646113ac565b341561067957600080fd5b61029f6113bb565b341561068c57600080fd5b61024f6113c5565b341561069f57600080fd5b6103f4611422565b34156106b257600080fd5b6103f461149b565b34156106c557600080fd5b61036a6114a1565b34156106d857600080fd5b61029f61150c565b34156106eb57600080fd5b61029f61152d565b34156106fe57600080fd5b61024f600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935061154d92505050565b341561079857600080fd5b61024f600160a060020a0360043516611720565b34156107b757600080fd5b6103f4600160a060020a03600435166117df565b34156107d657600080fd5b61024f611848565b34156107e957600080fd5b61024f60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061192395505050505050565b341561083a57600080fd5b6103f4611981565b341561084d57600080fd5b61024f6119db565b341561086057600080fd5b61029f611ae6565b341561087357600080fd5b61024f600160a060020a0360043516611aeb565b341561089257600080fd5b61024f611b86565b34156108a557600080fd5b61024f600160a060020a0360043516611be5565b34156108c457600080fd5b610264600435611c8d565b6108d76113bb565b1580156108f95750600060038054610100900460ff16908111156108f757fe5b145b151561090457600080fd5b61090d33610a8e565b151561091857600080fd5b6015541580156109285750601654155b1561093c574260158190556224ea00016016555b610944611ced565b565b600d54600160a060020a031681565b600073__AddressSet____________________________63758241e0600484846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160206040518083038186803b15156109be57600080fd5b6102c65a03f415156109cf57600080fd5b50505060405180519392505050565b6012546101009004600160a060020a031681565b60005433600160a060020a03908116911614610a0d57600080fd5b600160a060020a03166000908152600160205260409020805460ff19169055565b610a366113bb565b158015610a585750600060038054610100900460ff1690811115610a5657fe5b145b1515610a6357600080fd5b610a6c33610a8e565b1515610a7757600080fd5b818111610a8357600080fd5b601591909155601655565b6000600160a060020a03821615801590610ad75750600054600160a060020a0383811691161480610ad75750600160a060020a03821660009081526001602052604090205460ff165b92915050565b600354610100900460ff1681565b600b6020528060005260406000206000915090508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b505050505081565b60165481565b610baa33610a8e565b1515610bb557600080fd5b6003805461ff0019166103001790557f72c874aeff0b183a56e2b79c71b46e1aed4dee5e09862134b8821ba2fddbf8bf60405160405180910390a1565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b610c656113bb565b158015610c875750600160038054610100900460ff1690811115610c8557fe5b145b1515610c9257600080fd5b600d5433600160a060020a03908116911614610cad57600080fd5b8373__NoRemovalBytes32Set___________________63bd4a0da160078360006040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b1515610d0d57600080fd5b6102c65a03f41515610d1e57600080fd5b5050506040518051159050610d3257600080fd5b6000828152600c6020526040902054829060ff1615610d5057600080fd5b6000838152600c602052604090819020805460ff1916600117905573__NoRemovalBytes32Set___________________9063bda02f009060079089905160e060020a63ffffffff85160281526004810192909252602482015260440160006040518083038186803b1515610dc357600080fd5b6102c65a03f41515610dd457600080fd5b5050506000868152600b60205260409020858051610df6929160200190611d86565b50600954600160a060020a031663de61a7326040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610e3657600080fd5b6102c65a03f11515610e4757600080fd5b5050507fe071651fdb9485bc1f9dbd3312c8a999c04ad7a5fef33ee1036e1fc709c4da4f8660405190815260200160405180910390a1505050505050565b610e8e33610a8e565b1515610e9957600080fd5b6000908152600260205260409020805460ff19166001179055565b610ebc6113bb565b158015610ede5750600160038054610100900460ff1690811115610edc57fe5b145b1515610ee957600080fd5b610ef233610a8e565b1515610efd57600080fd5b6003805461ff0019166102001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1565b610f4333610a8e565b1515610f4e57600080fd5b6013805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b60118054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b600954600160a060020a031681565b61106b33610a8e565b151561107657600080fd5b600160a060020a0333166000908152600160205260409020805460ff19169055565b60009081526002602052604090205460ff1690565b60108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b600f5433600160a060020a0390811691161461113357600080fd5b6010818051611146929160200190611d86565b5050565b60005433600160a060020a0390811691161461116557600080fd5b600160a060020a03166000908152600160208190526040909120805460ff19169091179055565b61119533610a8e565b15156111a057600080fd5b6000908152600260205260409020805460ff19169055565b60155481565b600054600160a060020a031681565b60135433600160a060020a039081169116146111e857600080fd5b601254601354600160a060020a0361010090920482169163a9059cbb91168360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561125357600080fd5b6102c65a03f1151561126457600080fd5b5050506040518051505050565b611279611e04565b600b600073__NoRemovalBytes32Set___________________637a3d376c600786846040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b15156112db57600080fd5b6102c65a03f415156112ec57600080fd5b50505060405180519050600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a05780601f10611375576101008083540402835291602001916113a0565b820191906000526020600020905b81548152906001019060200180831161138357829003601f168201915b50505050509050919050565b601754600160a060020a031681565b60035460ff165b90565b6113ce33610a8e565b15156113d957600080fd5b60035460ff1615156113ea57600080fd5b6003805460ff191690557f19aad37188a1d3921e29eb3c66acf43d81975e107cb650d58cca878627955fd660405160405180910390a1565b600073__AddressSet____________________________63913aa6cd6004836040516020015260405160e060020a63ffffffff8416028152600481019190915260240160206040518083038186803b151561147c57600080fd5b6102c65a03f4151561148d57600080fd5b505050604051805191505090565b60185481565b600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b60135474010000000000000000000000000000000000000000900460ff1681565b6000600260038054610100900460ff169081111561154757fe5b14905090565b6115556113bb565b1580156115775750600160038054610100900460ff169081111561157557fe5b145b151561158257600080fd5b600d5433600160a060020a0390811691161461159d57600080fd5b600954600160a060020a031663bf41bf366000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115e557600080fd5b6102c65a03f115156115f657600080fd5b50505060405180519050151561160b57600080fd5b6000818152600c6020526040902054819060ff161561162957600080fd5b73__NoRemovalBytes32Set___________________63bd4a0da160078760006040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b151561168857600080fd5b6102c65a03f4151561169957600080fd5b5050506040518051905015156116ae57600080fd5b6000828152600c60209081526040808320805460ff19166001179055878352600b90915290208480516116e5929160200190611d86565b507fb76baefd7e249e81a2c6ab2dd1692b4629b993e50c0f341cd9410ca6b0f3392e8560405190815260200160405180910390a15050505050565b6117286113bb565b15801561174a5750600060038054610100900460ff169081111561174857fe5b145b151561175557600080fd5b61175e33610a8e565b151561176957600080fd5b73__AddressSet____________________________63e134066a60048360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b15156117c857600080fd5b6102c65a03f415156117d957600080fd5b50505050565b600073__AddressSet____________________________6318c40249600484846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160206040518083038186803b15156109be57600080fd5b6118506113bb565b1580156118725750600160038054610100900460ff169081111561187057fe5b145b151561187d57600080fd5b601554612a2f1901421161189057600080fd5b601654612a300142106118a257600080fd5b60125460ff16156118b257600080fd5b6012805460ff191660011790819055600160a060020a03610100909104166365775d156040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561190357600080fd5b6102c65a03f1151561191457600080fd5b50506012805460ff1916905550565b600f5433600160a060020a0390811691161461193e57600080fd5b6011818051611951929160200190611d86565b507ff9d8c4f7f692590eaf6d41d6160024ffe0ce509fa752efcf47543eb851869cfb60405160405180910390a150565b600073__NoRemovalBytes32Set___________________6366b26fbf6007836040516020015260405160e060020a63ffffffff8416028152600481019190915260240160206040518083038186803b151561147c57600080fd5b60135433600160a060020a039081169116146119f657600080fd5b601254601354600160a060020a0361010090920482169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611a6257600080fd5b6102c65a03f11515611a7357600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ac957600080fd5b6102c65a03f11515611ada57600080fd5b50505060405180515050565b600190565b60005433600160a060020a03908116911614611b0657600080fd5b600160a060020a0381161515611b1b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b611b8f33610a8e565b1515611b9a57600080fd5b60035460ff1615611baa57600080fd5b6003805460ff191660011790557f0f2e5b6c72c6a4491efd919a9f9a409f324ef0708c11ee57d410c2cb06c0992b60405160405180910390a1565b611bed6113bb565b158015611c0f5750600060038054610100900460ff1690811115611c0d57fe5b145b1515611c1a57600080fd5b611c2333610a8e565b1515611c2e57600080fd5b73__AddressSet____________________________63f9802f8560048360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b15156117c857600080fd5b600073__AddressSet____________________________635c2125a7600484846040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b15156109be57600080fd5b611cf56113bb565b158015611d175750600060038054610100900460ff1690811115611d1557fe5b145b1515611d2257600080fd5b611d2b33610a8e565b1515611d3657600080fd5b611d3e611ae6565b1515611d4957600080fd5b6003805461ff0019166101001790557fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611e00929150611e16565b5090565b60206040519081016040526000815290565b6113c291905b80821115611e005760008155600101611e1c565b6000903b11905600a165627a7a723058206234ebd4226c3b505578059c736358f824c221d00150b75d499ae7120c37af7c0029",
  "deployedBytecode": "0x6060604052600436106102375763ffffffff60e060020a6000350416630f15f4c0811461023c578063116191b614610251578063138b1fa014610280578063160d66ae146102b35780631785f53c146102c657806322434836146102e557806324d7806c146102fe578063265050b61461031d5780632b38cd96146103545780633197cbb6146103e157806335a063b4146104065780633a5673a4146104195780634126ebe21461042c57806341af099d146104c657806343d726d6146104dc57806347beabd6146104ef5780634885c72a1461050e57806349da5a0f146105215780634b1d3ede146105345780635e898dac1461054757806362f4ed901461055a57806363ffab31146105705780636f6fc0771461058357806370480275146105d457806372e789b3146105f357806378e97925146106095780638da5cb5b1461061c578063961edb251461062f5780639cc8f2b3146106455780639d76ea581461065b578063a4e2d6341461066e578063a69df4b514610681578063b474149514610694578063b752619b146106a7578063b86901af146106ba578063bf41bf36146106cd578063c2b6b58c146106e0578063d6807a5c146106f3578063d71c67721461078d578063db30eafb146107ac578063de61a732146107cb578063e0d4f017146107de578063e7b3387c1461082f578063ee51d4e114610842578063f098fe4714610855578063f2fde38b14610868578063f83d08ba14610887578063f8c74afa1461089a578063f9d5ee75146108b9575b600080fd5b341561024757600080fd5b61024f6108cf565b005b341561025c57600080fd5b610264610946565b604051600160a060020a03909116815260200160405180910390f35b341561028b57600080fd5b61029f600160a060020a0360043516610955565b604051901515815260200160405180910390f35b34156102be57600080fd5b6102646109de565b34156102d157600080fd5b61024f600160a060020a03600435166109f2565b34156102f057600080fd5b61024f600435602435610a2e565b341561030957600080fd5b61029f600160a060020a0360043516610a8e565b341561032857600080fd5b610330610add565b6040518082600381111561034057fe5b60ff16815260200191505060405180910390f35b341561035f57600080fd5b61036a600435610aeb565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103a657808201518382015260200161038e565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103ec57600080fd5b6103f4610b9b565b60405190815260200160405180910390f35b341561041157600080fd5b61024f610ba1565b341561042457600080fd5b61036a610bf2565b341561043757600080fd5b61024f600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505093359350610c5d92505050565b34156104d157600080fd5b61024f600435610e85565b34156104e757600080fd5b61024f610eb4565b34156104fa57600080fd5b61024f600160a060020a0360043516610f3a565b341561051957600080fd5b61036a610f7d565b341561052c57600080fd5b61036a610fe8565b341561053f57600080fd5b610264611053565b341561055257600080fd5b61024f611062565b341561056557600080fd5b61029f600435611098565b341561057b57600080fd5b61036a6110ad565b341561058e57600080fd5b61024f60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061111895505050505050565b34156105df57600080fd5b61024f600160a060020a036004351661114a565b34156105fe57600080fd5b61024f60043561118c565b341561061457600080fd5b6103f46111b8565b341561062757600080fd5b6102646111be565b341561063a57600080fd5b61024f6004356111cd565b341561065057600080fd5b61036a600435611271565b341561066657600080fd5b6102646113ac565b341561067957600080fd5b61029f6113bb565b341561068c57600080fd5b61024f6113c5565b341561069f57600080fd5b6103f4611422565b34156106b257600080fd5b6103f461149b565b34156106c557600080fd5b61036a6114a1565b34156106d857600080fd5b61029f61150c565b34156106eb57600080fd5b61029f61152d565b34156106fe57600080fd5b61024f600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650509335935061154d92505050565b341561079857600080fd5b61024f600160a060020a0360043516611720565b34156107b757600080fd5b6103f4600160a060020a03600435166117df565b34156107d657600080fd5b61024f611848565b34156107e957600080fd5b61024f60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061192395505050505050565b341561083a57600080fd5b6103f4611981565b341561084d57600080fd5b61024f6119db565b341561086057600080fd5b61029f611ae6565b341561087357600080fd5b61024f600160a060020a0360043516611aeb565b341561089257600080fd5b61024f611b86565b34156108a557600080fd5b61024f600160a060020a0360043516611be5565b34156108c457600080fd5b610264600435611c8d565b6108d76113bb565b1580156108f95750600060038054610100900460ff16908111156108f757fe5b145b151561090457600080fd5b61090d33610a8e565b151561091857600080fd5b6015541580156109285750601654155b1561093c574260158190556224ea00016016555b610944611ced565b565b600d54600160a060020a031681565b600073__AddressSet____________________________63758241e0600484846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160206040518083038186803b15156109be57600080fd5b6102c65a03f415156109cf57600080fd5b50505060405180519392505050565b6012546101009004600160a060020a031681565b60005433600160a060020a03908116911614610a0d57600080fd5b600160a060020a03166000908152600160205260409020805460ff19169055565b610a366113bb565b158015610a585750600060038054610100900460ff1690811115610a5657fe5b145b1515610a6357600080fd5b610a6c33610a8e565b1515610a7757600080fd5b818111610a8357600080fd5b601591909155601655565b6000600160a060020a03821615801590610ad75750600054600160a060020a0383811691161480610ad75750600160a060020a03821660009081526001602052604090205460ff165b92915050565b600354610100900460ff1681565b600b6020528060005260406000206000915090508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b505050505081565b60165481565b610baa33610a8e565b1515610bb557600080fd5b6003805461ff0019166103001790557f72c874aeff0b183a56e2b79c71b46e1aed4dee5e09862134b8821ba2fddbf8bf60405160405180910390a1565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b610c656113bb565b158015610c875750600160038054610100900460ff1690811115610c8557fe5b145b1515610c9257600080fd5b600d5433600160a060020a03908116911614610cad57600080fd5b8373__NoRemovalBytes32Set___________________63bd4a0da160078360006040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b1515610d0d57600080fd5b6102c65a03f41515610d1e57600080fd5b5050506040518051159050610d3257600080fd5b6000828152600c6020526040902054829060ff1615610d5057600080fd5b6000838152600c602052604090819020805460ff1916600117905573__NoRemovalBytes32Set___________________9063bda02f009060079089905160e060020a63ffffffff85160281526004810192909252602482015260440160006040518083038186803b1515610dc357600080fd5b6102c65a03f41515610dd457600080fd5b5050506000868152600b60205260409020858051610df6929160200190611d86565b50600954600160a060020a031663de61a7326040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610e3657600080fd5b6102c65a03f11515610e4757600080fd5b5050507fe071651fdb9485bc1f9dbd3312c8a999c04ad7a5fef33ee1036e1fc709c4da4f8660405190815260200160405180910390a1505050505050565b610e8e33610a8e565b1515610e9957600080fd5b6000908152600260205260409020805460ff19166001179055565b610ebc6113bb565b158015610ede5750600160038054610100900460ff1690811115610edc57fe5b145b1515610ee957600080fd5b610ef233610a8e565b1515610efd57600080fd5b6003805461ff0019166102001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1565b610f4333610a8e565b1515610f4e57600080fd5b6013805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60148054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b60118054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b600954600160a060020a031681565b61106b33610a8e565b151561107657600080fd5b600160a060020a0333166000908152600160205260409020805460ff19169055565b60009081526002602052604090205460ff1690565b60108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b600f5433600160a060020a0390811691161461113357600080fd5b6010818051611146929160200190611d86565b5050565b60005433600160a060020a0390811691161461116557600080fd5b600160a060020a03166000908152600160208190526040909120805460ff19169091179055565b61119533610a8e565b15156111a057600080fd5b6000908152600260205260409020805460ff19169055565b60155481565b600054600160a060020a031681565b60135433600160a060020a039081169116146111e857600080fd5b601254601354600160a060020a0361010090920482169163a9059cbb91168360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561125357600080fd5b6102c65a03f1151561126457600080fd5b5050506040518051505050565b611279611e04565b600b600073__NoRemovalBytes32Set___________________637a3d376c600786846040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b15156112db57600080fd5b6102c65a03f415156112ec57600080fd5b50505060405180519050600019166000191681526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113a05780601f10611375576101008083540402835291602001916113a0565b820191906000526020600020905b81548152906001019060200180831161138357829003601f168201915b50505050509050919050565b601754600160a060020a031681565b60035460ff165b90565b6113ce33610a8e565b15156113d957600080fd5b60035460ff1615156113ea57600080fd5b6003805460ff191690557f19aad37188a1d3921e29eb3c66acf43d81975e107cb650d58cca878627955fd660405160405180910390a1565b600073__AddressSet____________________________63913aa6cd6004836040516020015260405160e060020a63ffffffff8416028152600481019190915260240160206040518083038186803b151561147c57600080fd5b6102c65a03f4151561148d57600080fd5b505050604051805191505090565b60185481565b600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b935780601f10610b6857610100808354040283529160200191610b93565b60135474010000000000000000000000000000000000000000900460ff1681565b6000600260038054610100900460ff169081111561154757fe5b14905090565b6115556113bb565b1580156115775750600160038054610100900460ff169081111561157557fe5b145b151561158257600080fd5b600d5433600160a060020a0390811691161461159d57600080fd5b600954600160a060020a031663bf41bf366000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115e557600080fd5b6102c65a03f115156115f657600080fd5b50505060405180519050151561160b57600080fd5b6000818152600c6020526040902054819060ff161561162957600080fd5b73__NoRemovalBytes32Set___________________63bd4a0da160078760006040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b151561168857600080fd5b6102c65a03f4151561169957600080fd5b5050506040518051905015156116ae57600080fd5b6000828152600c60209081526040808320805460ff19166001179055878352600b90915290208480516116e5929160200190611d86565b507fb76baefd7e249e81a2c6ab2dd1692b4629b993e50c0f341cd9410ca6b0f3392e8560405190815260200160405180910390a15050505050565b6117286113bb565b15801561174a5750600060038054610100900460ff169081111561174857fe5b145b151561175557600080fd5b61175e33610a8e565b151561176957600080fd5b73__AddressSet____________________________63e134066a60048360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b15156117c857600080fd5b6102c65a03f415156117d957600080fd5b50505050565b600073__AddressSet____________________________6318c40249600484846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160206040518083038186803b15156109be57600080fd5b6118506113bb565b1580156118725750600160038054610100900460ff169081111561187057fe5b145b151561187d57600080fd5b601554612a2f1901421161189057600080fd5b601654612a300142106118a257600080fd5b60125460ff16156118b257600080fd5b6012805460ff191660011790819055600160a060020a03610100909104166365775d156040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561190357600080fd5b6102c65a03f1151561191457600080fd5b50506012805460ff1916905550565b600f5433600160a060020a0390811691161461193e57600080fd5b6011818051611951929160200190611d86565b507ff9d8c4f7f692590eaf6d41d6160024ffe0ce509fa752efcf47543eb851869cfb60405160405180910390a150565b600073__NoRemovalBytes32Set___________________6366b26fbf6007836040516020015260405160e060020a63ffffffff8416028152600481019190915260240160206040518083038186803b151561147c57600080fd5b60135433600160a060020a039081169116146119f657600080fd5b601254601354600160a060020a0361010090920482169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611a6257600080fd5b6102c65a03f11515611a7357600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ac957600080fd5b6102c65a03f11515611ada57600080fd5b50505060405180515050565b600190565b60005433600160a060020a03908116911614611b0657600080fd5b600160a060020a0381161515611b1b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b611b8f33610a8e565b1515611b9a57600080fd5b60035460ff1615611baa57600080fd5b6003805460ff191660011790557f0f2e5b6c72c6a4491efd919a9f9a409f324ef0708c11ee57d410c2cb06c0992b60405160405180910390a1565b611bed6113bb565b158015611c0f5750600060038054610100900460ff1690811115611c0d57fe5b145b1515611c1a57600080fd5b611c2333610a8e565b1515611c2e57600080fd5b73__AddressSet____________________________63f9802f8560048360405160e060020a63ffffffff85160281526004810192909252600160a060020a0316602482015260440160006040518083038186803b15156117c857600080fd5b600073__AddressSet____________________________635c2125a7600484846040516020015260405160e060020a63ffffffff85160281526004810192909252602482015260440160206040518083038186803b15156109be57600080fd5b611cf56113bb565b158015611d175750600060038054610100900460ff1690811115611d1557fe5b145b1515611d2257600080fd5b611d2b33610a8e565b1515611d3657600080fd5b611d3e611ae6565b1515611d4957600080fd5b6003805461ff0019166101001790557fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611e00929150611e16565b5090565b60206040519081016040526000815290565b6113c291905b80821115611e005760008155600101611e1c565b6000903b11905600a165627a7a723058206234ebd4226c3b505578059c736358f824c221d00150b75d499ae7120c37af7c0029",
  "sourceMap": "1002:1987:12:-;;;1183:22:18;;;-1:-1:-1;;1326:59:17;;;319:35:21;;;-1:-1:-1;;319:35:21;;;1976:839:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2315:12;2329:16;2347;2365:12;2379:15;2396:8;2406:14;2422:5;2170:12:6;2184:16;2202;2220:12;2234:15;1678:8:4;2262:10:6;2274:8;2293:12;2307:4;2313:14;502:10:23;494:5;;:18;;;;;-1:-1:-1;;;;;494:18:23;;;;;-1:-1:-1;;;;;494:18:23;;;;;;1806:1:5;-1:-1:-1;;;;;1792:16:5;:2;-1:-1:-1;;;;;1792:16:5;;;:36;;;;-1:-1:-1;;;;;;1812:16:5;;;;1792:36;1784:45;;;;;;;;1839:27;1853:12;1839:13;;;;;;:27;:::i;:::-;1876:8;:13;;-1:-1:-1;;;;;;1876:13:5;;;-1:-1:-1;;;;;1876:13:5;;;;;;;1899:7;:12;;;;;;;;;;;;;;1234:26:3;;-1:-1:-1;1234:26:3;;;-1:-1:-1;1234:26:3;;;;;;;;:33;;-1:-1:-1;;1234:33:3;;;;;;-1:-1:-1;1277:16:3;1296:8;;1277:27;;;;;;;;:::i;:::-;-1:-1:-1;;1385:8:13;:23;;-1:-1:-1;;;;;;1385:23:13;-1:-1:-1;;;;;1385:23:13;;;;;;;;;;;-1:-1:-1;1709:27:4;1723:12;1709:13;;;;;;:27;:::i;:::-;-1:-1:-1;1746:9:4;:38;;-1:-1:-1;;;;;;1746:38:4;;-1:-1:-1;;;;;1746:38:4;;;;;;;1794:9;:16;;-1:-1:-1;;;;;;1794:16:4;;;;;;;;;-1:-1:-1;;;;;;1820:31:4;;;;;;;;;;;;-1:-1:-1;2350:22:6;;;;;;;;;;;;;;;;:12;;:22;;;;;;;;;:::i;:::-;-1:-1:-1;2473:15:6;2483:4;2473:9;;;;;;:15;:::i;:::-;2502:12;2498:53;;;2530:10;:8;;;;;;:10;:::i;:::-;-1:-1:-1;;;;;;;;;;2458:24:12;;;;;-1:-1:-1;2450:33:12;;-1:-1:-1;;2450:33:12;;;;;2501:22;2512:10;2501;;;;;;:22;:::i;:::-;2493:31;;;;;;;;2534:22;;;;;;;;;;;;;;;;:12;;:22;;;;;;;;;:::i;:::-;-1:-1:-1;2566:12:12;:25;;-1:-1:-1;;;;;;2566:25:12;-1:-1:-1;;;;;2566:25:12;;;;;2701:3;2682:22;;2674:31;;;;;;2715:11;:30;;;2756:53;;;;2788:10;:8;;;;;;:10;:::i;:::-;1976:839;;;;;;;;;;1002:1987;;1240:92:2;1168:19:1;1176:10;1168:7;;;;;;:19;:::i;:::-;1160:28;;;;;;;;1301:17:2;;;;:10;:17;;;;;:24;;-1:-1:-1;;1301:24:2;1321:4;1301:24;;;1240:92::o;1648:85:7:-;1529:10:17;:8;;;;;;:10;:::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;;;;;;:19;:::i;:::-;1160:28;;;;;;;;1710:13:7;;:9;1724:1;1710:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1710:16:7;;;;;;;-1:-1:-1;1710:16:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1648:85;:::o;1998:199:4:-;1529:10:17;:8;;;;;;:10;:::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;;;;;;:19;:::i;:::-;1160:28;;;;;;;;2054:9:4;;:14;:30;;;;-1:-1:-1;2072:7:4;;:12;2054:30;2050:115;;;2112:3;2100:9;:15;;;2146:7;2139:15;2129:7;:25;2050:115;2174:16;:14;;;;;;:16;:::i;:::-;1998:199::o;2821:165:12:-;2882:4;2936:11;;2971:8;;2821:165::o;1212:145:1:-;1268:4;-1:-1:-1;;;;;1291:18:1;;;;;;:59;;-1:-1:-1;1322:5:1;;-1:-1:-1;;;;;1314:13:1;;;1322:5;;1314:13;;:35;;-1:-1:-1;;;;;;1331:18:1;;;;;;:12;:18;;;;;;;;1314:35;1284:66;1212:145;-1:-1:-1;;1212:145:1:o;1355:84:18:-;1423:9;;;;1355:84;;:::o;2006:148:17:-;1529:10;:8;;;;;;:10;:::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;;;;;;:19;:::i;:::-;1160:28;;;;;;;;2066:13:17;:11;;;;;;:13;:::i;:::-;2058:22;;;;;;;;2090:13;:36;;-1:-1:-1;;2090:36:17;;;;;2136:11;;;;;;;;;;2006:148::o;1838:162::-;1989:4;1838:162;:::o;1002:1987:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1002:1987:12;;;-1:-1:-1;1002:1987:12;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1002:1987:12:-;;;;;;;;;-1:-1:-1;;;1002:1987:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:199:4;;;;;;;;;;;;;;1674:22:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;1674:22:5;;;;;;;;;;;;;;1836:109:7;;;;;;;;;;-1:-1:-1;;;;;1836:109:7;;;;;;;;;;;;;;;;;;;;;;1333:21:4;;;;;;;;;;;;1460:95:1;;;;;;;;;;-1:-1:-1;;;;;1460:95:1;;;;;2203:221:4;;;;;;;;;;;;;;;;1212:145:1;;;;;;;;;;-1:-1:-1;;;;;1212:145:1;;;;;1326:59:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1557:40:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1476:19:4;;;;;;;;;;;;;;;;;;;;;;;;;;;2274:103:17;;;;;;;;;;;;1416:23:5;;;;;;;;;;;;2800:310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2800:310:5;;-1:-1:-1;;2800:310:5;;;-1:-1:-1;2800:310:5;;-1:-1:-1;;;2800:310:5;1240:92:2;;;;;;;;;;;;;;2160:108:17;;;;;;;;;;;;2430:82:4;;;;;;;;;;-1:-1:-1;;;;;2430:82:4;;;;;1417:26;;;;;;;;;;;;1296:24:13;;;;;;;;;;;;1387:23:5;;;;;;;;;;;;1561:84:1;;;;;;;;;;;;1125:109:2;;;;;;;;;;;;;;1267:23:13;;;;;;;;;;;;1595:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1595:86:13;;-1:-1:-1;1595:86:13;;-1:-1:-1;;;;;;1595:86:13;1363:91:1;;;;;;;;;;-1:-1:-1;;;;;1363:91:1;;;;;1338:96:2;;;;;;;;;;;;;;1449:21:4;;;;;;;;;;;;238:20:23;;;;;;;;;;;;2674:140:4;;;;;;;;;;;;;;2656:120:5;;;;;;;;;;;;;;1049:27:12;;;;;;;;;;;;1355:84:18;;;;;;;;;;;;1540:92;;;;;;;;;;;;1542:100:7;;;;;;;;;;;;1082:23:12;;;;;;;;;;;;1089:30:3;;;;;;;;;;;;1383:28:4;;;;;;;;;;;;1720:112:17;;;;;;;;;;;;3173:281:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3173:281:5;;-1:-1:-1;;3173:281:5;;;-1:-1:-1;3173:281:5;;-1:-1:-1;;;3173:281:5;1739:91:7;;;;;;;;;;-1:-1:-1;;;;;1739:91:7;;;;;1304:113;;;;;;;;;;-1:-1:-1;;;;;1304:113:7;;;;;2820:97:4;;;;;;;;;;;;1773:111:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1773:111:13;;-1:-1:-1;1773:111:13;;-1:-1:-1;;;;;;1773:111:13;2488:98:5;;;;;;;;;;;;2518:150:4;;;;;;;;;;;;1838:162:17;;;;;;;;;;;;827:169:23;;;;;;;;;;-1:-1:-1;;;;;827:169:23;;;;;1445:89:18;;;;;;;;;;;;1648:85:7;;;;;;;;;;-1:-1:-1;;;;;1648:85:7;;;;;1423:113;;;;;;;;;;;;;;1998:199:4;1529:10:17;:8;:10::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2054:9:4;;:14;:30;;;;-1:-1:-1;2072:7:4;;:12;2054:30;2050:115;;;2112:3;2100:9;:15;;;2146:7;2139:15;2129:7;:25;2050:115;2174:16;:14;:16::i;:::-;1998:199::o;1674:22:5:-;;;-1:-1:-1;;;;;1674:22:5;;:::o;1836:109:7:-;1894:4;1917:18;;:9;1936:1;1894:4;1917:21;;;;;;;-1:-1:-1;;;1917:21:7;;;;;;;;;;;;;-1:-1:-1;;;;;1917:21:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1836:109;-1:-1:-1;;;1836:109:7:o;1333:21:4:-;;;;;;-1:-1:-1;;;;;1333:21:4;;:::o;1460:95:1:-;647:5:23;;633:10;-1:-1:-1;;;;;633:19:23;;;647:5;;633:19;625:28;;;;;;-1:-1:-1;;;;;1522:18:1;1543:5;1522:18;;;:12;:18;;;;;:26;;-1:-1:-1;;1522:26:1;;;1460:95::o;2203:221:4:-;1529:10:17;:8;:10::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2307:35:4;;;2299:44;;;;;;2353:9;:29;;;;2392:7;:25;2203:221::o;1212:145:1:-;1268:4;-1:-1:-1;;;;;1291:18:1;;;;;;:59;;-1:-1:-1;1322:5:1;;-1:-1:-1;;;;;1314:13:1;;;1322:5;;1314:13;;:35;;-1:-1:-1;;;;;;1331:18:1;;;;;;:12;:18;;;;;;;;1314:35;1284:66;1212:145;-1:-1:-1;;1212:145:1:o;1326:59:17:-;;;;;;;;;:::o;1557:40:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1476:19:4:-;;;;:::o;2274:103:17:-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2330:21:17;2314:37;;-1:-1:-1;;2314:37:17;;;;;2361:9;;;;;;;;;;2274:103::o;1416:23:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2800:310;1644:10:17;:8;:10::i;:::-;1643:11;:52;;;;-1:-1:-1;1675:20:17;1658:13;;;;;;;;;:37;;;;;;;;1643:52;1635:61;;;;;;;;1979:7:5;;1965:10;-1:-1:-1;;;;;1965:21:5;;;1979:7;;1965:21;1957:30;;;;;;2918:6;2201:18;;:9;2918:6;2201:26;;;;;;;;-1:-1:-1;;;2201:26:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:27;;-1:-1:-1;2192:36:5;;;;;;2068:11;;;;:6;:11;;;;;;2942:3;;2068:11;;2067:12;2059:21;;;;;;2957:11;;;;:6;:11;;;;;;;:18;;-1:-1:-1;;2957:18:5;2971:4;2957:18;;;2985:13;;;;:9;;2999:6;;2985:21;-1:-1:-1;;;2985:21:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;2985:21:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3016:13:5;;;;:5;:13;;;;;3032:4;;3016:20;;;;;;;;:::i;:::-;-1:-1:-1;3059:8:5;;-1:-1:-1;;;;;3059:8:5;3046:33;:35;;;;;-1:-1:-1;;;3046:35:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3091:12;3096:6;3091:12;;;;;;;;;;;;;;2238:1;1997;2800:310;;;;:::o;1240:92:2:-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1301:17:2;;;;:10;:17;;;;;:24;;-1:-1:-1;;1301:24:2;1321:4;1301:24;;;1240:92::o;2160:108:17:-;1644:10;:8;:10::i;:::-;1643:11;:52;;;;-1:-1:-1;1675:20:17;1658:13;;;;;;;;;:37;;;;;;;;1643:52;1635:61;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2207:13:17;:36;;-1:-1:-1;;2207:36:17;;;;;2253:8;;;;;;;;;;2160:108::o;2430:82:4:-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2489:9:4;:16;;-1:-1:-1;;2489:16:4;-1:-1:-1;;;;;2489:16:4;;;;;;;;;;2430:82::o;1417:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:24:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1387:23:5;;;-1:-1:-1;;;;;1387:23:5;;:::o;1561:84:1:-;1168:19;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;-1:-1:-1;;;;;1619:10:1;1606:24;1633:5;1606:24;;;:12;:24;;;;;:32;;-1:-1:-1;;1606:32:1;;;1561:84::o;1125:109:2:-;1187:4;1210:17;;;:10;:17;;;;;;;;;1125:109::o;1267:23:13:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1595:86;1476:8;;1462:10;-1:-1:-1;;;;;1462:22:13;;;1476:8;;1462:22;1454:31;;;;;;1659:9;1671:3;;1659:15;;;;;;;;:::i;:::-;;1595:86;:::o;1363:91:1:-;647:5:23;;633:10;-1:-1:-1;;;;;633:19:23;;;647:5;;633:19;625:28;;;;;;-1:-1:-1;;;;;1422:18:1;;;;;1443:4;1422:18;;;;;;;;:25;;-1:-1:-1;;1422:25:1;;;;;;1363:91::o;1338:96:2:-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1422:5:2;1402:17;;;:10;:17;;;;;:25;;-1:-1:-1;;1402:25:2;;;1338:96::o;1449:21:4:-;;;;:::o;238:20:23:-;;;-1:-1:-1;;;;;238:20:23;;:::o;2674:140:4:-;2751:9;;2737:10;-1:-1:-1;;;;;2737:23:4;;;2751:9;;2737:23;2729:32;;;;;;2771:9;;2790;;-1:-1:-1;;;;;2771:9:4;;;;;;;:18;;2790:9;2801:5;2790:9;2771:36;;;;;;;-1:-1:-1;;;2771:36:4;;;;;;-1:-1:-1;;;;;2771:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2674:140:4:o;2656:120:5:-;2715:6;;:::i;:::-;2740:5;:29;2746:15;;:9;2762:5;2740:29;2746:22;;;;;;;-1:-1:-1;;;2746:22:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2740:29;;;;;;;;;;;;;;;;;2733:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2656:120;;;:::o;1049:27:12:-;;;-1:-1:-1;;;;;1049:27:12;;:::o;1355:84:18:-;1423:9;;;;1355:84;;:::o;1540:92::-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1248:9:18;;;;1240:18;;;;;;;;1588:9;:17;;-1:-1:-1;;1588:17:18;;;1615:10;;;;;;;;;;1540:92::o;1542:100:7:-;1593:7;1619:14;;:9;1593:7;1619:16;;;;;;;-1:-1:-1;;;1619:16:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1542:100:7;:::o;1082:23:12:-;;;;:::o;1089:30:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1383:28:4;;;;;;;;;:::o;1720:112:17:-;1765:4;1805:20;1788:13;;;;;;;;;:37;;;;;;;;1781:44;;1720:112;:::o;3173:281:5:-;1644:10:17;:8;:10::i;:::-;1643:11;:52;;;;-1:-1:-1;1675:20:17;1658:13;;;;;;;;;:37;;;;;;;;1643:52;1635:61;;;;;;;;1979:7:5;;1965:10;-1:-1:-1;;;;;1965:21:5;;;1979:7;;1965:21;1957:30;;;;;;2371:8;;-1:-1:-1;;;;;2371:8:5;2358:39;2371:8;2358:41;;;;;;;;;;-1:-1:-1;;;2358:41:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2350:50;;;;;;;;2068:11;;;;:6;:11;;;;;;3311:3;;2068:11;;2067:12;2059:21;;;;;;3334:18;;:9;3353:6;3334:26;;;;;;;;-1:-1:-1;;;3334:26:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3326:35;;;;;;;;3371:11;;;;:6;:11;;;;;;;;:18;;-1:-1:-1;;3371:18:5;3385:4;3371:18;;;3399:13;;;:5;:13;;;;;3415:4;;3399:20;;;;;;;;:::i;:::-;;3429:18;3440:6;3429:18;;;;;;;;;;;;;;2410:1;3173:281;;;;:::o;1739:91:7:-;1529:10:17;:8;:10::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1804:16:7;;:9;1821:1;1804:19;;-1:-1:-1;;;1804:19:7;;;;;;;;;;;;;-1:-1:-1;;;;;1804:19:7;;;;;;;-1:-1:-1;1804:19:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1739:91;:::o;1304:113::-;1364:7;1390:17;;:9;1408:1;1364:7;1390:20;;;;;;;-1:-1:-1;;;1390:20:7;;;;;;;;;;;;;-1:-1:-1;;;;;1390:20:7;;;;;;;;;;;;;;;;;;;;;;;;2820:97:4;1644:10:17;:8;:10::i;:::-;1643:11;:52;;;;-1:-1:-1;1675:20:17;1658:13;;;;;;;;;:37;;;;;;;;1643:52;1635:61;;;;;;;;1909:9:4;;-1:-1:-1;;1909:19:4;1902:3;:27;1894:36;;;;;;1955:7;;1965;1955:17;1948:3;:25;1940:34;;;;;;780:14:21;;;;779:15;771:24;;;;;;801:14;:21;;-1:-1:-1;;801:21:21;818:4;801:21;;;;;-1:-1:-1;;;;;801:21:21;2889:9:4;;;;:19;:21;;;;;-1:-1:-1;;;2889:21:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;835:14:21;:22;;-1:-1:-1;;835:22:21;;;-1:-1:-1;2820:97:4:o;1773:111:13:-;1476:8;;1462:10;-1:-1:-1;;;;;1462:22:13;;;1476:8;;1462:22;1454:31;;;;;;1838:10;1851:3;;1838:16;;;;;;;;:::i;:::-;;1864:13;;;;;;;;;;1773:111;:::o;2488:98:5:-;2537:7;2563:14;;:9;2537:7;2563:16;;;;;;;-1:-1:-1;;;2563:16:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2518:150:4;2585:9;;2571:10;-1:-1:-1;;;;;2571:23:4;;;2585:9;;2571:23;2563:32;;;;;;2605:9;;2624;;-1:-1:-1;;;;;2605:9:4;;;;;;;:18;;2624:9;2605;2635:19;2655:4;2624:9;2635:25;;;;;;;-1:-1:-1;;;2635:25:4;;;;;;-1:-1:-1;;;;;2635:25:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2605:56;;;;;;;;-1:-1:-1;;;2605:56:4;;;;;;-1:-1:-1;;;;;2605:56:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2518:150:4:o;1838:162:17:-;1989:4;1838:162;:::o;827:169:23:-;647:5;;633:10;-1:-1:-1;;;;;633:19:23;;;647:5;;633:19;625:28;;;;;;-1:-1:-1;;;;;903:22:23;;;;895:31;;;;;;953:5;;-1:-1:-1;;;;;932:37:23;;;;953:5;932:37;;;;;;;;;;975:5;:16;;-1:-1:-1;;975:16:23;-1:-1:-1;;;;;975:16:23;;;;;;;;;;827:169::o;1445:89:18:-;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1321:9:18;;;;1320:10;1312:19;;;;;;1493:9;:16;;-1:-1:-1;;1493:16:18;1505:4;1493:16;;;1519:8;;;;;;;;;;1445:89::o;1648:85:7:-;1529:10:17;:8;:10::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;1710:13:7;;:9;1724:1;1710:16;;-1:-1:-1;;;1710:16:7;;;;;;;;;;;;;-1:-1:-1;;;;;1710:16:7;;;;;;;-1:-1:-1;1710:16:7;;;;;;;;;;;;;;;;1423:113;1481:7;1507:15;;:9;1523:5;1481:7;1507:22;;;;;;;-1:-1:-1;;;1507:22:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2006:148:17;1529:10;:8;:10::i;:::-;1528:11;:54;;;;-1:-1:-1;1560:22:17;1543:13;;;;;;;;;:39;;;;;;;;1528:54;1520:63;;;;;;;;1168:19:1;1176:10;1168:7;:19::i;:::-;1160:28;;;;;;;;2066:13:17;:11;:13::i;:::-;2058:22;;;;;;;;2090:13;:36;;-1:-1:-1;;2090:36:17;;;;;2136:11;;;;;;;;;;2006:148::o;1002:1987:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1002:1987:12;;;-1:-1:-1;1002:1987:12;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;2821:165;2882:4;2936:11;;2971:8;;2821:165::o",
  "source": "// ------------------------------------------------------------------------------\n// This file is part of netvote.\n//\n// netvote is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// netvote is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with solidity.  If not, see <http://www.gnu.org/licenses/>\n//\n// (c) 2017 netvote contributors.\n//------------------------------------------------------------------------------\n\npragma solidity ^0.4.17;\n\nimport \"../basic/BasicElection.sol\";\n\n\n/**\n * @title TokenElection\n * @dev Allows token holders to vote\n */\ncontract TokenElection is BasicElection {\n\n    address public tokenAddress;\n    uint public balanceTime;\n\n    /**\n      * @dev Constructor for creating a BasicElection\n      * @param hashedUserId bytes32 sha3 hash of external userId\n      * @param allowanceAddress The address of global allowance contract.\n      * @param ownerOfAllowance The owner of the Vote Allowance to deduct from.\n      * @param allowUpdates Whether to allow Voters to update their vote.\n      * @param revealerAddress The address of the Key Revealer that will post the Key.\n      * @param location The location reference for the ballot metadata (e.g., IPFS Reference)\n      * @param gatewayAddress The address of the Vote Gateway that will submit votes.\n      * @param autoActivate Automatically activate this election to allow votes\n      * @param erc20Token Address of token whose holders are voting\n      * @param balanceTimestamp Timestamp for balance evaluation for weighted voting\n      */\n    function TokenElection(\n        bytes32 hashedUserId,\n        address allowanceAddress,\n        address ownerOfAllowance,\n        bool allowUpdates,\n        address revealerAddress,\n        string location,\n        address gatewayAddress,\n        bool autoActivate,\n        address erc20Token,\n        uint balanceTimestamp) BasicElection(hashedUserId, allowanceAddress, ownerOfAllowance, allowUpdates, revealerAddress, location, gatewayAddress, false) public\n    {\n        require(erc20Token != address(0));\n        require(isContract(erc20Token));\n        electionType = \"TOKEN\";\n        tokenAddress = erc20Token;\n\n        //balance must be in past for gateway-confirmed token elections\n        require(balanceTimestamp < now);\n        balanceTime = balanceTimestamp;\n\n        if (autoActivate) {\n            activate();\n        }\n    }\n\n    function isContract(address addr) internal constant returns (bool) {\n        uint size;\n        assembly { size := extcodesize(addr) }\n        return size > 0;\n    }\n\n}",
  "sourcePath": "/Users/slanders/netvote/elections-solidity/contracts/elections/token/TokenElection.sol",
  "ast": {
    "attributes": {
      "absolutePath": "/Users/slanders/netvote/elections-solidity/contracts/elections/token/TokenElection.sol",
      "exportedSymbols": {
        "TokenElection": [
          1691
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.4",
            ".17"
          ]
        },
        "id": 1595,
        "name": "PragmaDirective",
        "src": "868:24:12"
      },
      {
        "attributes": {
          "SourceUnit": 735,
          "absolutePath": "/Users/slanders/netvote/elections-solidity/contracts/elections/basic/BasicElection.sol",
          "file": "../basic/BasicElection.sol",
          "scope": 1692,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1596,
        "name": "ImportDirective",
        "src": "894:36:12"
      },
      {
        "attributes": {
          "contractDependencies": [
            141,
            191,
            217,
            428,
            671,
            734,
            827,
            1753,
            2340,
            2408,
            2763,
            2914
          ],
          "contractKind": "contract",
          "documentation": "@title TokenElection\n@dev Allows token holders to vote",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1691,
            734,
            428,
            2763,
            1753,
            217,
            671,
            827,
            2340,
            2408,
            191,
            141,
            2914
          ],
          "name": "TokenElection",
          "scope": 1692
        },
        "children": [
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BasicElection",
                  "referencedDeclaration": 734,
                  "type": "contract BasicElection"
                },
                "id": 1597,
                "name": "UserDefinedTypeName",
                "src": "1028:13:12"
              }
            ],
            "id": 1598,
            "name": "InheritanceSpecifier",
            "src": "1028:13:12"
          },
          {
            "attributes": {
              "constant": false,
              "name": "tokenAddress",
              "scope": 1691,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "type": "address"
                },
                "id": 1599,
                "name": "ElementaryTypeName",
                "src": "1049:7:12"
              }
            ],
            "id": 1600,
            "name": "VariableDeclaration",
            "src": "1049:27:12"
          },
          {
            "attributes": {
              "constant": false,
              "name": "balanceTime",
              "scope": 1691,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint",
                  "type": "uint256"
                },
                "id": 1601,
                "name": "ElementaryTypeName",
                "src": "1082:4:12"
              }
            ],
            "id": 1602,
            "name": "VariableDeclaration",
            "src": "1082:23:12"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": true,
              "name": "TokenElection",
              "payable": false,
              "scope": 1691,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "hashedUserId",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 1603,
                        "name": "ElementaryTypeName",
                        "src": "2008:7:12"
                      }
                    ],
                    "id": 1604,
                    "name": "VariableDeclaration",
                    "src": "2008:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "allowanceAddress",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1605,
                        "name": "ElementaryTypeName",
                        "src": "2038:7:12"
                      }
                    ],
                    "id": 1606,
                    "name": "VariableDeclaration",
                    "src": "2038:24:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "ownerOfAllowance",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1607,
                        "name": "ElementaryTypeName",
                        "src": "2072:7:12"
                      }
                    ],
                    "id": 1608,
                    "name": "VariableDeclaration",
                    "src": "2072:24:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "allowUpdates",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1609,
                        "name": "ElementaryTypeName",
                        "src": "2106:4:12"
                      }
                    ],
                    "id": 1610,
                    "name": "VariableDeclaration",
                    "src": "2106:17:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "revealerAddress",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1611,
                        "name": "ElementaryTypeName",
                        "src": "2133:7:12"
                      }
                    ],
                    "id": 1612,
                    "name": "VariableDeclaration",
                    "src": "2133:23:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "location",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 1613,
                        "name": "ElementaryTypeName",
                        "src": "2166:6:12"
                      }
                    ],
                    "id": 1614,
                    "name": "VariableDeclaration",
                    "src": "2166:15:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "gatewayAddress",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1615,
                        "name": "ElementaryTypeName",
                        "src": "2191:7:12"
                      }
                    ],
                    "id": 1616,
                    "name": "VariableDeclaration",
                    "src": "2191:22:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "autoActivate",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1617,
                        "name": "ElementaryTypeName",
                        "src": "2223:4:12"
                      }
                    ],
                    "id": 1618,
                    "name": "VariableDeclaration",
                    "src": "2223:17:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "erc20Token",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1619,
                        "name": "ElementaryTypeName",
                        "src": "2250:7:12"
                      }
                    ],
                    "id": 1620,
                    "name": "VariableDeclaration",
                    "src": "2250:18:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "balanceTimestamp",
                      "scope": 1674,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 1621,
                        "name": "ElementaryTypeName",
                        "src": "2278:4:12"
                      }
                    ],
                    "id": 1622,
                    "name": "VariableDeclaration",
                    "src": "2278:21:12"
                  }
                ],
                "id": 1623,
                "name": "ParameterList",
                "src": "1998:302:12"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1634,
                "name": "ParameterList",
                "src": "2440:0:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 734,
                      "type": "type(contract BasicElection)",
                      "value": "BasicElection"
                    },
                    "id": 1624,
                    "name": "Identifier",
                    "src": "2301:13:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1604,
                      "type": "bytes32",
                      "value": "hashedUserId"
                    },
                    "id": 1625,
                    "name": "Identifier",
                    "src": "2315:12:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1606,
                      "type": "address",
                      "value": "allowanceAddress"
                    },
                    "id": 1626,
                    "name": "Identifier",
                    "src": "2329:16:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1608,
                      "type": "address",
                      "value": "ownerOfAllowance"
                    },
                    "id": 1627,
                    "name": "Identifier",
                    "src": "2347:16:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1610,
                      "type": "bool",
                      "value": "allowUpdates"
                    },
                    "id": 1628,
                    "name": "Identifier",
                    "src": "2365:12:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1612,
                      "type": "address",
                      "value": "revealerAddress"
                    },
                    "id": 1629,
                    "name": "Identifier",
                    "src": "2379:15:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1614,
                      "type": "string memory",
                      "value": "location"
                    },
                    "id": 1630,
                    "name": "Identifier",
                    "src": "2396:8:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1616,
                      "type": "address",
                      "value": "gatewayAddress"
                    },
                    "id": 1631,
                    "name": "Identifier",
                    "src": "2406:14:12"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "66616c7365",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "bool",
                      "type": "bool",
                      "value": "false"
                    },
                    "id": 1632,
                    "name": "Literal",
                    "src": "2422:5:12"
                  }
                ],
                "id": 1633,
                "name": "ModifierInvocation",
                "src": "2301:127:12"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3452,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1635,
                            "name": "Identifier",
                            "src": "2450:7:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1620,
                                  "type": "address",
                                  "value": "erc20Token"
                                },
                                "id": 1636,
                                "name": "Identifier",
                                "src": "2458:10:12"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 1637,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2472:7:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1638,
                                    "name": "Literal",
                                    "src": "2480:1:12"
                                  }
                                ],
                                "id": 1639,
                                "name": "FunctionCall",
                                "src": "2472:10:12"
                              }
                            ],
                            "id": 1640,
                            "name": "BinaryOperation",
                            "src": "2458:24:12"
                          }
                        ],
                        "id": 1641,
                        "name": "FunctionCall",
                        "src": "2450:33:12"
                      }
                    ],
                    "id": 1642,
                    "name": "ExpressionStatement",
                    "src": "2450:33:12"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3452,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1643,
                            "name": "Identifier",
                            "src": "2493:7:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1690,
                                  "type": "function (address) view returns (bool)",
                                  "value": "isContract"
                                },
                                "id": 1644,
                                "name": "Identifier",
                                "src": "2501:10:12"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1620,
                                  "type": "address",
                                  "value": "erc20Token"
                                },
                                "id": 1645,
                                "name": "Identifier",
                                "src": "2512:10:12"
                              }
                            ],
                            "id": 1646,
                            "name": "FunctionCall",
                            "src": "2501:22:12"
                          }
                        ],
                        "id": 1647,
                        "name": "FunctionCall",
                        "src": "2493:31:12"
                      }
                    ],
                    "id": 1648,
                    "name": "ExpressionStatement",
                    "src": "2493:31:12"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 239,
                              "type": "string storage ref",
                              "value": "electionType"
                            },
                            "id": 1649,
                            "name": "Identifier",
                            "src": "2534:12:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "544f4b454e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"TOKEN\"",
                              "value": "TOKEN"
                            },
                            "id": 1650,
                            "name": "Literal",
                            "src": "2549:7:12"
                          }
                        ],
                        "id": 1651,
                        "name": "Assignment",
                        "src": "2534:22:12"
                      }
                    ],
                    "id": 1652,
                    "name": "ExpressionStatement",
                    "src": "2534:22:12"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1600,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 1653,
                            "name": "Identifier",
                            "src": "2566:12:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1620,
                              "type": "address",
                              "value": "erc20Token"
                            },
                            "id": 1654,
                            "name": "Identifier",
                            "src": "2581:10:12"
                          }
                        ],
                        "id": 1655,
                        "name": "Assignment",
                        "src": "2566:25:12"
                      }
                    ],
                    "id": 1656,
                    "name": "ExpressionStatement",
                    "src": "2566:25:12"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3452,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1657,
                            "name": "Identifier",
                            "src": "2674:7:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1622,
                                  "type": "uint256",
                                  "value": "balanceTimestamp"
                                },
                                "id": 1658,
                                "name": "Identifier",
                                "src": "2682:16:12"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3451,
                                  "type": "uint256",
                                  "value": "now"
                                },
                                "id": 1659,
                                "name": "Identifier",
                                "src": "2701:3:12"
                              }
                            ],
                            "id": 1660,
                            "name": "BinaryOperation",
                            "src": "2682:22:12"
                          }
                        ],
                        "id": 1661,
                        "name": "FunctionCall",
                        "src": "2674:31:12"
                      }
                    ],
                    "id": 1662,
                    "name": "ExpressionStatement",
                    "src": "2674:31:12"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1602,
                              "type": "uint256",
                              "value": "balanceTime"
                            },
                            "id": 1663,
                            "name": "Identifier",
                            "src": "2715:11:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1622,
                              "type": "uint256",
                              "value": "balanceTimestamp"
                            },
                            "id": 1664,
                            "name": "Identifier",
                            "src": "2729:16:12"
                          }
                        ],
                        "id": 1665,
                        "name": "Assignment",
                        "src": "2715:30:12"
                      }
                    ],
                    "id": 1666,
                    "name": "ExpressionStatement",
                    "src": "2715:30:12"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1618,
                          "type": "bool",
                          "value": "autoActivate"
                        },
                        "id": 1667,
                        "name": "Identifier",
                        "src": "2760:12:12"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        333
                                      ],
                                      "referencedDeclaration": 333,
                                      "type": "function ()",
                                      "value": "activate"
                                    },
                                    "id": 1668,
                                    "name": "Identifier",
                                    "src": "2788:8:12"
                                  }
                                ],
                                "id": 1669,
                                "name": "FunctionCall",
                                "src": "2788:10:12"
                              }
                            ],
                            "id": 1670,
                            "name": "ExpressionStatement",
                            "src": "2788:10:12"
                          }
                        ],
                        "id": 1671,
                        "name": "Block",
                        "src": "2774:35:12"
                      }
                    ],
                    "id": 1672,
                    "name": "IfStatement",
                    "src": "2756:53:12"
                  }
                ],
                "id": 1673,
                "name": "Block",
                "src": "2440:375:12"
              }
            ],
            "id": 1674,
            "name": "FunctionDefinition",
            "src": "1976:839:12"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "isContract",
              "payable": false,
              "scope": 1691,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "addr",
                      "scope": 1690,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1675,
                        "name": "ElementaryTypeName",
                        "src": "2841:7:12"
                      }
                    ],
                    "id": 1676,
                    "name": "VariableDeclaration",
                    "src": "2841:12:12"
                  }
                ],
                "id": 1677,
                "name": "ParameterList",
                "src": "2840:14:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 1690,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1678,
                        "name": "ElementaryTypeName",
                        "src": "2882:4:12"
                      }
                    ],
                    "id": 1679,
                    "name": "VariableDeclaration",
                    "src": "2882:4:12"
                  }
                ],
                "id": 1680,
                "name": "ParameterList",
                "src": "2881:6:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        null
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "size",
                          "scope": 1690,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1681,
                            "name": "ElementaryTypeName",
                            "src": "2898:4:12"
                          }
                        ],
                        "id": 1682,
                        "name": "VariableDeclaration",
                        "src": "2898:9:12"
                      }
                    ],
                    "id": 1683,
                    "name": "VariableDeclarationStatement",
                    "src": "2898:9:12"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "size": {
                            "declaration": 1682,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2928:4:12",
                            "valueSize": 1
                          }
                        },
                        {
                          "addr": {
                            "declaration": 1676,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2948:4:12",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    size := extcodesize(addr)\n}"
                    },
                    "children": [],
                    "id": 1684,
                    "name": "InlineAssembly",
                    "src": "2917:53:12"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1680
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1682,
                              "type": "uint256",
                              "value": "size"
                            },
                            "id": 1685,
                            "name": "Identifier",
                            "src": "2971:4:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1686,
                            "name": "Literal",
                            "src": "2978:1:12"
                          }
                        ],
                        "id": 1687,
                        "name": "BinaryOperation",
                        "src": "2971:8:12"
                      }
                    ],
                    "id": 1688,
                    "name": "Return",
                    "src": "2964:15:12"
                  }
                ],
                "id": 1689,
                "name": "Block",
                "src": "2888:98:12"
              }
            ],
            "id": 1690,
            "name": "FunctionDefinition",
            "src": "2821:165:12"
          }
        ],
        "id": 1691,
        "name": "ContractDefinition",
        "src": "1002:1987:12"
      }
    ],
    "id": 1692,
    "name": "SourceUnit",
    "src": "868:2121:12"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {
        "NoRemovalBytes32Set": "0x486f7a37b62c7247beabbc1f9d451da04a9c585a",
        "AddressSet": "0xab6f805fb7754d19f82eb8fce07cf70f10c7a620"
      }
    }
  },
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-03-26T15:58:05.155Z"
}