{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721StakingERC20RewardsLinearPoolMock",
  "sourceName": "contracts/mocks/staking/linear/ERC721StakingERC20RewardsLinearPoolMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC721",
          "name": "stakingToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "rewardToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rewardHolder",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "scalingFactorDecimals",
          "type": "uint8"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "InvalidClaimSum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDuration",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "InvalidRecoveryToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidRewardAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidStakeAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidWithdrawAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "withdraw",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughStake",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "NotTheTokenOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentRewardRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newRewardRate",
          "type": "uint256"
        }
      ],
      "name": "RewardDilution",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RewardOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ScalingFactorOutOfBounds",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "Claimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "RewardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewardHolder",
          "type": "address"
        }
      ],
      "name": "RewardHolderSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "REWARDER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARD_TOKEN",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SCALING_FACTOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STAKING_TOKEN",
      "outputs": [
        {
          "internalType": "contract IERC721",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "__msgData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "addReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributionEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "earned",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasRole_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastTimeRewardApplicable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastUpdated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardHolder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewardPerStakePointPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "paid",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePointStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "rewardHolder_",
          "type": "address"
        }
      ],
      "name": "setRewardHolder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "staked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenOwners",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101003461027357601f61385138819003918201601f19168301916001600160401b038311848410176102785780849260a0946040528339810103126102735780516001600160a01b0381168103610273576020820151906001600160a01b03821682036102735760408301516001600160a01b03811693908490036102735760608101519060ff82168092036102735760800151906001600160a01b03821682036102735733610214575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d916307f5828d60e41b600052826020526040600020600160ff198254161790556001600055608052604d81101561020357604d81116101ed57600a0a60a052630a85bd0160e11b6000526020526040600020600160ff1982541617905560c05260e0528060018060a01b0319600a541617600a55604051907f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d29600080a26135c2908161028f823960805181818161200701528181612eb50152818161326801526133b7015260a0518181816105c2015281816108560152611316015260c051818181610a6c01528181611c7601528181611edb015281816120a6015281816125c00152818161288e01526129f1015260e0518181816108f20152610e4c0152f35b634e487b7160e01b600052601160045260246000fd5b63a54ad6c560e01b60005260046000fd5b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100ab565b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80628cc26214612a7d57806301ffc9a714612a155780630479d644146129a65780630700037d146129435780630968f264146124d5578063150b7a021461202b5780632b4c9f1614611fbc5780632c9d0b8014611f835780632d1e0c0214611af55780632f2ff15d1461194d57806331e66e1e146118fb578063569c93d2146118a9578063572b6c051461185d5780636806cc931461174c57806373c8a9581461161057806375c93bb9146112585780637b0a47ee1461121c57806380faa57d146111db578063817b1cd21461119f5780638580cf76146111465780638bb9c5bf14610fdc5780638da5cb5b14610f6a57806391d1485414610ed357806398807d8414610e7057806399248ea714610e015780639d696e3614610dc5578063c3666c3614610a54578063c5c8f770146109f1578063c63ff8dd146107d0578063d0b06f5d14610794578063d547741f146105e5578063ef4cadc51461058c578063efa90b5414610550578063f2fde38b1461042a578063f7ba94bd146102085763f8a14f46146101a857600080fd5b346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260098452205416604051908152f35b80fd5b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657610258903690600401612b77565b60243567ffffffffffffffff811161042257610278903690600401612b77565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806102b9613251565b92541691169081036103f557508181036103cd57845b8181106102da578580f35b6102e5818387612f3c565b3573ffffffffffffffffffffffffffffffffffffffff81168091036103c95761030f828587612f3c565b3590814710610399578780809381935af13d15610391573d9061033182612d7f565b9161033f6040519384612d0f565b82523d88602084013e5b1561035757506001016102cf565b80518790156103695750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b606090610349565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b5080fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557610462612abf565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061048c613251565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610525575073ffffffffffffffffffffffffffffffffffffffff16918282036104d2578380f35b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a33880808380f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008552600452602484fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600554604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435610620612ae7565b610628613251565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff84169081036103f557507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054166106da578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610789918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600254604051908152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657610820903690600401612b0a565b919061082a6130ec565b610832613251565b9061083c82613067565b61084582612ca5565b9384610854575b836001815580f35b7f000000000000000000000000000000000000000000000000000000000000000061087f8187612e1f565b9080156109c457600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152908616604482015260648082018490528152610916906108f0608482612d0f565b7f0000000000000000000000000000000000000000000000000000000000000000613501565b856109975760009606939573ffffffffffffffffffffffffffffffffffffffff7f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca959697169586825260076020526040822055610980604051948594606086526060860191612b38565b91602084015260408301520390a28038808061084c565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff610a43612abf565b168152600883522054604051908152f35b503461020557610a6336612ba8565b929490939092917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16875b828103610d285750507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610aeb613251565b92541691169081036103f55750808214801590610d1e575b610cf657865b828110610b14578780f35b73ffffffffffffffffffffffffffffffffffffffff610b3c610b3783858b612f3c565b612f7b565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610ceb578a91610cae575b5015610c8357508773ffffffffffffffffffffffffffffffffffffffff610bcb610b3784868c612f3c565b16610bda610b3784878a612f3c565b610be584888b612f3c565b35823b15610422576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529082908290606490829084905af18015610c7857610c5f575b5050600101610b09565b81610c6991612d0f565b610c74578738610c55565b8780fd5b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b90506020813d8211610ce3575b81610cc860209383612d0f565b81010312610cdf57610cd990613127565b38610ba0565b8980fd5b3d9150610cbb565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415610b03565b8173ffffffffffffffffffffffffffffffffffffffff610d4c610b3784878d612f3c565b1614610d61575b610d5c90612f0f565b610aa3565b610d6c818689612f3c565b35808a52600960205273ffffffffffffffffffffffffffffffffffffffff60408b205416610d9a5750610d53565b7f38c4e116000000000000000000000000000000000000000000000000000000008a52600452602489fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600454604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff610ec2612abf565b168152600683522054604051908152f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055773ffffffffffffffffffffffffffffffffffffffff6040610f22612ae7565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611039613251565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611100578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600154604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612efd565b604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435602435611291613251565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156115aa57821561158257801561155a577f0000000000000000000000000000000000000000000000000000000000000000808402908482041480910290156115325761134e612e58565b6004556005544210801590611527575b611517575b600554906113718342612c98565b914281116113da5750928273ffffffffffffffffffffffffffffffffffffffff926113bf6040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847497612e1f565b6003556005555b42600255835195865260208601521692a280f35b916003939193546113f46113ee4286612c3b565b82612c77565b850194851094851502946114ef57838211611463575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec84749260409261145b61145473ffffffffffffffffffffffffffffffffffffffff944290612c3b565b8092612e1f565b6003556113c6565b916114719193508094612e1f565b908082106114c157509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474956003556005556113c6565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b61151f612efd565b600255611363565b50600154151561135e565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346102055761161f36612ba8565b92939186959195507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611666613251565b92541691169081036103f55750808314801590611742575b610cf657865b83811061168f578780f35b61169a818388612f3c565b359073ffffffffffffffffffffffffffffffffffffffff8216820361173e576117386001926116cd610b37848989612f3c565b906116d9848a8d612f3c565b3573ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252611733606483612d0f565b613501565b01611684565b8880fd5b508383141561167e565b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557611784612abf565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806117c3613251565b92541691169081036103f5575073ffffffffffffffffffffffffffffffffffffffff600a5491169073ffffffffffffffffffffffffffffffffffffffff8116820361180c578280f35b7fffffffffffffffffffffffff0000000000000000000000000000000000000000168117600a557f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d298280a238808280f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602061189f61189a612abf565b612e9e565b6040519015158152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576119326133a0565b611949604051928392602084526020840191612b38565b0390f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435611988612ae7565b611990613251565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff84169081036103f557507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611a43578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610789918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657611b40903690600401612b0a565b611b48613251565b60405192611b9b84611b6f6020820193600185526040830196604088526060840191612b38565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285612d0f565b611ba36130ec565b611bac82613067565b84928451850191604086602085019403126103c957611bca90613127565b905167ffffffffffffffff81116103c95785019082603f830112156103c957602082015191611bf883612d7f565b92611c066040519485612d0f565b80845260208401946040838301011161173e57846040611c269301612db9565b868251830160208482031261042657611c3e85613127565b15611e565750505090602082611c5793510101906131a9565b905084815191819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169073ffffffffffffffffffffffffffffffffffffffff8616925b858103611d67575050505050505b8115611d3f579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e92611d0883600154612c98565b6001551692838552600660205260408520611d24838254612c98565b9055611d356040519283928361304b565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b611daf611d74828461323d565b5198898752600960205260408720867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612c8a565b97833b15611e52576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891660048201523060248201526044810191909152858160648183885af1908115611e47578691611e2e575b5050611e2990612f0f565b611cb0565b81611e3891612d0f565b611e43578438611e1e565b8480fd5b6040513d88823e3d90fd5b8580fd5b60209194929650611e6993500190613134565b809150825260096020526040822073ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600193611ec4575b5050611cbe565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15611f7f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152306024820152604481019290925282908290606490829084905af18015610c785715611ebd5781611f7491612d0f565b610422578338611ebd565b8280fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612e58565b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557612063612abf565b5061206c612ae7565b9060643567ffffffffffffffff81116104265761208d903690600401612b0a565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036124ad57604051928260208501526044356040850152604084526120ee606085612d0f565b604051916020830184815261211384611b6f604082019860408a526060830190612ddc565b61211b6130ec565b61212483613067565b84958451850191604086602085019403126103c95761214290613127565b905167ffffffffffffffff81116103c95785019082603f830112156103c957602082015161216f81612d7f565b9261217d6040519485612d0f565b81845260208401946040828401011161173e579084604061219e9301612db9565b81518201602083820312610c74576121b584613127565b156123ad575050906020826121cd93510101906131a9565b80519273ffffffffffffffffffffffffffffffffffffffff8516925090865b8481036122c65750505050505b831561229e578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e926122446001978854612c98565b8755169283855260066020526040852061225f838254612c98565b90556122706040519283928361304b565b0390a25560206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b6004837f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b61230e6122d3828461323d565b51998a8a52600960205260408a20867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612c8a565b98833b1561173e576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526044810191909152888160648183885af180156123a25790899161238d575b505061238890612f0f565b6121ec565b8161239791612d0f565b610c7457873861237d565b6040513d8b823e3d90fd5b60209198506123bf9392500190613134565b809150855260096020526040852073ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560019561241a575b50506121f9565b813b15611e43576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015230602482015260448101919091529084908290606490829084905af180156124a25790849115612413578161249791612d0f565b611f7f578238612413565b6040513d86823e3d90fd5b6004827fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657612525903690600401612b0a565b61252d613251565b8361253783612d7f565b936125456040519586612d0f565b83855260208501933681830111611f7f57806020928637850101526125686130ec565b61257181613067565b839183518401602085820312611e525761258a82613127565b156127e957506125a19060208551860101906131a9565b905084815191819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169073ffffffffffffffffffffffffffffffffffffffff8616925b8581036126df575050505050505b81156126b75773ffffffffffffffffffffffffffffffffffffffff1691828452600660205260408420548281106126835790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e939285875260066020520360408620558160015403600155611d356040519283928361304b565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b6127556126ec828461323d565b5198898752600960205261271e73ffffffffffffffffffffffffffffffffffffffff6040892054168b8b828a14613151565b8987526009602052604087207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055612c8a565b97833b15611e52576040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff891660248201526044810191909152858160648183885af1908115611e475786916127d4575b50506127cf90612f0f565b6125fa565b816127de91612d0f565b611e435784386127c4565b6127f892935060200190613134565b809291508452600960205261284173ffffffffffffffffffffffffffffffffffffffff60408620541683838273ffffffffffffffffffffffffffffffffffffffff821614613151565b8184526009602052604084207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558360019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b15611f7f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481019190915291908290606490829084905af1801561293857612924575b50612608565b8461293191959295612d0f565b923861291e565b6040513d87823e3d90fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff612995612abf565b168152600783522054604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361020557602061189f83612f9c565b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612aba612abf565b612ca5565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612ae257565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203612ae257565b9181601f84011215612ae25782359167ffffffffffffffff8311612ae25760208381860195010111612ae257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215612ae25782359167ffffffffffffffff8311612ae2576020808501948460051b010111612ae257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112612ae25760043567ffffffffffffffff8111612ae25781612bf191600401612b77565b9290929160243567ffffffffffffffff8111612ae25781612c1491600401612b77565b929092916044359067ffffffffffffffff8211612ae257612c3791600401612b77565b9091565b91908203918211612c4857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810292918115918404141715612c4857565b9060018201809211612c4857565b91908201809211612c4857565b73ffffffffffffffffffffffffffffffffffffffff612d0c9116806000526006602052612cf7604060002054612cf1612cdc612e58565b84600052600860205260406000205490612c3b565b90612c77565b90600052600760205260406000205490612c98565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612d5057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612d5057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110612dcc5750506000910152565b8181015183820152602001612dbc565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612e1881518092818752878088019101612db9565b0116010190565b8115612e29570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015612e9757612d0c90612e9160045491612e8c612e83612e7a612efd565b60025490612c3b565b60035490612c77565b612e1f565b90612c98565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612ef65773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b600554804210600014612d0c57504290565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c485760010190565b9190811015612f4c5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612ae25790565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613045577f01ffc9a700000000000000000000000000000000000000000000000000000000811461303f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b929190613062602091604086526040860190612ddc565b930152565b61306f612e58565b60045560055442108015906130e1575b6130d1575b73ffffffffffffffffffffffffffffffffffffffff811690816130a5575050565b6130ae90612ca5565b816000526007602052604060002055600454906000526008602052604060002055565b6130d9612efd565b600255613084565b50600154151561307f565b6002600054146130fd576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b51908115158203612ae257565b9190826040910312612ae257602061314b83613127565b92015190565b1561315b57505050565b73ffffffffffffffffffffffffffffffffffffffff935083907f964ebadd00000000000000000000000000000000000000000000000000000000600052166004526024521660445260646000fd5b9190604083820312612ae2576131be83613127565b9260208101519067ffffffffffffffff8211612ae257019080601f83011215612ae25781519167ffffffffffffffff8311612d50578260051b90604051936132096020840186612d0f565b8452602080850192820101928311612ae257602001905b82821061322d5750505090565b8151815260209182019101613220565b8051821015612f4c5760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613391573233148015613396575b613391577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156132d9575b50612d0c57503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156133855760009161334b575b50386132cf565b90506020813d60201161337d575b8161336660209383612d0f565b81010312612ae25761337790613127565b38613344565b3d9150613359565b6040513d6000823e3d90fd5b503390565b5060183610613298565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156134ef5732331480156134f7575b6134ef57803314908115613433575b50613402576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211612ae25760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115613385576000916134b5575b50386133f6565b90506020813d6020116134e7575b816134d060209383612d0f565b81010312612ae2576134e190613127565b386134ae565b3d91506134c3565b506000903690565b50601836106133e7565b906000602091828151910182855af115613385576000513d613583575073ffffffffffffffffffffffffffffffffffffffff81163b155b61353f5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6001141561353856fea264697066735822122097c315d55a106cb221950b168ed0604a66be171153fc5d2e2e6a1d37a0f5973664736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c80628cc26214612a7d57806301ffc9a714612a155780630479d644146129a65780630700037d146129435780630968f264146124d5578063150b7a021461202b5780632b4c9f1614611fbc5780632c9d0b8014611f835780632d1e0c0214611af55780632f2ff15d1461194d57806331e66e1e146118fb578063569c93d2146118a9578063572b6c051461185d5780636806cc931461174c57806373c8a9581461161057806375c93bb9146112585780637b0a47ee1461121c57806380faa57d146111db578063817b1cd21461119f5780638580cf76146111465780638bb9c5bf14610fdc5780638da5cb5b14610f6a57806391d1485414610ed357806398807d8414610e7057806399248ea714610e015780639d696e3614610dc5578063c3666c3614610a54578063c5c8f770146109f1578063c63ff8dd146107d0578063d0b06f5d14610794578063d547741f146105e5578063ef4cadc51461058c578063efa90b5414610550578063f2fde38b1461042a578063f7ba94bd146102085763f8a14f46146101a857600080fd5b346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260098452205416604051908152f35b80fd5b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657610258903690600401612b77565b60243567ffffffffffffffff811161042257610278903690600401612b77565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806102b9613251565b92541691169081036103f557508181036103cd57845b8181106102da578580f35b6102e5818387612f3c565b3573ffffffffffffffffffffffffffffffffffffffff81168091036103c95761030f828587612f3c565b3590814710610399578780809381935af13d15610391573d9061033182612d7f565b9161033f6040519384612d0f565b82523d88602084013e5b1561035757506001016102cf565b80518790156103695750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b606090610349565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b5080fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557610462612abf565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061048c613251565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610525575073ffffffffffffffffffffffffffffffffffffffff16918282036104d2578380f35b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a33880808380f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008552600452602484fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600554604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435610620612ae7565b610628613251565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff84169081036103f557507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054166106da578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610789918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600254604051908152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657610820903690600401612b0a565b919061082a6130ec565b610832613251565b9061083c82613067565b61084582612ca5565b9384610854575b836001815580f35b7f000000000000000000000000000000000000000000000000000000000000000061087f8187612e1f565b9080156109c457600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152908616604482015260648082018490528152610916906108f0608482612d0f565b7f0000000000000000000000000000000000000000000000000000000000000000613501565b856109975760009606939573ffffffffffffffffffffffffffffffffffffffff7f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca959697169586825260076020526040822055610980604051948594606086526060860191612b38565b91602084015260408301520390a28038808061084c565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff610a43612abf565b168152600883522054604051908152f35b503461020557610a6336612ba8565b929490939092917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16875b828103610d285750507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610aeb613251565b92541691169081036103f55750808214801590610d1e575b610cf657865b828110610b14578780f35b73ffffffffffffffffffffffffffffffffffffffff610b3c610b3783858b612f3c565b612f7b565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610ceb578a91610cae575b5015610c8357508773ffffffffffffffffffffffffffffffffffffffff610bcb610b3784868c612f3c565b16610bda610b3784878a612f3c565b610be584888b612f3c565b35823b15610422576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529082908290606490829084905af18015610c7857610c5f575b5050600101610b09565b81610c6991612d0f565b610c74578738610c55565b8780fd5b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b90506020813d8211610ce3575b81610cc860209383612d0f565b81010312610cdf57610cd990613127565b38610ba0565b8980fd5b3d9150610cbb565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415610b03565b8173ffffffffffffffffffffffffffffffffffffffff610d4c610b3784878d612f3c565b1614610d61575b610d5c90612f0f565b610aa3565b610d6c818689612f3c565b35808a52600960205273ffffffffffffffffffffffffffffffffffffffff60408b205416610d9a5750610d53565b7f38c4e116000000000000000000000000000000000000000000000000000000008a52600452602489fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600454604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff610ec2612abf565b168152600683522054604051908152f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055773ffffffffffffffffffffffffffffffffffffffff6040610f22612ae7565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611039613251565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611100578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600154604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612efd565b604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435602435611291613251565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156115aa57821561158257801561155a577f0000000000000000000000000000000000000000000000000000000000000000808402908482041480910290156115325761134e612e58565b6004556005544210801590611527575b611517575b600554906113718342612c98565b914281116113da5750928273ffffffffffffffffffffffffffffffffffffffff926113bf6040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847497612e1f565b6003556005555b42600255835195865260208601521692a280f35b916003939193546113f46113ee4286612c3b565b82612c77565b850194851094851502946114ef57838211611463575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec84749260409261145b61145473ffffffffffffffffffffffffffffffffffffffff944290612c3b565b8092612e1f565b6003556113c6565b916114719193508094612e1f565b908082106114c157509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474956003556005556113c6565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b61151f612efd565b600255611363565b50600154151561135e565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346102055761161f36612ba8565b92939186959195507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611666613251565b92541691169081036103f55750808314801590611742575b610cf657865b83811061168f578780f35b61169a818388612f3c565b359073ffffffffffffffffffffffffffffffffffffffff8216820361173e576117386001926116cd610b37848989612f3c565b906116d9848a8d612f3c565b3573ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252611733606483612d0f565b613501565b01611684565b8880fd5b508383141561167e565b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557611784612abf565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806117c3613251565b92541691169081036103f5575073ffffffffffffffffffffffffffffffffffffffff600a5491169073ffffffffffffffffffffffffffffffffffffffff8116820361180c578280f35b7fffffffffffffffffffffffff0000000000000000000000000000000000000000168117600a557f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d298280a238808280f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602061189f61189a612abf565b612e9e565b6040519015158152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576119326133a0565b611949604051928392602084526020840191612b38565b0390f35b50346102055760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435611988612ae7565b611990613251565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff84169081036103f557507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611a43578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610789918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657611b40903690600401612b0a565b611b48613251565b60405192611b9b84611b6f6020820193600185526040830196604088526060840191612b38565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285612d0f565b611ba36130ec565b611bac82613067565b84928451850191604086602085019403126103c957611bca90613127565b905167ffffffffffffffff81116103c95785019082603f830112156103c957602082015191611bf883612d7f565b92611c066040519485612d0f565b80845260208401946040838301011161173e57846040611c269301612db9565b868251830160208482031261042657611c3e85613127565b15611e565750505090602082611c5793510101906131a9565b905084815191819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169073ffffffffffffffffffffffffffffffffffffffff8616925b858103611d67575050505050505b8115611d3f579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e92611d0883600154612c98565b6001551692838552600660205260408520611d24838254612c98565b9055611d356040519283928361304b565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b611daf611d74828461323d565b5198898752600960205260408720867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612c8a565b97833b15611e52576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff891660048201523060248201526044810191909152858160648183885af1908115611e47578691611e2e575b5050611e2990612f0f565b611cb0565b81611e3891612d0f565b611e43578438611e1e565b8480fd5b6040513d88823e3d90fd5b8580fd5b60209194929650611e6993500190613134565b809150825260096020526040822073ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600193611ec4575b5050611cbe565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15611f7f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152306024820152604481019290925282908290606490829084905af18015610c785715611ebd5781611f7491612d0f565b610422578338611ebd565b8280fd5b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612e58565b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557612063612abf565b5061206c612ae7565b9060643567ffffffffffffffff81116104265761208d903690600401612b0a565b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168033036124ad57604051928260208501526044356040850152604084526120ee606085612d0f565b604051916020830184815261211384611b6f604082019860408a526060830190612ddc565b61211b6130ec565b61212483613067565b84958451850191604086602085019403126103c95761214290613127565b905167ffffffffffffffff81116103c95785019082603f830112156103c957602082015161216f81612d7f565b9261217d6040519485612d0f565b81845260208401946040828401011161173e579084604061219e9301612db9565b81518201602083820312610c74576121b584613127565b156123ad575050906020826121cd93510101906131a9565b80519273ffffffffffffffffffffffffffffffffffffffff8516925090865b8481036122c65750505050505b831561229e578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e926122446001978854612c98565b8755169283855260066020526040852061225f838254612c98565b90556122706040519283928361304b565b0390a25560206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b6004837f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b61230e6122d3828461323d565b51998a8a52600960205260408a20867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612c8a565b98833b1561173e576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526044810191909152888160648183885af180156123a25790899161238d575b505061238890612f0f565b6121ec565b8161239791612d0f565b610c7457873861237d565b6040513d8b823e3d90fd5b60209198506123bf9392500190613134565b809150855260096020526040852073ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560019561241a575b50506121f9565b813b15611e43576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015230602482015260448101919091529084908290606490829084905af180156124a25790849115612413578161249791612d0f565b611f7f578238612413565b6040513d86823e3d90fd5b6004827fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102055760043567ffffffffffffffff811161042657612525903690600401612b0a565b61252d613251565b8361253783612d7f565b936125456040519586612d0f565b83855260208501933681830111611f7f57806020928637850101526125686130ec565b61257181613067565b839183518401602085820312611e525761258a82613127565b156127e957506125a19060208551860101906131a9565b905084815191819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169073ffffffffffffffffffffffffffffffffffffffff8616925b8581036126df575050505050505b81156126b75773ffffffffffffffffffffffffffffffffffffffff1691828452600660205260408420548281106126835790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e939285875260066020520360408620558160015403600155611d356040519283928361304b565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b6127556126ec828461323d565b5198898752600960205261271e73ffffffffffffffffffffffffffffffffffffffff6040892054168b8b828a14613151565b8987526009602052604087207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055612c8a565b97833b15611e52576040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff891660248201526044810191909152858160648183885af1908115611e475786916127d4575b50506127cf90612f0f565b6125fa565b816127de91612d0f565b611e435784386127c4565b6127f892935060200190613134565b809291508452600960205261284173ffffffffffffffffffffffffffffffffffffffff60408620541683838273ffffffffffffffffffffffffffffffffffffffff821614613151565b8184526009602052604084207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558360019273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b15611f7f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481019190915291908290606490829084905af1801561293857612924575b50612608565b8461293191959295612d0f565b923861291e565b6040513d87823e3d90fd5b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557604060209173ffffffffffffffffffffffffffffffffffffffff612995612abf565b168152600783522054604051908152f35b503461020557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261020557600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361020557602061189f83612f9c565b50346102055760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610205576020611214612aba612abf565b612ca5565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612ae257565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203612ae257565b9181601f84011215612ae25782359167ffffffffffffffff8311612ae25760208381860195010111612ae257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215612ae25782359167ffffffffffffffff8311612ae2576020808501948460051b010111612ae257565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112612ae25760043567ffffffffffffffff8111612ae25781612bf191600401612b77565b9290929160243567ffffffffffffffff8111612ae25781612c1491600401612b77565b929092916044359067ffffffffffffffff8211612ae257612c3791600401612b77565b9091565b91908203918211612c4857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810292918115918404141715612c4857565b9060018201809211612c4857565b91908201809211612c4857565b73ffffffffffffffffffffffffffffffffffffffff612d0c9116806000526006602052612cf7604060002054612cf1612cdc612e58565b84600052600860205260406000205490612c3b565b90612c77565b90600052600760205260406000205490612c98565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612d5057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612d5057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110612dcc5750506000910152565b8181015183820152602001612dbc565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612e1881518092818752878088019101612db9565b0116010190565b8115612e29570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015612e9757612d0c90612e9160045491612e8c612e83612e7a612efd565b60025490612c3b565b60035490612c77565b612e1f565b90612c98565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612ef65773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b600554804210600014612d0c57504290565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612c485760010190565b9190811015612f4c5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612ae25790565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613045577f01ffc9a700000000000000000000000000000000000000000000000000000000811461303f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b929190613062602091604086526040860190612ddc565b930152565b61306f612e58565b60045560055442108015906130e1575b6130d1575b73ffffffffffffffffffffffffffffffffffffffff811690816130a5575050565b6130ae90612ca5565b816000526007602052604060002055600454906000526008602052604060002055565b6130d9612efd565b600255613084565b50600154151561307f565b6002600054146130fd576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b51908115158203612ae257565b9190826040910312612ae257602061314b83613127565b92015190565b1561315b57505050565b73ffffffffffffffffffffffffffffffffffffffff935083907f964ebadd00000000000000000000000000000000000000000000000000000000600052166004526024521660445260646000fd5b9190604083820312612ae2576131be83613127565b9260208101519067ffffffffffffffff8211612ae257019080601f83011215612ae25781519167ffffffffffffffff8311612d50578260051b90604051936132096020840186612d0f565b8452602080850192820101928311612ae257602001905b82821061322d5750505090565b8151815260209182019101613220565b8051821015612f4c5760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613391573233148015613396575b613391577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156132d9575b50612d0c57503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156133855760009161334b575b50386132cf565b90506020813d60201161337d575b8161336660209383612d0f565b81010312612ae25761337790613127565b38613344565b3d9150613359565b6040513d6000823e3d90fd5b503390565b5060183610613298565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156134ef5732331480156134f7575b6134ef57803314908115613433575b50613402576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211612ae25760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115613385576000916134b5575b50386133f6565b90506020813d6020116134e7575b816134d060209383612d0f565b81010312612ae2576134e190613127565b386134ae565b3d91506134c3565b506000903690565b50601836106133e7565b906000602091828151910182855af115613385576000513d613583575073ffffffffffffffffffffffffffffffffffffffff81163b155b61353f5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6001141561353856fea264697066735822122097c315d55a106cb221950b168ed0604a66be171153fc5d2e2e6a1d37a0f5973664736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
