[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "reward", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ClaimRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "reward", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "NotifyReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NOTIFIER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PROXY_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "changeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getImplementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_stake", "type": "address" }, { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "pauser", "type": "address" }, { "internalType": "address", "name": "notifier", "type": "address" }, { "internalType": "address", "name": "_proxyAdmin", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "lastTimeRewardApplicable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "notifyRewardAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxyAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardData", "outputs": [ { "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "periodFinish", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "rewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsList", "outputs": [ { "internalType": "address[]", "name": "_rewards", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setProxyAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stake", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "storedRewardsPerUser", "outputs": [ { "internalType": "uint256", "name": "", "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": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userRewardPerTokenStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a08060405234620000e157306080526000549060ff8260081c166200008f575060ff8082160362000053575b6040516136de9081620000e782396080518181816110410152818161118401526118f40152f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a1386200002c565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe60808060405260048036101561001457600080fd5b60003560e01c91826301ffc9a714612359575081631459457a14611e7057816318160ddd14611e51578163211dc32d14611e25578163248a9ca314611df857816327e7b13114611da05781632e1a7d4d14611c745781632f2ff15d14611b9f57816336568abe14611af55781633659cfe6146118bf578163369252591461185f5781633a4b66f11461182a5781633ca068b6146117ca5781633d18b912146115925781633e47158c1461155d5781633f4ba83a146114bf57816348e5d9f8146114555781634f1ef286146110fb57816352d1902d146110195781635c975abb14610ff6578163638634ee14610fd357816370a0823114610f8b5781638003b61414610f1757816382f3a00014610edc5781638456cb5914610e82578163853828b614610c765781638f28397014610ad85781639010d07c14610a8757816391d1485414610a2d578163a217fddf14610a11578163a4d5e67c14610955578163aaf10f4214610902578163b66503cf146106e0578163b6b55f2514610574578163c3bb6aab14610539578163ca15c8731461050f578163d547741f146104cf578163de5f62681461024457508063e63ab1e9146102095763f1229777146101d957600080fd5b346102045760206003193601126102045760206101fc6101f7612429565b6127ad565b604051908152f35b600080fd5b346102045760006003193601126102045760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b346102045760006003193601126102045773ffffffffffffffffffffffffffffffffffffffff61015f9181835416906040519283927f70a08231000000000000000000000000000000000000000000000000000000008452338385015283602460209586935afa9384156103ee576000946104a0575b506102c3612fce565b6102cb61311f565b8051903315159060005b8381106103fa57876103588880838a8a8f6102f1841515612631565b54169060006040518097819582947f23b872dd00000000000000000000000000000000000000000000000000000000845230903390850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03925af19182156103ee577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c926103c1575b5061016461039984825461256e565b905533600052610165815260406000206103b484825461256e565b90556040519283523392a2005b6103e090823d84116103e7575b6103d881836124bd565b81019061267c565b508361038a565b503d6103ce565b6040513d6000823e3d90fd5b808561040860019385612607565b5116610413816127ad565b81600052610161808b5260039182604060002001558661043284612776565b84600052828d52600260406000200155610450575b505050016102d5565b61045a338461257b565b336000526101628c526040600020846000528c526040600020558a526040600020015490336000526101638a5260406000209060005289526040600020558a8080610447565b9093508281813d83116104c8575b6104b881836124bd565b81010312610204575192856102ba565b503d6104ae565b346102045760406003193601126102045761050d90356104ed61244c565b90806000526065602052610508600160406000200154612eb0565b61301e565b005b34610204576020600319360112610204573560005260976020526020604060002054604051908152f35b346102045760006003193601126102045760206040517f4a2f7af891dbd2031c784532aea681e8646ac41c5bc81e1c46986d1f8e1d1f8e8152f35b346102045760208060031936011261020457813590610591612fce565b61059961311f565b9283516000331515905b8281106106265785610358868083886105bd821515612631565b61015f54604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101938452306020850152908301939093529194859273ffffffffffffffffffffffffffffffffffffffff169183916000918391606090910190565b8073ffffffffffffffffffffffffffffffffffffffff6106486001938a612607565b5116610653816127ad565b8160005261016180895260039182604060002001558561067284612776565b84600052828b52600260406000200155610690575b505050016105a3565b61069a338461257b565b336000526101628a526040600020846000528a52604060002055885260406000200154903360005261016388526040600020906000528752604060002055888080610687565b34610204576040600319360112610204576106f9612429565b60243590610705612d56565b61070d61311f565b80519060005b8281106108a15750505081156102045773ffffffffffffffffffffffffffffffffffffffff169061074382613461565b50604080517f23b872dd000000000000000000000000000000000000000000000000000000008152338582019081523060208281019190915292810184905282908290819060600103816000885af180156103ee57610884575b50826000526101618082526001604060002001548042101560001461084357508360005280825262093a8083046040600020555b836000528082524260026040600020015562093a8042019081421161082e57907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf5082692918560005282526001604060002001556040519283523392a3005b601186634e487b7160e01b6000525260246000fd5b61087161086b61085862093a80934290612538565b876000528486526040600020549061255b565b8561256e565b04846000528183526040600020556107d1565b61089a90823d84116103e7576103d881836124bd565b508461079d565b8073ffffffffffffffffffffffffffffffffffffffff6108c360019385612607565b51166108ce816127ad565b81600052610161906020908282526003604060002001556108ee83612776565b926000525260026040600020015501610713565b3461020457600060031936011261020457602073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416604051908152f35b346102045760206003193601126102045773ffffffffffffffffffffffffffffffffffffffff610983612429565b61098b612d56565b1690604051907f70a082310000000000000000000000000000000000000000000000000000000082523090820152602081602481855afa9081156103ee576000916109df575b506102045761050d906132b1565b90506020813d602011610a09575b816109fa602093836124bd565b810103126102045751826109d1565b3d91506109ed565b3461020457600060031936011261020457602060405160008152f35b3461020457604060031936011261020457610a4661244c565b9035600052606560205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461020457604060031936011261020457356000526097602052602073ffffffffffffffffffffffffffffffffffffffff610ac86024356040600020613299565b9190546040519260031b1c168152f35b346102045760208060031936011261020457610af2612429565b7f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c928360005260658352610b2d600160406000200154612eb0565b610b36826128f5565b73ffffffffffffffffffffffffffffffffffffffff92610160948486541692338403610c0d5750610b9492918160979260005260658252604060002084600052825260ff60406000205416610bc0575b6000525260406000206133b6565b5082547fffffffffffffffffffffffff0000000000000000000000000000000000000000169116179055005b80600052606582526040600020846000528252604060002060ff1981541690553384827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4610b86565b608490836040519162461bcd60e51b8352820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152fd5b34610204576000600319360112610204573360005261016590602082815260406000205491610ca3612fce565b610cab61311f565b9384516000331515905b828110610dc85786610d6d8780838989610cd0831515612631565b610164610cde848254612538565b90553360005283526040600020610cf6838254612538565b905573ffffffffffffffffffffffffffffffffffffffff61015f54169060006040518097819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452339084016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19182156103ee577f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492610dab575b506040519283523392a2005b610dc190823d84116103e7576103d881836124bd565b5083610d9f565b8073ffffffffffffffffffffffffffffffffffffffff610dea6001938b612607565b5116610df5816127ad565b81600052610161808a52600391826040600020015585610e1484612776565b84600052828c52600260406000200155610e32575b50505001610cb5565b610e3c338461257b565b336000526101628b526040600020846000528b52604060002055895260406000200154903360005261016389526040600020906000528852604060002055898080610e29565b3461020457600060031936011261020457610e9b6129c6565b610ea3612fce565b600160ff1960c954161760c9557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102045760006003193601126102045760206040517f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c8152f35b3461020457600060031936011261020457610f3061311f565b6040518091602080830160208452825180915260206040850193019160005b828110610f5e57505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610f4f565b346102045760206003193601126102045773ffffffffffffffffffffffffffffffffffffffff610fb9612429565b166000526101656020526020604060002054604051908152f35b346102045760206003193601126102045760206101fc610ff1612429565b612776565b3461020457600060031936011261020457602060ff60c954166040519015158152f35b346102045760006003193601126102045773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036110915760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60849060206040519162461bcd60e51b8352820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152fd5b60406003193601126102045761110f612429565b6024359167ffffffffffffffff83116102045736602384011215610204578281013561113a816124fe565b61114760405191826124bd565b8181526020918282019536602483830101116102045781600092602486930189378301015273ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016906111b182301415612694565b6111e07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc928284541614612705565b6111e8612bfc565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561122157505050505061050d9150613190565b859293949516906040517f52d1902d00000000000000000000000000000000000000000000000000000000815285818881865afa60009181611426575b506112cc57608487876040519162461bcd60e51b8352820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152fd5b9591929395036113bd57506112e082613190565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28251158015906113b5575b61131657005b60008061050d956040519561132a8761246f565b602787527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c868801527f206661696c65640000000000000000000000000000000000000000000000000060408801525190845af4903d156113ac573d61138f816124fe565b9061139d60405192836124bd565b8152600081943d92013e613641565b60609250613641565b506001611310565b608490846040519162461bcd60e51b8352820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152fd5b9091508681813d831161144e575b61143e81836124bd565b810103126102045751908961125e565b503d611434565b346102045760206003193601126102045773ffffffffffffffffffffffffffffffffffffffff611483612429565b16600052610161602052608060406000208054906001810154906003600282015491015491604051938452602084015260408301526060820152f35b34610204576000600319360112610204576114d86129c6565b60c9549060ff8216156115195760ff19821660c9557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60649060206040519162461bcd60e51b8352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b3461020457600060031936011261020457602073ffffffffffffffffffffffffffffffffffffffff6101605416604051908152f35b34610204576000600319360112610204576115ab612fce565b6115b361311f565b8051903315159060005b83811061170a57846115cd61311f565b80519060005b8281106115dc57005b73ffffffffffffffffffffffffffffffffffffffff6115fb8284612607565b511690336000526101629160209280845260406000208260005284526040600020549081611631575b50505060019150016115d3565b336000528452604060002082600052845260006040812055604051937fa9059cbb0000000000000000000000000000000000000000000000000000000085528085806116a385338d84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03816000875af19081156103ee576001957f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc9926116ed575b506040519283523392a3858080611624565b61170390823d84116103e7576103d881836124bd565b50896116db565b8073ffffffffffffffffffffffffffffffffffffffff61172c60019385612607565b5116611737816127ad565b90806000526101619160209280845260039182604060002001558761175b84612776565b8460005282865260026040600020015561177a575b50505050016115bd565b611784338461257b565b3360005261016285526040600020846000528552604060002055835260406000200154913360005261016381526040600020916000525260406000205586808080611770565b34610204576040600319360112610204576117e3612429565b6117eb61244c565b9073ffffffffffffffffffffffffffffffffffffffff809116600052610163602052604060002091166000526020526020604060002054604051908152f35b3461020457600060031936011261020457602073ffffffffffffffffffffffffffffffffffffffff61015f5416604051908152f35b3461020457604060031936011261020457611878612429565b61188061244c565b9073ffffffffffffffffffffffffffffffffffffffff809116600052610162602052604060002091166000526020526020604060002054604051908152f35b346102045760209081600319360112610204576118da612429565b9073ffffffffffffffffffffffffffffffffffffffff92837f00000000000000000000000000000000000000000000000000000000000000001661192081301415612694565b61194f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc918683541614612705565b611957612bfc565b604051908282019582871067ffffffffffffffff881117611ae057866040526000835260ff7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914354166000146119b557505050505061050d9150613190565b859293949516906040517f52d1902d00000000000000000000000000000000000000000000000000000000815285818881865afa60009181611ab1575b50611a6057608487876040519162461bcd60e51b8352820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152fd5b9591929395036113bd5750611a7482613190565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2825115801590611aa95761131657005b506000611310565b9091508681813d8311611ad9575b611ac981836124bd565b81010312610204575190896119f2565b503d611abf565b604185634e487b7160e01b6000525260246000fd5b3461020457604060031936011261020457611b0e61244c565b3373ffffffffffffffffffffffffffffffffffffffff821603611b355761050d913561301e565b60848260206040519162461bcd60e51b8352820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152fd5b346102045760406003193601126102045761050d90356097611bbf61244c565b918060005260209060658252611bdc600160406000200154612eb0565b806000526065825273ffffffffffffffffffffffffffffffffffffffff604060002094169384600052825260ff6040600020541615611c24575b6000525260406000206134d5565b806000526065825260406000208460005282526040600020600160ff198254161790553384827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4611c16565b346102045760208060031936011261020457813590611c91612fce565b611c9961311f565b9283516000331515905b828110611ce65785610d6d86808388611cbd821515612631565b610164611ccb838254612538565b90553360005261016583526040600020610cf6838254612538565b8073ffffffffffffffffffffffffffffffffffffffff611d086001938a612607565b5116611d13816127ad565b81600052610161808952600391826040600020015585611d3284612776565b84600052828b52600260406000200155611d50575b50505001611ca3565b611d5a338461257b565b336000526101628a526040600020846000528a52604060002055885260406000200154903360005261016388526040600020906000528752604060002055888080611d47565b3461020457600060031936011261020457611db96129c6565b61016080547fffffffffffffffffffffffff0000000000000000000000000000000000000000167157b10855dedd84ec8869dbd75f94fda098b4179055005b34610204576020600319360112610204573560005260656020526020600160406000200154604051908152f35b346102045760406003193601126102045760206101fc611e43612429565b611e4b61244c565b9061257b565b3461020457600060031936011261020457602061016454604051908152f35b346102045760a060031936011261020457611e89612429565b611e9161244c565b9060443573ffffffffffffffffffffffffffffffffffffffff81168103610204576064359273ffffffffffffffffffffffffffffffffffffffff84168403610204576084359273ffffffffffffffffffffffffffffffffffffffff841684036102045760005460ff8160081c16159687809861234c575b8015612335575b156122cb5750612145959361208f73ffffffffffffffffffffffffffffffffffffffff96946120e994848b600160ff198c98161760005561229c575b50611f7960ff60005460081c16611f6181612884565b611f6a81612884565b60ff1960c9541660c955612884565b611f82876128f5565b7f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c600052606596876020527f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c60016040600020018181549155817fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff600080a47fffffffffffffffffffffffff000000000000000000000000000000000000000090866101609116828254161790558561015f921690825416179055600080528360406000209116908160005260205260ff604060002054161561224b575b6000805260976020527f683723e34a772b6e4f2c919bba7fa32ed8ea11a8325f54da7db716e9d9dd98c76134d5565b507f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8060005284602052604060002083831660005260205260ff60406000205416156121f6575b60005260976020521660406000206134d5565b507f4a2f7af891dbd2031c784532aea681e8646ac41c5bc81e1c46986d1f8e1d1f8e908160005280602052604060002084841660005260205260ff60406000205416156121a1575b5060005260976020521660406000206134d5565b5061214c57005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b8160005260205260406000208383166000526020526040600020600160ff1982541617905533838316827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a485612131565b806000528460205260406000208383166000526020526040600020600160ff1982541617905533838316827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a46120d6565b60008052856020526040600020816000526020526040600020600160ff19825416179055338160007f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4612060565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016610101176000558b611f4b565b60849060206040519162461bcd60e51b8352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015611f0f5750600160ff831614611f0f565b50600160ff831610611f08565b90346102045760206003193601126102045735907fffffffff00000000000000000000000000000000000000000000000000000000821680920361020457817f5a05180f00000000000000000000000000000000000000000000000000000000602093149081156123cc575b5015158152f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156123ff575b50836123c5565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836123f8565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361020457565b6060810190811067ffffffffffffffff82111761248b57604052565b634e487b7160e01b600052604160045260246000fd5b6080810190811067ffffffffffffffff82111761248b57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761248b57604052565b67ffffffffffffffff811161248b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9190820391821161254557565b634e487b7160e01b600052601160045260246000fd5b8181029291811591840414171561254557565b9190820180921161254557565b60406126049273ffffffffffffffffffffffffffffffffffffffff80911692670de0b6b3a76400006125e96000938685526101656020526125e386862054916125c3866127ad565b908988526101636020528888209616958688526020528787205490612538565b9061255b565b0493825261016260205282822090825260205220549061256e565b90565b805182101561261b5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b1561263857565b606460405162461bcd60e51b815260206004820152600e60248201527f43616e2774207374616b652030210000000000000000000000000000000000006044820152fd5b90816020910312610204575180151581036102045790565b1561269b57565b608460405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152fd5b1561270c57565b608460405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff1660005261016160205260016040600020015480421060001461260457504290565b90610164549182156128565773ffffffffffffffffffffffffffffffffffffffff81169261281b6000948086526101618060205261280a6127f5600360408a20015496612776565b83895282602052600260408a20015490612538565b91875260205260408620549061255b565b670de0b6b3a76400009081810291818304149015171561284257612604939450049061256e565b602485634e487b7160e01b81526011600452fd5b73ffffffffffffffffffffffffffffffffffffffff9192501660005261016160205260036040600020015490565b1561288b57565b608460405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff1660008181527f923747bdd6b1d594aba3ae01b86b32b83b0dff95982e92d9996b832db5e64ae06020526040808220546129789392907f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c9060ff161561297b575b81526097602052206134d5565b50565b8082526065602052828220848352602052828220600160ff198254161790553384827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8580a461296b565b3360009081527fbfe93621c6aa2dbf737e9056c9b79e4d30ee4f6b28b18be2cb71aac8a7bf258e60209081526040808320549092907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff1615612a2b5750505050565b612a3433613535565b845191612a40836124a1565b60428352848301936060368637835115612be8576030855383519060019160011015612be85790607860218601536041915b818311612b6d57505050612b2b57612acd938593612b1193612b02604894612b27995198857f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008b9788015282519283916037890191016130b2565b8401917f206973206d697373696e6720726f6c65200000000000000000000000000000006037840152518093868401906130b2565b010360288101855201836124bd565b5191829162461bcd60e51b8352600483016130d5565b0390fd5b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015612bd4577f3031323334353637383961626364656600000000000000000000000000000000901a612baa8588613524565b5360041c928015612bc057600019019190612a72565b602482634e487b7160e01b81526011600452fd5b602483634e487b7160e01b81526032600452fd5b80634e487b7160e01b602492526032600452fd5b3360009081527f923747bdd6b1d594aba3ae01b86b32b83b0dff95982e92d9996b832db5e64ae060209081526040808320549092907f088bbdb9be001f65a1c8093571b18104ac3404d796971d2e5c48d87580acfe8c9060ff1615612c615750505050565b612c6a33613535565b845191612c76836124a1565b60428352848301936060368637835115612be8576030855383519060019160011015612be85790607860218601536041915b818311612d0357505050612b2b57612acd938593612b1193612b02604894612b27995198857f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008b9788015282519283916037890191016130b2565b909192600f81166010811015612bd4577f3031323334353637383961626364656600000000000000000000000000000000901a612d408588613524565b5360041c928015612bc057600019019190612ca8565b3360009081527ff4359b3f344bcf0000656f76e52537add8ca2a01f146a5326dbfef6cc6df964560209081526040808320549092907f4a2f7af891dbd2031c784532aea681e8646ac41c5bc81e1c46986d1f8e1d1f8e9060ff1615612dbb5750505050565b612dc433613535565b845191612dd0836124a1565b60428352848301936060368637835115612be8576030855383519060019160011015612be85790607860218601536041915b818311612e5d57505050612b2b57612acd938593612b1193612b02604894612b27995198857f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008b9788015282519283916037890191016130b2565b909192600f81166010811015612bd4577f3031323334353637383961626364656600000000000000000000000000000000901a612e9a8588613524565b5360041c928015612bc057600019019190612e02565b600081815260209060658252604092838220338352835260ff848320541615612ed95750505050565b612ee233613535565b845191612eee836124a1565b60428352848301936060368637835115612be8576030855383519060019160011015612be85790607860218601536041915b818311612f7b57505050612b2b57612acd938593612b1193612b02604894612b27995198857f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008b9788015282519283916037890191016130b2565b909192600f81166010811015612bd4577f3031323334353637383961626364656600000000000000000000000000000000901a612fb88588613524565b5360041c928015612bc057600019019190612f20565b60ff60c95416612fda57565b606460405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b90604061297892600090808252606560205273ffffffffffffffffffffffffffffffffffffffff83832094169384835260205260ff838320541661306a575b81526097602052206133b6565b808252606560205282822084835260205282822060ff1981541690553384827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8580a461305d565b60005b8381106130c55750506000910152565b81810151838201526020016130b5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040936020845261311881518092816020880152602088880191016130b2565b0116010190565b604051906101668281549182825260209260208301916000527fa5a4c57b7184ec73d55be4993773cb4eef681bc86a28d0285cd66efb50676a97936000905b82821061317657505050613174925003836124bd565b565b85548452600195860195889550938101939091019061315e565b803b156131f85773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b608460405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152fd5b610166805482101561261b576000527fa5a4c57b7184ec73d55be4993773cb4eef681bc86a28d0285cd66efb50676a970190600090565b805482101561261b5760005260206000200190600090565b600090808252610167908160205260408320548015156000146133b057600019908181019080821161339c57610166918254908482019182116133885780820361333e575b5050508054801561332a5782019161330d83613262565b909182549160031b1b191690555582526020526040812055600190565b602486634e487b7160e01b81526031600452fd5b61337361334d61335c93613262565b90549060031b1c928392613262565b81939154906000199060031b92831b921b19161790565b905586528460205260408620553880806132f6565b602488634e487b7160e01b81526011600452fd5b602486634e487b7160e01b81526011600452fd5b50505090565b9060018201906000928184528260205260408420549081151560001461345a57600019918281018181116134465782549084820191821161338857808203613411575b5050508054801561332a5782019161330d8383613299565b61343161342161335c9386613299565b90549060031b1c92839286613299565b905586528460205260408620553880806133f9565b602487634e487b7160e01b81526011600452fd5b5050505090565b9060009180835261016792836020526040812054156000146134d05761016693845494680100000000000000008610156134bc57836134ac61335c886001604098999a018555613262565b9055549382526020522055600190565b602483634e487b7160e01b81526041600452fd5b925050565b9190600183016000908282528060205260408220541560001461351e57845494680100000000000000008610156134bc57836134ac61335c886001604098999a01855584613299565b50925050565b90815181101561261b570160200190565b604051906135428261246f565b602a825260208201604036823782511561261b576030905381516001906001101561261b57607860218401536029905b8082116135c65750506135825790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f8116601081101561362c577f3031323334353637383961626364656600000000000000000000000000000000901a6136028486613524565b5360041c918015613617576000190190613572565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b919290156136a25750815115613655575090565b3b1561365e5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156136b55750805190602001fd5b612b279060405191829162461bcd60e51b8352600483016130d556fea164736f6c6343000817000a