{
  "contractName": "TokenStaking",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_initializationPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_undelegationPeriod",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "lockCreator",
          "type": "address"
        }
      ],
      "name": "ExpiredLockReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "lockCreator",
          "type": "address"
        }
      ],
      "name": "LockReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "recoveredAt",
          "type": "uint256"
        }
      ],
      "name": "RecoveredStake",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "lockCreator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "until",
          "type": "uint256"
        }
      ],
      "name": "StakeLocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensSeized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensSlashed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "undelegatedAt",
          "type": "uint256"
        }
      ],
      "name": "Undelegated",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operatorContract",
          "type": "address"
        }
      ],
      "name": "activeStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operatorContract",
          "type": "address"
        }
      ],
      "name": "authorizeOperatorContract",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "authorizerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "beneficiaryOf",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "cancelStake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatedAuthoritySource",
          "type": "address"
        }
      ],
      "name": "claimDelegatedAuthority",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operatorContract",
          "type": "address"
        }
      ],
      "name": "eligibleStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "operatorContract",
          "type": "address"
        }
      ],
      "name": "getAuthoritySource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "getDelegationInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "createdAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "undelegatedAt",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "getLocks",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "creators",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "expirations",
          "type": "uint256[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operatorContract",
          "type": "address"
        }
      ],
      "name": "hasMinimumStake",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initializationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_operatorContract",
          "type": "address"
        }
      ],
      "name": "isAuthorizedForOperator",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isStakeLocked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "lockStake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maximumLockDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStakeBase",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStakeSchedule",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStakeScheduleStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "minimumStakeSteps",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "operators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "packedParams",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "beneficiary",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "authorizer",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "operatorsOf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ownerOperators",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "recoverStake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract KeepRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operatorContract",
          "type": "address"
        }
      ],
      "name": "releaseExpiredLock",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountToSeize",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rewardMultiplier",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tattletale",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "misbehavedOperators",
          "type": "address[]"
        }
      ],
      "name": "seize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountToSlash",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "misbehavedOperators",
          "type": "address[]"
        }
      ],
      "name": "slash",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract ERC20Burnable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        }
      ],
      "name": "undelegate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_undelegationTimestamp",
          "type": "uint256"
        }
      ],
      "name": "undelegateAt",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "undelegationPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "unlockStake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162005d5f38038062005d5f833981810160405260808110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200010a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e20616464726573732063616e2774206265207a65726f2e0000000081525060200191505060405180910390fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600181905550806002819055504260058190555050505050615bab80620001b46000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80639557e0bb11610130578063d98f233d116100b8578063f16547831161007c578063f165478314610f70578063fab46d6614610fd4578063fb1677b11461103a578063fc0c546a146110be578063fdd1f9861461110857610227565b8063d98f233d14610dea578063da8be86414610e4e578063e064172e14610e92578063ec5ffac214610ed6578063ef1f966114610ef457610227565b8063afff33ef116100ff578063afff33ef14610bb3578063b534fbb614610c2b578063ba7bffd314610cc4578063cbe945dc14610d48578063cdc3e90a14610dcc57610227565b80639557e0bb14610abb5780639ff3f12514610b33578063a590ae3614610b51578063aed1ec7214610b9557610227565b80634a1ce599116101b3578063719f308911610182578063719f3089146107ab5780637b1039991461088c57806389002fed146108d65780638e49aa7a146108f45780638f4ffcb1146109b657610227565b80634a1ce5991461067d5780635139a6c5146106c1578063525835f91461070f57806370a082311461075357610227565b80631a051082116101fa5780631a0510821461050957806321e1625e14610527578063280c384614610575578063335e91a1146105935780634239dd8d146105ef57610227565b806309055e901461022c57806310a63ec01461031857806313e7c9d81461039457806314afd79e14610485575b600080fd5b6103166004803603608081101561024257600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029357600080fd5b8201836020820111156102a557600080fd5b803590602001918460208302840111640100000000831117156102c757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611126565b005b61037a6004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b3565b604051808215151515815260200191505060405180910390f35b6103d6600480360360208110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d1565b604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b6104c76004803603602081101561049b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611861565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105116118cd565b6040518082815260200191505060405180910390f35b6105736004803603604081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118d5565b005b61057d611d40565b6040518082815260200191505060405180910390f35b6105d5600480360360208110156105a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d45565b604051808215151515815260200191505060405180910390f35b61063b6004803603604081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f81565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106bf6004803603602081101561069357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fcc565b005b61070d600480360360408110156106d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612116565b005b6107516004803603602081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612483565b005b6107956004803603602081101561076957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612791565b6040518082815260200191505060405180910390f35b6107ed600480360360208110156107c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e5565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610834578082015181840152602081019050610819565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561087657808201518184015260208101905061085b565b5050505090500194505050505060405180910390f35b610894612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108de612a55565b6040518082815260200191505060405180910390f35b6109b46004803603604081101561090a57600080fd5b81019080803590602001909291908035906020019064010000000081111561093157600080fd5b82018360208201111561094357600080fd5b8035906020019184602083028401116401000000008311171561096557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612a63565b005b610ab9600480360360808110156109cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a3357600080fd5b820183602082011115610a4557600080fd5b80359060200191846001830284011164010000000083111715610a6757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613065565b005b610b1d60048036036040811015610ad157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ca565b6040518082815260200191505060405180910390f35b610b3b61366b565b6040518082815260200191505060405180910390f35b610b9360048036036020811015610b6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613673565b005b610b9d613959565b6040518082815260200191505060405180910390f35b610c1560048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061395f565b6040518082815260200191505060405180910390f35b610c6d60048036036020811015610c4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139fe565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610cb0578082015181840152602081019050610c95565b505050509050019250505060405180910390f35b610d0660048036036020811015610cda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613acb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d8a60048036036020811015610d5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b37565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dd4613bec565b6040518082815260200191505060405180910390f35b610e4c60048036036040811015610e0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bf2565b005b610e9060048036036020811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ed0565b005b610ed460048036036020811015610ea857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613edd565b005b610ede61417a565b6040518082815260200191505060405180910390f35b610f5660048036036040811015610f0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614227565b604051808215151515815260200191505060405180910390f35b610fd260048036036040811015610f8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c3565b005b61101660048036036020811015610fea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614626565b60405180848152602001838152602001828152602001935050505060405180910390f35b61107c6004803603602081101561105057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614683565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110c66146ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611110614714565b6040518082815260200191505060405180910390f35b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961116e83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b810190808051906020019092919050505061125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b6000809050600061126e33613b37565b905060008090505b845181101561169457600085828151811061128d57fe5b60200260200101519050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506113e38161471a565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b611460828233614747565b156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5374616b652069732072656c656173656400000000000000000000000000000081525060200191505060405180910390fd5b60006114de826147d1565b90508a8110156115af576114fb81876147eb90919063ffffffff16565b95506000809050611515818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167fc5c18d4a60510957a4dc6dbd6d40ecfcfa32ab9517528a6b4052729e48e183d3836040518082815260200191505060405180910390a250611684565b6115c28b876147eb90919063ffffffff16565b955060006115d98c8361489890919063ffffffff16565b90506115ee818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167fc5c18d4a60510957a4dc6dbd6d40ecfcfa32ab9517528a6b4052729e48e183d38d6040518082815260200191505060405180910390a2505b5050508080600101915050611276565b5060006116bd876116af6005866148e290919063ffffffff16565b6148e290919063ffffffff16565b905061170b86826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c6861175b838661489890919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b505050505050505050505050565b60006117bd61417a565b6117c784846135ca565b1015905092915050565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6303c2670081565b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961191d83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60208110156119a757600080fd5b8101908080519060200190929190505050611a0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b611a178333614227565b611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b630107ac00821115611b03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c6f636b206475726174696f6e20746f6f206c6f6e670000000000000000000081525060200191505060405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611b538161471a565b611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b611bce816149e3565b15611c41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f70657261746f7220756e64656c65676174696e67000000000000000000000081525060200191505060405180910390fd5b611ca633611c5885426147eb90919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614a099092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f82358c8f3a8a41c7cae8a1196ae5106f7b58ce60eb38b7bc6fe3086d079d2a4e33611cf286426147eb90919063ffffffff16565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a250505050565b600a81565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000019050611d946157bb565b60008090505b8280549050811015611f7457828181548110611db257fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050915081602001516bffffffffffffffffffffffff16421015611f6757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768983600001516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d6020811015611f4457600080fd5b810190808051906020019092919050505015611f665760019350505050611f7c565b5b8080600101915050611d9a565b506000925050505b919050565b60036020528160005260406000208181548110611f9a57fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fd68133614227565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b61209933600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614bf090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f9519d27283057289b75ef2605d6818602822861717fc48c918d37fe1fdc523f433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121e75750805b61223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061588b6037913960400191505060405180910390fd5b42831015612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615925602e913960400191505060405180910390fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006122e782614e66565b905060006122f483614e7d565b905061230b600154836147eb90919063ffffffff16565b8611612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180615a2c6043913960600191505060405180910390fd5b600081148061237057508581115b806123785750835b6123cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180615b166037913960400191505060405180910390fd5b60006123e28785614e9090919063ffffffff16565b905080600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508773ffffffffffffffffffffffffffffffffffffffff167f4ae68879209bc4b489a38251122202a3653305e3d95a27baf7a5681410c90b38886040518082815260200191505060405180910390a25050505050505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006124d582614e7d565b141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806159c9602a913960400191505060405180910390fd5b61253581614eb5565b61258a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806159f36039913960400191505060405180910390fd5b61259382611d45565b15612606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e206e6f74207265636f766572206c6f636b6564207374616b650000000081525060200191505060405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612678836147d1565b905061268e60008461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061272082826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b7f564f402e70218efee257fcbf84954e2e95e3ecc52cebe7b06c79955463752d5a8442604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b60006127de600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546147d1565b9050919050565b6060806000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490509050806040519080825280602002602001820160405280156128615781602001602082028038833980820191505090505b509250806040519080825280602002602001820160405280156128935781602001602082028038833980820191505090505b50915061289e6157bb565b60008090505b82811015612a2757600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181815481106128f957fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050915081600001518582815181106129b557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081602001516bffffffffffffffffffffffff16848281518110612a0e57fe5b60200260200101818152505080806001019150506128a4565b505050915091565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b69021e19e0c9bab240000081565b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d57689612aab83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d6020811015612b3557600080fd5b8101908080519060200190929190505050612b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b60008090506000612bab33613b37565b905060008090505b8451811015612fd1576000858281518110612bca57fe5b60200260200101519050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612d208161471a565b612d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b612d9d828233614747565b15612e10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5374616b652069732072656c656173656400000000000000000000000000000081525060200191505060405180910390fd5b6000612e1b826147d1565b905088811015612eec57612e3881876147eb90919063ffffffff16565b95506000809050612e52818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167ff71d4eeef63c86ffc692e306c623b01b8373e091da8ee455aa0fe26305a4981c836040518082815260200191505060405180910390a250612fc1565b612eff89876147eb90919063ffffffff16565b95506000612f168a8361489890919063ffffffff16565b9050612f2b818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167ff71d4eeef63c86ffc692e306c623b01b8373e091da8ee455aa0fe26305a4981c8b6040518082815260200191505060405180910390a2505b5050508080600101915050612bb3565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561304657600080fd5b505af115801561305a573d6000803e3d6000fd5b505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461310a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180615a96603c913960400191505060405180910390fd5b61311261417a565b83101561316a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806159956034913960400191505060405180910390fd5b603c8151146131c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615a6f6027913960400191505060405180910390fd5b60006131da600083614ef590919063ffffffff16565b905060006131f2601484614ef590919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff16600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ad26023913960400191505060405180910390fd5b60006132f1602885614ef590919063ffffffff16565b90506133418730886000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614f88909392919063ffffffff16565b60405180608001604052806133588842600061508e565b81526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815250600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d876040518082815260200191505060405180910390a250505050505050565b6000806135d78484614227565b90506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600061362b8261471a565b9050600061363a878488614747565b90508380156136465750815b8015613650575080155b156136615761365e836147d1565b94505b5050505092915050565b630107ac0081565b80600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d576896136bb83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d602081101561374557600080fd5b81019080805190602001909291905050506137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663d870c034336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561382a57600080fd5b505af115801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050506138d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f556e7265636f676e697a656420636c61696d616e74000000000000000000000081525060200191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60015481565b60008061396c8484614227565b90506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006139c08261471a565b905060006139cd836149e3565b90508380156139d95750815b80156139e3575080155b156139f4576139f1836147d1565b94505b5050505092915050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613abf57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613a75575b50505050509050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bda5782915050613be7565b613be381613b37565b9150505b919050565b60055481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613c4882826151b790919063ffffffff16565b613cba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f206d61746368696e67206c6f636b2070726573656e74000000000000000081525060200191505060405180910390fd5b6000613ccf838361520690919063ffffffff16565b6bffffffffffffffffffffffff1642101590506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d57689856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d8357600080fd5b505afa158015613d97573d6000803e3d6000fd5b505050506040513d6020811015613dad57600080fd5b81019080805190602001909291905050501590508180613dca5750805b613e3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b207374696c6c2061637469766520616e642076616c6964000000000081525060200191505060405180910390fd5b613e4f8484614bf090919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f53232732101f51eae5873796ea83c72cecad5d155b851edfc11732b9dd4006f685604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050505050565b613eda8142612116565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613fa957508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613ffe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806158e36042913960600191505060405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905061404e8161471a565b156140c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e697469616c697a6174696f6e20706572696f64206973206f76657200000081525060200191505060405180910390fd5b60006140cc826147d1565b90506140e260008361487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061417483826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b50505050565b60006141956303c267006005546147eb90919063ffffffff16565b4210156142165760006141dc6303c267006141ce6141be6005544261489890919063ffffffff16565b600a6152a290919063ffffffff16565b61532890919063ffffffff16565b905061420e6141f582600a61489890919063ffffffff16565b69021e19e0c9bab24000006152a290919063ffffffff16565b915050614224565b69021e19e0c9bab240000090505b90565b60006007600061423684613b37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b813373ffffffffffffffffffffffffffffffffffffffff16600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f74206f70657261746f7220617574686f72697a657200000000000000000081525060200191505060405180910390fd5b81600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961440f83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b81019080805190602001909291905050506144ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661451f84613b37565b73ffffffffffffffffffffffffffffffffffffffff161461458b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c26021913960400191505060405180910390fd5b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000806000614676600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154615372565b9250925092509193909250565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60008061472683614e66565b905061473d600154826147eb90919063ffffffff16565b4211915050919050565b600061475283614eb5565b61475f57600090506147ca565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506147b5838261520690919063ffffffff16565b6bffffffffffffffffffffffff164210159150505b9392505050565b60006001608060020a03604060020283901c169050919050565b600080828401905083811015614869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006148908261488285614e66565b61488b86614e7d565b61508e565b905092915050565b60006148da83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061539f565b905092915050565b600061490a60646148fc84866152a290919063ffffffff16565b61532890919063ffffffff16565b905092915050565b6149de838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061545f565b505050565b6000806149ef83614e7d565b905060008114158015614a0157508042115b915050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050614a576157bb565b60405180604001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846bffffffffffffffffffffffff1681525090506000821415614b9a57846000018190806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050505084600001805490508560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be9565b82856000016001840381548110614bad57fe5b9060005260206000200160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b5050505050565b60008260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114614e6157600083600001805490509050808214614e0057614c596157bb565b846000016001830381548110614c6b57fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905080856000016001850381548110614d2957fe5b9060005260206000200160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505082856001016000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b83600001805480919060019003614e1791906157f9565b5060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505050565b60006001604060020a03604083901c169050919050565b60006001604060020a0382169050919050565b6000614ead614e9e846147d1565b614ea785614e66565b8461508e565b905092915050565b600080614ec183614e7d565b90506000614eda600254836147eb90919063ffffffff16565b905060008214158015614eec57508042115b92505050919050565b6000806014830190508281118015614f0e575080845110155b614f63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159536021913960400191505060405180910390fd5b60006c0100000000000000000000000084602087010151049050809250505092915050565b615088848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061545f565b50505050565b60006001608060020a0384111561510d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f616d6f756e742075696e74313238206f766572666c6f7700000000000000000081525060200191505060405180910390fd5b6001604060020a03828417111561518c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f74696d657374616d702075696e743634206f766572666c6f770000000000000081525060200191505060405180910390fd5b6000604060020285901b90506000604085901b90506000849050808284171793505050509392505050565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561526057600091505061529c565b83600001600182038154811061527257fe5b9060005260206000200160000160149054906101000a90046bffffffffffffffffffffffff169150505b92915050565b6000808314156152b55760009050615322565b60008284029050828482816152c657fe5b041461531d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615af56021913960400191505060405180910390fd5b809150505b92915050565b600061536a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506156aa565b905092915050565b6000806000615380846147d1565b925061538b84614e66565b915061539684614e7d565b90509193909250565b600083831115829061544c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156154115780820151818401526020810190506153f6565b50505050905090810190601f16801561543e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61547e8273ffffffffffffffffffffffffffffffffffffffff16615770565b6154f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061553f578051825260208201915060208101905060208303925061551c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146155a1576040519150601f19603f3d011682016040523d82523d6000602084013e6155a6565b606091505b50915091508161561e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156156a45780806020019051602081101561563d57600080fd5b81019080805190602001909291905050506156a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615b4d602a913960400191505060405180910390fd5b5b50505050565b60008083118290615756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561571b578082015181840152602081019050615700565b50505050905090810190601f1680156157485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161576257fe5b049050809150509392505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156157b25750808214155b92505050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff1681525090565b8154818355818111156158205781836000526020600020918201910161581f9190615825565b5b505050565b61588791905b8082111561588357600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555060010161582b565b5090565b9056fe4f6e6c79206f70657261746f72206f7220746865206f776e6572206f6620746865207374616b652063616e20756e64656c65676174652e436f6e747261637420757365732064656c65676174656420617574686f726974794f6e6c79206f70657261746f72206f7220746865206f776e6572206f6620746865207374616b652063616e2063616e63656c207468652064656c65676174696f6e2e4d6179206e6f742073657420756e64656c65676174696f6e2074696d657374616d7020696e2074686520706173744164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e4f70657261746f7220636f6e7472616374206973206e6f7420617070726f766564546f6b656e7320616d6f756e74206d7573742062652067726561746572207468616e20746865206d696e696d756d207374616b6543616e206e6f74207265636f76657220776974686f757420666972737420756e64656c65676174696e6743616e206e6f74207265636f766572207374616b65206265666f726520756e64656c65676174696f6e20706572696f64206973206f7665722e43616e6e6f7420756e64656c656761746520696e20696e697469616c697a6174696f6e20706572696f642c207573652063616e63656c5374616b6520696e73746561645374616b652064656c65676174696f6e2064617461206d7573742062652070726f76696465642e546f6b656e20636f6e7472616374206d757374206265207468652073616d65206f6e65206c696e6b656420746f207468697320636f6e74726163742e4f70657261746f72206164647265737320697320616c726561647920696e207573652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c7920746865206f776e6572206d617920706f7374706f6e652070726576696f75736c792073657420756e64656c65676174696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158208da251bffcdeefd0a7f543bfbecebd90090fdbe628643cf21a9bdf3feee7a3a064736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102275760003560e01c80639557e0bb11610130578063d98f233d116100b8578063f16547831161007c578063f165478314610f70578063fab46d6614610fd4578063fb1677b11461103a578063fc0c546a146110be578063fdd1f9861461110857610227565b8063d98f233d14610dea578063da8be86414610e4e578063e064172e14610e92578063ec5ffac214610ed6578063ef1f966114610ef457610227565b8063afff33ef116100ff578063afff33ef14610bb3578063b534fbb614610c2b578063ba7bffd314610cc4578063cbe945dc14610d48578063cdc3e90a14610dcc57610227565b80639557e0bb14610abb5780639ff3f12514610b33578063a590ae3614610b51578063aed1ec7214610b9557610227565b80634a1ce599116101b3578063719f308911610182578063719f3089146107ab5780637b1039991461088c57806389002fed146108d65780638e49aa7a146108f45780638f4ffcb1146109b657610227565b80634a1ce5991461067d5780635139a6c5146106c1578063525835f91461070f57806370a082311461075357610227565b80631a051082116101fa5780631a0510821461050957806321e1625e14610527578063280c384614610575578063335e91a1146105935780634239dd8d146105ef57610227565b806309055e901461022c57806310a63ec01461031857806313e7c9d81461039457806314afd79e14610485575b600080fd5b6103166004803603608081101561024257600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029357600080fd5b8201836020820111156102a557600080fd5b803590602001918460208302840111640100000000831117156102c757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611126565b005b61037a6004803603604081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b3565b604051808215151515815260200191505060405180910390f35b6103d6600480360360208110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d1565b604051808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b6104c76004803603602081101561049b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611861565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105116118cd565b6040518082815260200191505060405180910390f35b6105736004803603604081101561053d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118d5565b005b61057d611d40565b6040518082815260200191505060405180910390f35b6105d5600480360360208110156105a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d45565b604051808215151515815260200191505060405180910390f35b61063b6004803603604081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f81565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106bf6004803603602081101561069357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fcc565b005b61070d600480360360408110156106d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612116565b005b6107516004803603602081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612483565b005b6107956004803603602081101561076957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612791565b6040518082815260200191505060405180910390f35b6107ed600480360360208110156107c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e5565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610834578082015181840152602081019050610819565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561087657808201518184015260208101905061085b565b5050505090500194505050505060405180910390f35b610894612a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108de612a55565b6040518082815260200191505060405180910390f35b6109b46004803603604081101561090a57600080fd5b81019080803590602001909291908035906020019064010000000081111561093157600080fd5b82018360208201111561094357600080fd5b8035906020019184602083028401116401000000008311171561096557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612a63565b005b610ab9600480360360808110156109cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a3357600080fd5b820183602082011115610a4557600080fd5b80359060200191846001830284011164010000000083111715610a6757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613065565b005b610b1d60048036036040811015610ad157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135ca565b6040518082815260200191505060405180910390f35b610b3b61366b565b6040518082815260200191505060405180910390f35b610b9360048036036020811015610b6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613673565b005b610b9d613959565b6040518082815260200191505060405180910390f35b610c1560048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061395f565b6040518082815260200191505060405180910390f35b610c6d60048036036020811015610c4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139fe565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610cb0578082015181840152602081019050610c95565b505050509050019250505060405180910390f35b610d0660048036036020811015610cda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613acb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d8a60048036036020811015610d5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b37565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dd4613bec565b6040518082815260200191505060405180910390f35b610e4c60048036036040811015610e0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bf2565b005b610e9060048036036020811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ed0565b005b610ed460048036036020811015610ea857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613edd565b005b610ede61417a565b6040518082815260200191505060405180910390f35b610f5660048036036040811015610f0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614227565b604051808215151515815260200191505060405180910390f35b610fd260048036036040811015610f8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c3565b005b61101660048036036020811015610fea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614626565b60405180848152602001838152602001828152602001935050505060405180910390f35b61107c6004803603602081101561105057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614683565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110c66146ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611110614714565b6040518082815260200191505060405180910390f35b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961116e83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b810190808051906020019092919050505061125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b6000809050600061126e33613b37565b905060008090505b845181101561169457600085828151811061128d57fe5b60200260200101519050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506113e38161471a565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b611460828233614747565b156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5374616b652069732072656c656173656400000000000000000000000000000081525060200191505060405180910390fd5b60006114de826147d1565b90508a8110156115af576114fb81876147eb90919063ffffffff16565b95506000809050611515818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167fc5c18d4a60510957a4dc6dbd6d40ecfcfa32ab9517528a6b4052729e48e183d3836040518082815260200191505060405180910390a250611684565b6115c28b876147eb90919063ffffffff16565b955060006115d98c8361489890919063ffffffff16565b90506115ee818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167fc5c18d4a60510957a4dc6dbd6d40ecfcfa32ab9517528a6b4052729e48e183d38d6040518082815260200191505060405180910390a2505b5050508080600101915050611276565b5060006116bd876116af6005866148e290919063ffffffff16565b6148e290919063ffffffff16565b905061170b86826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c6861175b838661489890919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b505050505050505050505050565b60006117bd61417a565b6117c784846135ca565b1015905092915050565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6303c2670081565b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961191d83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561197d57600080fd5b505afa158015611991573d6000803e3d6000fd5b505050506040513d60208110156119a757600080fd5b8101908080519060200190929190505050611a0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b611a178333614227565b611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b630107ac00821115611b03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c6f636b206475726174696f6e20746f6f206c6f6e670000000000000000000081525060200191505060405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611b538161471a565b611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b611bce816149e3565b15611c41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f70657261746f7220756e64656c65676174696e67000000000000000000000081525060200191505060405180910390fd5b611ca633611c5885426147eb90919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614a099092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f82358c8f3a8a41c7cae8a1196ae5106f7b58ce60eb38b7bc6fe3086d079d2a4e33611cf286426147eb90919063ffffffff16565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a250505050565b600a81565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000019050611d946157bb565b60008090505b8280549050811015611f7457828181548110611db257fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050915081602001516bffffffffffffffffffffffff16421015611f6757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768983600001516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d6020811015611f4457600080fd5b810190808051906020019092919050505015611f665760019350505050611f7c565b5b8080600101915050611d9a565b506000925050505b919050565b60036020528160005260406000208181548110611f9a57fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fd68133614227565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b61209933600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614bf090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f9519d27283057289b75ef2605d6818602822861717fc48c918d37fe1fdc523f433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121e75750805b61223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603781526020018061588b6037913960400191505060405180910390fd5b42831015612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615925602e913960400191505060405180910390fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006122e782614e66565b905060006122f483614e7d565b905061230b600154836147eb90919063ffffffff16565b8611612362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526043815260200180615a2c6043913960600191505060405180910390fd5b600081148061237057508581115b806123785750835b6123cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180615b166037913960400191505060405180910390fd5b60006123e28785614e9090919063ffffffff16565b905080600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508773ffffffffffffffffffffffffffffffffffffffff167f4ae68879209bc4b489a38251122202a3653305e3d95a27baf7a5681410c90b38886040518082815260200191505060405180910390a25050505050505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006124d582614e7d565b141561252c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806159c9602a913960400191505060405180910390fd5b61253581614eb5565b61258a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806159f36039913960400191505060405180910390fd5b61259382611d45565b15612606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e206e6f74207265636f766572206c6f636b6564207374616b650000000081525060200191505060405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612678836147d1565b905061268e60008461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061272082826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b7f564f402e70218efee257fcbf84954e2e95e3ecc52cebe7b06c79955463752d5a8442604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b60006127de600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546147d1565b9050919050565b6060806000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490509050806040519080825280602002602001820160405280156128615781602001602082028038833980820191505090505b509250806040519080825280602002602001820160405280156128935781602001602082028038833980820191505090505b50915061289e6157bb565b60008090505b82811015612a2757600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181815481106128f957fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050915081600001518582815181106129b557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081602001516bffffffffffffffffffffffff16848281518110612a0e57fe5b60200260200101818152505080806001019150506128a4565b505050915091565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b69021e19e0c9bab240000081565b33600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d57689612aab83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b0b57600080fd5b505afa158015612b1f573d6000803e3d6000fd5b505050506040513d6020811015612b3557600080fd5b8101908080519060200190929190505050612b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b60008090506000612bab33613b37565b905060008090505b8451811015612fd1576000858281518110612bca57fe5b60200260200101519050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612d208161471a565b612d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f70657261746f72207374616b65206d7573742062652061637469766500000081525060200191505060405180910390fd5b612d9d828233614747565b15612e10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5374616b652069732072656c656173656400000000000000000000000000000081525060200191505060405180910390fd5b6000612e1b826147d1565b905088811015612eec57612e3881876147eb90919063ffffffff16565b95506000809050612e52818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167ff71d4eeef63c86ffc692e306c623b01b8373e091da8ee455aa0fe26305a4981c836040518082815260200191505060405180910390a250612fc1565b612eff89876147eb90919063ffffffff16565b95506000612f168a8361489890919063ffffffff16565b9050612f2b818461487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508373ffffffffffffffffffffffffffffffffffffffff167ff71d4eeef63c86ffc692e306c623b01b8373e091da8ee455aa0fe26305a4981c8b6040518082815260200191505060405180910390a2505b5050508080600101915050612bb3565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561304657600080fd5b505af115801561305a573d6000803e3d6000fd5b505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461310a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180615a96603c913960400191505060405180910390fd5b61311261417a565b83101561316a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806159956034913960400191505060405180910390fd5b603c8151146131c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180615a6f6027913960400191505060405180910390fd5b60006131da600083614ef590919063ffffffff16565b905060006131f2601484614ef590919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff16600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ad26023913960400191505060405180910390fd5b60006132f1602885614ef590919063ffffffff16565b90506133418730886000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614f88909392919063ffffffff16565b60405180608001604052806133588842600061508e565b81526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815250600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d876040518082815260200191505060405180910390a250505050505050565b6000806135d78484614227565b90506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600061362b8261471a565b9050600061363a878488614747565b90508380156136465750815b8015613650575080155b156136615761365e836147d1565b94505b5050505092915050565b630107ac0081565b80600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d576896136bb83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d602081101561374557600080fd5b81019080805190602001909291905050506137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663d870c034336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561382a57600080fd5b505af115801561383e573d6000803e3d6000fd5b505050506040513d602081101561385457600080fd5b81019080805190602001909291905050506138d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f556e7265636f676e697a656420636c61696d616e74000000000000000000000081525060200191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60015481565b60008061396c8484614227565b90506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006139c08261471a565b905060006139cd836149e3565b90508380156139d95750815b80156139e3575080155b156139f4576139f1836147d1565b94505b5050505092915050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613abf57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613a75575b50505050509050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bda5782915050613be7565b613be381613b37565b9150505b919050565b60055481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050613c4882826151b790919063ffffffff16565b613cba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f206d61746368696e67206c6f636b2070726573656e74000000000000000081525060200191505060405180910390fd5b6000613ccf838361520690919063ffffffff16565b6bffffffffffffffffffffffff1642101590506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d57689856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d8357600080fd5b505afa158015613d97573d6000803e3d6000fd5b505050506040513d6020811015613dad57600080fd5b81019080805190602001909291905050501590508180613dca5750805b613e3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c6f636b207374696c6c2061637469766520616e642076616c6964000000000081525060200191505060405180910390fd5b613e4f8484614bf090919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f53232732101f51eae5873796ea83c72cecad5d155b851edfc11732b9dd4006f685604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050505050565b613eda8142612116565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613fa957508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613ffe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806158e36042913960600191505060405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905061404e8161471a565b156140c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e697469616c697a6174696f6e20706572696f64206973206f76657200000081525060200191505060405180910390fd5b60006140cc826147d1565b90506140e260008361487390919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061417483826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166149129092919063ffffffff16565b50505050565b60006141956303c267006005546147eb90919063ffffffff16565b4210156142165760006141dc6303c267006141ce6141be6005544261489890919063ffffffff16565b600a6152a290919063ffffffff16565b61532890919063ffffffff16565b905061420e6141f582600a61489890919063ffffffff16565b69021e19e0c9bab24000006152a290919063ffffffff16565b915050614224565b69021e19e0c9bab240000090505b90565b60006007600061423684613b37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b813373ffffffffffffffffffffffffffffffffffffffff16600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f74206f70657261746f7220617574686f72697a657200000000000000000081525060200191505060405180910390fd5b81600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d5768961440f83613b37565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561446f57600080fd5b505afa158015614483573d6000803e3d6000fd5b505050506040513d602081101561449957600080fd5b81019080805190602001909291905050506144ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159746021913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661451f84613b37565b73ffffffffffffffffffffffffffffffffffffffff161461458b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c26021913960400191505060405180910390fd5b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000806000614676600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154615372565b9250925092509193909250565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60008061472683614e66565b905061473d600154826147eb90919063ffffffff16565b4211915050919050565b600061475283614eb5565b61475f57600090506147ca565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506147b5838261520690919063ffffffff16565b6bffffffffffffffffffffffff164210159150505b9392505050565b60006001608060020a03604060020283901c169050919050565b600080828401905083811015614869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006148908261488285614e66565b61488b86614e7d565b61508e565b905092915050565b60006148da83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061539f565b905092915050565b600061490a60646148fc84866152a290919063ffffffff16565b61532890919063ffffffff16565b905092915050565b6149de838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061545f565b505050565b6000806149ef83614e7d565b905060008114158015614a0157508042115b915050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050614a576157bb565b60405180604001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001846bffffffffffffffffffffffff1681525090506000821415614b9a57846000018190806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050505084600001805490508560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be9565b82856000016001840381548110614bad57fe5b9060005260206000200160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b5050505050565b60008260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114614e6157600083600001805490509050808214614e0057614c596157bb565b846000016001830381548110614c6b57fe5b906000526020600020016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905080856000016001850381548110614d2957fe5b9060005260206000200160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505082856001016000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b83600001805480919060019003614e1791906157f9565b5060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505050565b60006001604060020a03604083901c169050919050565b60006001604060020a0382169050919050565b6000614ead614e9e846147d1565b614ea785614e66565b8461508e565b905092915050565b600080614ec183614e7d565b90506000614eda600254836147eb90919063ffffffff16565b905060008214158015614eec57508042115b92505050919050565b6000806014830190508281118015614f0e575080845110155b614f63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159536021913960400191505060405180910390fd5b60006c0100000000000000000000000084602087010151049050809250505092915050565b615088848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061545f565b50505050565b60006001608060020a0384111561510d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f616d6f756e742075696e74313238206f766572666c6f7700000000000000000081525060200191505060405180910390fd5b6001604060020a03828417111561518c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f74696d657374616d702075696e743634206f766572666c6f770000000000000081525060200191505060405180910390fd5b6000604060020285901b90506000604085901b90506000849050808284171793505050509392505050565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561526057600091505061529c565b83600001600182038154811061527257fe5b9060005260206000200160000160149054906101000a90046bffffffffffffffffffffffff169150505b92915050565b6000808314156152b55760009050615322565b60008284029050828482816152c657fe5b041461531d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615af56021913960400191505060405180910390fd5b809150505b92915050565b600061536a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506156aa565b905092915050565b6000806000615380846147d1565b925061538b84614e66565b915061539684614e7d565b90509193909250565b600083831115829061544c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156154115780820151818401526020810190506153f6565b50505050905090810190601f16801561543e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61547e8273ffffffffffffffffffffffffffffffffffffffff16615770565b6154f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061553f578051825260208201915060208101905060208303925061551c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146155a1576040519150601f19603f3d011682016040523d82523d6000602084013e6155a6565b606091505b50915091508161561e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156156a45780806020019051602081101561563d57600080fd5b81019080805190602001909291905050506156a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615b4d602a913960400191505060405180910390fd5b5b50505050565b60008083118290615756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561571b578082015181840152602081019050615700565b50505050905090810190601f1680156157485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161576257fe5b049050809150509392505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156157b25750808214155b92505050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff1681525090565b8154818355818111156158205781836000526020600020918201910161581f9190615825565b5b505050565b61588791905b8082111561588357600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555060010161582b565b5090565b9056fe4f6e6c79206f70657261746f72206f7220746865206f776e6572206f6620746865207374616b652063616e20756e64656c65676174652e436f6e747261637420757365732064656c65676174656420617574686f726974794f6e6c79206f70657261746f72206f7220746865206f776e6572206f6620746865207374616b652063616e2063616e63656c207468652064656c65676174696f6e2e4d6179206e6f742073657420756e64656c65676174696f6e2074696d657374616d7020696e2074686520706173744164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e4f70657261746f7220636f6e7472616374206973206e6f7420617070726f766564546f6b656e7320616d6f756e74206d7573742062652067726561746572207468616e20746865206d696e696d756d207374616b6543616e206e6f74207265636f76657220776974686f757420666972737420756e64656c65676174696e6743616e206e6f74207265636f766572207374616b65206265666f726520756e64656c65676174696f6e20706572696f64206973206f7665722e43616e6e6f7420756e64656c656761746520696e20696e697469616c697a6174696f6e20706572696f642c207573652063616e63656c5374616b6520696e73746561645374616b652064656c65676174696f6e2064617461206d7573742062652070726f76696465642e546f6b656e20636f6e7472616374206d757374206265207468652073616d65206f6e65206c696e6b656420746f207468697320636f6e74726163742e4f70657261746f72206164647265737320697320616c726561647920696e207573652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c7920746865206f776e6572206d617920706f7374706f6e652070726576696f75736c792073657420756e64656c65676174696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158208da251bffcdeefd0a7f543bfbecebd90090fdbe628643cf21a9bdf3feee7a3a064736f6c63430005110032",
  "networks": {
    "1": {
      "events": {
        "0x53232732101f51eae5873796ea83c72cecad5d155b851edfc11732b9dd4006f6": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "lockCreator",
              "type": "address"
            }
          ],
          "name": "ExpiredLockReleased",
          "type": "event"
        },
        "0x9519d27283057289b75ef2605d6818602822861717fc48c918d37fe1fdc523f4": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "lockCreator",
              "type": "address"
            }
          ],
          "name": "LockReleased",
          "type": "event"
        },
        "0x564f402e70218efee257fcbf84954e2e95e3ecc52cebe7b06c79955463752d5a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "recoveredAt",
              "type": "uint256"
            }
          ],
          "name": "RecoveredStake",
          "type": "event"
        },
        "0x82358c8f3a8a41c7cae8a1196ae5106f7b58ce60eb38b7bc6fe3086d079d2a4e": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "lockCreator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "until",
              "type": "uint256"
            }
          ],
          "name": "StakeLocked",
          "type": "event"
        },
        "0x9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "name": "Staked",
          "type": "event"
        },
        "0xc5c18d4a60510957a4dc6dbd6d40ecfcfa32ab9517528a6b4052729e48e183d3": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TokensSeized",
          "type": "event"
        },
        "0xf71d4eeef63c86ffc692e306c623b01b8373e091da8ee455aa0fe26305a4981c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "name": "TokensSlashed",
          "type": "event"
        },
        "0x4ae68879209bc4b489a38251122202a3653305e3d95a27baf7a5681410c90b38": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "undelegatedAt",
              "type": "uint256"
            }
          ],
          "name": "Undelegated",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x6D1140a8c8e6Fac242652F0a5A8171b898c67600",
      "transactionHash": "0x9b3df929d30ccbe6e7e43d447a6c01777bc2462544ea5830c58f82deb369057e"
    }
  },
  "schemaVersion": "3.1.0",
  "updatedAt": "2020-04-28T03:05:35.395Z",
  "networkType": "ethereum"
}
