Loading
[ { "inputs": [ { "internalType": "address", "name": "_SY", "type": "address" }, { "internalType": "address", "name": "_PT", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "__decimals", "type": "uint8" }, { "internalType": "uint256", "name": "_expiry", "type": "uint256" }, { "internalType": "bool", "name": "_doCacheIndexSameBlock", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ArrayEmpty", "type": "error" }, { "inputs": [], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "YCExpired", "type": "error" }, { "inputs": [], "name": "YCNoFloatingSy", "type": "error" }, { "inputs": [], "name": "YCNotExpired", "type": "error" }, { "inputs": [], "name": "YCNothingToRedeem", "type": "error" }, { "inputs": [], "name": "YCPostExpiryDataNotSet", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualSy", "type": "uint256" }, { "internalType": "uint256", "name": "requiredSy", "type": "uint256" } ], "name": "YieldContractInsufficientSy", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountPYToRedeem", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountSyOut", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amountInterestFee", "type": "uint256" } ], "name": "CollectInterestFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountRewardFee", "type": "uint256" } ], "name": "CollectRewardFee", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiverPT", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiverYT", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSyToMint", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountPYOut", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newIndex", "type": "uint256" } ], "name": "NewInterestIndex", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "interestOut", "type": "uint256" } ], "name": "RedeemInterest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "amountRewardsOut", "type": "uint256[]" } ], "name": "RedeemRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SY", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "doCacheIndexSameBlock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "expiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPostExpiryData", "outputs": [ { "internalType": "uint256", "name": "firstPYIndex", "type": "uint256" }, { "internalType": "uint256", "name": "totalSyInterestForTreasury", "type": "uint256" }, { "internalType": "uint256[]", "name": "firstRewardIndexes", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "userRewardOwed", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isExpired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiverPT", "type": "address" }, { "internalType": "address", "name": "receiverYT", "type": "address" } ], "name": "mintPY", "outputs": [ { "internalType": "uint256", "name": "amountPYOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "receiverPTs", "type": "address[]" }, { "internalType": "address[]", "name": "receiverYTs", "type": "address[]" }, { "internalType": "uint256[]", "name": "amountSyToMints", "type": "uint256[]" } ], "name": "mintPYMulti", "outputs": [ { "internalType": "uint256[]", "name": "amountPYOuts", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "postExpiry", "outputs": [ { "internalType": "uint128", "name": "firstPYIndex", "type": "uint128" }, { "internalType": "uint128", "name": "totalSyInterestForTreasury", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pyIndexCurrent", "outputs": [ { "internalType": "uint256", "name": "currentIndex", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pyIndexLastUpdatedBlock", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pyIndexStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "redeemInterest", "type": "bool" }, { "internalType": "bool", "name": "redeemRewards", "type": "bool" } ], "name": "redeemDueInterestAndRewards", "outputs": [ { "internalType": "uint256", "name": "interestOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "rewardsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "redeemInterestAndRewardsPostExpiryForTreasury", "outputs": [ { "internalType": "uint256", "name": "interestOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "rewardsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "redeemPY", "outputs": [ { "internalType": "uint256", "name": "amountSyOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "amountPYToRedeems", "type": "uint256[]" } ], "name": "redeemPYMulti", "outputs": [ { "internalType": "uint256[]", "name": "amountSyOuts", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardIndexesCurrent", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setPostExpiryData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "syReserve", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userInterest", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "accrued", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userReward", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "accrued", "type": "uint128" } ], "stateMutability": "view", "type": "function" } ]
61022080604052346200064d5762005f30803803809162000021828562000652565b833981019060e0818303126200064d576200003c8162000676565b6200004a6020830162000676565b60408301519092906001600160401b0381116200064d57846200006f918301620006b0565b606082015190946001600160401b0382116200064d5762000092918301620006b0565b9260808201519060ff821682036200064d5760c060a08401519301519384151585036200064d5760408051979088016001600160401b038111898210176200051b5760405260018852603160f81b6020890190815281519094906001600160401b0381116200051b57600354600181811c9116801562000642575b60208210146200062c57601f8111620005c6575b50806020601f82116001146200053d5760009162000531575b508160011b916000199060031b1c1916176003555b87516001600160401b0381116200051b576004988954600181811c9116801562000510575b6020821014620004fb579081601f849311620004a3575b50602090601f831160011462000438576000926200042c575b50508160011b916000199060031b1c19161788555b608052600280546001600160f81b0316600160f81b179055620001dc816200070b565b610140908152620001ed89620008b0565b91610160928352602081519101209461010099868b5251902094610120958087524660c0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810199818b1060018060401b038c11176200041757508960405251902060a0523060e0526101809283526101a09384526101e09586526101c094338652610200978852615528998a62000a088b396080518a61255f015260a0518a61377b015260c0518a613847015260e0518a61374c015251896137ca015251886137f0015251876115080152518661153101525185818161027a015281816105a601528181610e1701528181610f060152818161117601528181611b3401528181611cce0152818161303e015281816132ef015281816138e101528181613a6b015281816140440152818161450201528181614aba0152614c5001525184818161065201528181613afc015281816144200152818161492c0152614977015251838181610b54015281816110290152818161180c01528181611b6d0152611e47015251828181610380015281816104be01528181610a3701528181610c3601528181610d9901528181610fb70152818161170201528181612368015281816125ba0152818161344401528181613b20015281816144c001528181614902015281816149aa01528181614b1c0152614ca601525181818161248d01526132830152f35b604190634e487b7160e01b6000525260246000fd5b015190503880620001a4565b60008c8152602081209350601f198516905b8181106200048a575090846001959493921062000470575b505050811b018855620001b9565b015160001960f88460031b161c1916905538808062000462565b929360206001819287860151815501950193016200044a565b9091508a6000526020600020601f840160051c81019160208510620004f0575b90601f859493920160051c01905b818110620004e057506200018b565b60008155849350600101620004d1565b9091508190620004c3565b60228b634e487b7160e01b6000525260246000fd5b90607f169062000174565b634e487b7160e01b600052604160045260246000fd5b9050830151386200013a565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9250601f198416905b818110620005ad5750908360019493921062000593575b5050811b016003556200014f565b85015160001960f88460031b161c19169055388062000585565b9192602060018192868a0151815501940192016200056e565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81016020841062000624575b601f830160051c820181106200061757505062000121565b60008155600101620005ff565b5080620005ff565b634e487b7160e01b600052602260045260246000fd5b90607f16906200010d565b600080fd5b601f909101601f19168101906001600160401b038211908210176200051b57604052565b51906001600160a01b03821682036200064d57565b60005b8381106200069f5750506000910152565b81810151838201526020016200068e565b81601f820112156200064d5780516001600160401b0381116200051b5760405192620006e7601f8301601f19166020018562000652565b818452602082840101116200064d576200070891602080850191016200068b565b90565b805160209190828110156200078b575090601f8251116200074957808251920151908083106200073a57501790565b82600019910360031b1b161790565b6044906200077d9260405193849263305a27a960e01b8452806004850152825192839182602487015286860191016200068b565b601f01601f19168101030190fd5b6001600160401b0381116200051b576005928354926001938481811c91168015620008a5575b838210146200062c57601f81116200086e575b5081601f8411600114620008045750928293918392600094620007f8575b50501b916000199060031b1c191617905560ff90565b015192503880620007e2565b919083601f1981168760005284600020946000905b8883831062000853575050501062000839575b505050811b01905560ff90565b015160001960f88460031b161c191690553880806200082c565b85870151885590960195948501948793509081019062000819565b8560005284601f846000209201871c820191601f8601881c015b82811062000898575050620007c4565b6000815501859062000888565b90607f1690620007b1565b805160209081811015620008dd5750601f8251116200074957808251920151908083106200073a57501790565b906001600160401b0382116200051b57600654926001938481811c91168015620009fc575b838210146200062c57601f8111620009c2575b5081601f84116001146200095657509282939183926000946200094a575b50501b916000199060031b1c19161760065560ff90565b01519250388062000933565b919083601f198116600660005284600020946000905b88838310620009a757505050106200098d575b505050811b0160065560ff90565b015160001960f88460031b161c191690553880806200097f565b8587015188559096019594850194879350908101906200096c565b600660005284601f84600020920160051c820191601f860160051c015b828110620009ef57505062000915565b60008155018590620009df565b90607f16906200090256fe608080604052600436101561001357600080fd5b60003560e01c90816306fdde0314612ab157508063095ea7b314612a625780630a2b83a714612a095780630b49fcef146128c857806318160ddd1461286b5780631d52edc4146127a557806323b872dd146125df5780632f13b60c14612583578063313ce567146125275780633644e515146124ee5780634ba6dcd7146124b2578063516399df1461245757806353335819146122815780635cbadbe4146121e657806360e0a9e11461219857806370a082311461212d5780637d24da4d146116525780637ecebe00146115ed57806384b0196e146114d457806395d89b41146113b5578063a9059cbb146112e1578063acc5da4c14610f2a578063afd27bf514610ebb578063b0d8898114610ccf578063bcb7ea5d14610b78578063c45a015514610b09578063c4f59f9b14610a77578063cdbb036114610989578063d2a3584e1461094a578063d505accf146106fc578063d68076c314610676578063d94073d414610607578063db74aa1514610420578063dd62ed3e146103a3578063e184c9be1461034a5763f8b2f991146101ab57600080fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576002546101ed60028260f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255604051907ff8b2f9910000000000000000000000000000000000000000000000000000000082526000826004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610339576102ee926000926102f2575b507f0100000000000000000000000000000000000000000000000000000000000000906002541617600255604051918291602083526020830190612c1e565b0390f35b7f0100000000000000000000000000000000000000000000000000000000000000919250610332903d806000833e61032a8183612d06565b810190613092565b91906102af565b6040513d6000823e3d90fd5b600080fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576103da612bd8565b6103e2612bfb565b9073ffffffffffffffffffffffffffffffffffffffff8091166000526001602052604060002091166000526020526020604060002054604051908152f35b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557610457612bd8565b61045f612bfb565b6002549061047360028360f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80931617600255427f000000000000000000000000000000000000000000000000000000000000000011156105dd5761059f61059a7f0100000000000000000000000000000000000000000000000000000000000000926040519561051887612cea565b600187526020968736818301376040519161053283612cea565b600183528836818501376040519361054985612cea565b6001855289368187013761055b613a63565b61056486612dae565b5261056e84612dae565b73ffffffffffffffffffffffffffffffffffffffff809216905261059183612dae565b91169052613acb565b612dae565b51916105ca7f0000000000000000000000000000000000000000000000000000000000000000614087565b600a556002541617600255604051908152f35b60046040517f5b15a6da000000000000000000000000000000000000000000000000000000008152fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103455760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455773ffffffffffffffffffffffffffffffffffffffff6106c2612bd8565b166000908152600960209081526040918290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b346103455760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557610733612bd8565b61073b612bfb565b6044359060843560643560ff82168203610345578042116108ec5773ffffffffffffffffffffffffffffffffffffffff90818616928360005260076020526040600020908154916001830190556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452866040860152858816606086015288608086015260a085015260c084015260c0835260e083019183831067ffffffffffffffff8411176108bd5761084e9361084693604052519020610804613735565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220614d77565b919091614e13565b160361085f5761085d9261310c565b005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576020600b5460801c604051908152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345577f01000000000000000000000000000000000000000000000000000000000000006002546109ec60028260f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f00000000000000000000000000000000000000000000000000000000000000001115610a6a575b6002541617600255600080f35b610a7261386d565b610a5d565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557610aae612ffb565b6040518091602080830160208452825180915260206040850193019160005b828110610adc57505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610acd565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610345576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557610bb0612bd8565b7f010000000000000000000000000000000000000000000000000000000000000061059f61059a60025493610beb60028660f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80961617600255427f00000000000000000000000000000000000000000000000000000000000000001115610cc2575b604051610c6881612cea565b6001815286368183013760405191610c7f83612cea565b60018352873681850137610c916148ff565b610c9a84612dae565b5273ffffffffffffffffffffffffffffffffffffffff610cb983612dae565b911690526143fc565b610cca61386d565b610c5c565b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455767ffffffffffffffff60043581811161034557610d1f903690600401612c52565b909160243590811161034557610d39903690600401612c52565b9160025492610d4e60028560f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80951617600255427f00000000000000000000000000000000000000000000000000000000000000001115610eae575b808203610e84578115610e5a57610e0b7f010000000000000000000000000000000000000000000000000000000000000093610e036102ee97610e11953691612eb1565b923691612e63565b906143fc565b91610e3b7f0000000000000000000000000000000000000000000000000000000000000000614087565b600a556002541617600255604051918291602083526020830190612c1e565b60046040517ff1364a74000000000000000000000000000000000000000000000000000000008152fd5b60046040517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b610eb661386d565b610dbf565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557600254610f6c60028260f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f00000000000000000000000000000000000000000000000000000000000000001180156112d4575b6112aa5773ffffffffffffffffffffffffffffffffffffffff906040517f61d027b30000000000000000000000000000000000000000000000000000000081526020928382600481847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561033957600092611273575b50611063612ffb565b61106d8151612d5f565b92611076613ffa565b60005b825181101561110f57806110bd61109d8661109660019588612dea565b5116614087565b866110a88488612dea565b5116600052600e8a5260406000205490612f3d565b6110c78288612dea565b52846110d38286612dea565b51167f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d9503922289611101848a612dea565b51604051908152a201611079565b509391815191845183036112155760005b8381106111ea5787876102ee887f0100000000000000000000000000000000000000000000000000000000000000896111c9600c54956fffffffffffffffffffffffffffffffff8760801c9716600c5561119c877f00000000000000000000000000000000000000000000000000000000000000009283614193565b7e4e8d79e4b41c5fad7561dc7c07786ee4e52292da7a3f5dc7ab90e32cc3042388604051898152a1614087565b600a5560025416176002556040805194859485528401526040830190612c1e565b8061120f846111fb60019486612dea565b511689611208848b612dea565b5191614193565b01611120565b606487604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152fd5b9091508381813d83116112a3575b61128b8183612d06565b810103126103455761129c90612f1c565b908461105a565b503d611281565b60046040517fcd81a636000000000000000000000000000000000000000000000000000000008152fd5b6112dc61386d565b610fde565b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345577f0100000000000000000000000000000000000000000000000000000000000000611339612bd8565b6113a26002549161135060028460f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033613410565b6002541617600255602060405160018152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576040516004546000826113f683612c83565b9182825260209360019085600182169182600014611496575050600114611439575b5061142592500383612d06565b6102ee604051928284938452830190612b7a565b84915060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b906000915b85831061147e575050611425935082010185611418565b80548389018501528794508693909201918101611467565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261142595151560051b85010192508791506114189050565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455761152c7f0000000000000000000000000000000000000000000000000000000000000000613e02565b6115557f0000000000000000000000000000000000000000000000000000000000000000613f3a565b9060405191602083019280841067ffffffffffffffff8511176108bd576115cc6102ee926115be95604052600083526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190612b7a565b908582036040870152612b7a565b90466060850152306080850152600060a085015283820360c0850152612c1e565b346103455760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455773ffffffffffffffffffffffffffffffffffffffff611639612bd8565b1660005260076020526020604060002054604051908152f35b346103455760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557611689612bd8565b60243515908115602435036103455760443580159283158203610345577f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6002546116fa60028260f81c1415612dfe565b1617600255427f000000000000000000000000000000000000000000000000000000000000000011159384612120575b81612118575b506120ee5761173e8261499b565b156120d55761174b612ffb565b9115611e2e5760005b82518110156117f4578073ffffffffffffffffffffffffffffffffffffffff61177f60019386612dea565b5116600052602060088152604060002073ffffffffffffffffffffffffffffffffffffffff85166000528152600e60406000205460801c9173ffffffffffffffffffffffffffffffffffffffff6117d68589612dea565b5116600052526117ec6040600020918254612f3d565b905501611754565b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691604051917f61d027b3000000000000000000000000000000000000000000000000000000008352602083600481875afa92831561033957600093611def575b50602060049394604051948580927ff5de2d1f0000000000000000000000000000000000000000000000000000000082525afa92831561033957600093611dce575b5060006118bb8351612d5f565b9460005b8451811015611ac65773ffffffffffffffffffffffffffffffffffffffff6118e78287612dea565b5116600052600880602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000205460801c9073ffffffffffffffffffffffffffffffffffffffff61193d8489612dea565b5116600052602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000206fffffffffffffffffffffffffffffffff8154169055670de0b6b3a76400006119a76fffffffffffffffffffffffffffffffff891683614d2b565b04906119b38282612f3d565b6119bd848b612dea565b52841580611abe575b611a7c575b5090816119fb6001938573ffffffffffffffffffffffffffffffffffffffff6119f4868c612dea565b5116614193565b611a2a73ffffffffffffffffffffffffffffffffffffffff611a1d848a612dea565b511687611208858d612dea565b7f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d95039222602073ffffffffffffffffffffffffffffffffffffffff611a6c858b612dea565b511692604051908152a2016118bf565b611a9e73ffffffffffffffffffffffffffffffffffffffff611096858a612dea565b10611aaa575b886119cb565b9250600190611ab7613ffa565b9092611aa4565b5060006119c6565b509193505050505b817f78d61a0c27b13f43911095f9f356f14daa3cd8b125eea1aa22421245e90e813d6040516020815280611b1d73ffffffffffffffffffffffffffffffffffffffff8616946020830190612c1e565b0390a25b60243515611dc657611b3281614ca3565b7f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016604051917f61d027b30000000000000000000000000000000000000000000000000000000083526020918284600481845afa93841561033957600094611d8b575b5082600491604051928380927fdd86fea10000000000000000000000000000000000000000000000000000000082525afa95861561033957611cac967f83a945bd12c713615b59a6e48a3467c05d1a7442350600d6f7fce6af9f7190e9957e4e8d79e4b41c5fad7561dc7c07786ee4e52292da7a3f5dc7ab90e32cc30423948694600093611d5a575b50611cba9293611cb5670de0b6b3a7640000611ca26fffffffffffffffffffffffffffffffff9c85169c8d60005260098a52604060002098895499828b60801c9b1690551688614d2b565b049b8c8097612f3d565b9b8c9483614193565b614193565b604051908152a1604051848152a25b611cf27f0000000000000000000000000000000000000000000000000000000000000000614087565b600a557f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416176002556102ee6040519283928352604060208401526040830190612c1e565b611cba9350611d7e90863d8811611d84575b611d768183612d06565b810190613dda565b92611c57565b503d611d6c565b9093508281813d8311611dbf575b611da38183612d06565b810103126103455782611db7600492612f1c565b949150611bce565b503d611d99565b506000611cc9565b611de891935060203d602011611d8457611d768183612d06565b91846118ae565b92506020833d602011611e26575b81611e0a60209383612d06565b81010312610345576020611e1f600494612f1c565b935061186c565b3d9150611dfd565b9073ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604051917f61d027b30000000000000000000000000000000000000000000000000000000083526020908184600481885afa9384156103395760009461209c575b508160049495604051958680927ff5de2d1f0000000000000000000000000000000000000000000000000000000082525afa9384156103395760009461207d575b506fffffffffffffffffffffffffffffffff94939480951693600093611f108151612d5f565b958884169060005b8a845182101561206c578989918789888f8d9083611f368a85612dea565b511660005260089182815260406000208c600052815260406000205460801c9285611f618c87612dea565b511660005281526040600020908c600052526040600020908154169055670de0b6b3a7640000611f918a83614d2b565b0496611f9d8883612f3d565b611fa78a89612dea565b521580612064575b612022575b508587969593611fe595936119f460019a611fce95612dea565b611208858c611fdd828d612dea565b511693612dea565b7f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d950392228989612012858a612dea565b511692604051908152a201611f18565b9250906110968761203293612dea565b10612041575b87898838611fb4565b869a506001939291611fe591612055613ffa565b949b5092939192919050612038565b506001611faf565b505050505050505050905090611ace565b612095919450823d8411611d8457611d768183612d06565b9286611eea565b93508184813d83116120ce575b6120b38183612d06565b8101031261034557816120c7600495612f1c565b9450611ea9565b503d6120a9565b90506120e86120e2612ffb565b51612d5f565b90611b21565b60046040517f68146f1d000000000000000000000000000000000000000000000000000000008152fd5b905084611730565b61212861386d565b61172a565b346103455760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576020612190612169612bd8565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b604051908152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455760206fffffffffffffffffffffffffffffffff600b5416604051908152f35b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455761221d612bd8565b612225612bfb565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526008602090815260408083209390941682529182528290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b346103455760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455767ffffffffffffffff600435818111610345576122d1903690600401612c52565b9091602435818111610345576122eb903690600401612c52565b93909160443590811161034557612306903690600401612c52565b9290916002549461231d60028760f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80971617600255427f000000000000000000000000000000000000000000000000000000000000000011156105dd578015610e5a5780871480159061244d575b610e84576123b56123b0368787612e63565b613a30565b6123bd613a63565b811161240f5750610e1193610e036102ee98946124017f01000000000000000000000000000000000000000000000000000000000000009895612409953691612eb1565b953691612eb1565b91613acb565b60449061241a613a63565b604051917fa2cb081900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b508085141561239e565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576020600a54604051908152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576020612190613735565b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610345576020604051427f000000000000000000000000000000000000000000000000000000000000000011158152f35b346103455760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557612616612bd8565b61261e612bfb565b6044356002549161263560028460f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760025573ffffffffffffffffffffffffffffffffffffffff841660005260016020526040600020336000526020526040600020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103612703575b50906113a2917f010000000000000000000000000000000000000000000000000000000000000094613410565b9190818310612747577f01000000000000000000000000000000000000000000000000000000000000009461273e836113a29503338361310c565b945090916126d6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455760206002546127e960028260f81c1415612dfe565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809216176002557f010000000000000000000000000000000000000000000000000000000000000061285a613281565b916002541617600255604051908152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103455760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557600c546fffffffffffffffffffffffffffffffff811680156129df5761291b612ffb565b916129268351612d5f565b6129308451612d5f565b9160005b85518110156129a657600190600e73ffffffffffffffffffffffffffffffffffffffff80612962848b612dea565b5116600052602090600d825260406000205461297e8589612dea565b52612989848b612dea565b51166000525260406000205461299f8287612dea565b5201612934565b5092916129d16102ee92604051958695865260801c6020860152608060408601526080850190612c1e565b908382036060850152612c1e565b60046040517fd2509633000000000000000000000000000000000000000000000000000000008152fd5b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557600c54604080516fffffffffffffffffffffffffffffffff8316815260809290921c602083015290f35b346103455760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557612aa6612a9c612bd8565b602435903361310c565b602060405160018152f35b346103455760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034557600354600082612aef83612c83565b9182825260209360019085600182169182600014611496575050600114612b1d575061142592500383612d06565b84915060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906000915b858310612b62575050611425935082010185611418565b80548389018501528794508693909201918101612b4b565b919082519283825260005b848110612bc45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b602081830181015184830182015201612b85565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034557565b90815180825260208080930193019160005b828110612c3e575050505090565b835185529381019392810192600101612c30565b9181601f840112156103455782359167ffffffffffffffff8311610345576020808501948460051b01011161034557565b90600182811c92168015612ccc575b6020831014612c9d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691612c92565b67ffffffffffffffff81116108bd57604052565b6040810190811067ffffffffffffffff8211176108bd57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108bd57604052565b67ffffffffffffffff81116108bd5760051b60200190565b90612d6982612d47565b612d766040519182612d06565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612da48294612d47565b0190602036910137565b805115612dbb5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015612dbb5760209160051b010190565b15612e0557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b9291612e6e82612d47565b91612e7c6040519384612d06565b829481845260208094019160051b810192831161034557905b828210612ea25750505050565b81358152908301908301612e95565b9291612ebc82612d47565b91612eca6040519384612d06565b829481845260208094019160051b810192831161034557905b828210612ef05750505050565b813573ffffffffffffffffffffffffffffffffffffffff81168103610345578152908301908301612ee3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361034557565b91908203918211612f4a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60209081818403126103455780519067ffffffffffffffff821161034557019180601f84011215610345578251612faf81612d47565b93612fbd6040519586612d06565b818552838086019260051b820101928311610345578301905b828210612fe4575050505090565b838091612ff084612f1c565b815201910190612fd6565b6040517fc4f59f9b00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561033957600091613072575090565b61308f91503d806000833e6130878183612d06565b810190612f79565b90565b60209081818403126103455780519067ffffffffffffffff821161034557019180601f840112156103455782516130c881612d47565b936130d66040519586612d06565b818552838086019260051b820101928311610345578301905b8282106130fd575050505090565b815181529083019083016130ef565b73ffffffffffffffffffffffffffffffffffffffff8091169182156131fe571691821561317a5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b7f0000000000000000000000000000000000000000000000000000000000000000806133e6575b6133dd576040517f3ba0b9a900000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610339576000916133ab575b50600b5460801c808211156133a35750905b6fffffffffffffffffffffffffffffffff91828111610345577fffffffffffffffffffffffffffffffff000000000000000000000000000000008382169343169160801b1617600b55817f71475f2f645813fdbebf53a58968008bff11ee21a58f01c5a9cc263d0bc4703d600080a2565b905090613332565b90506020813d6020116133d5575b816133c660209383612d06565b81010312610345575138613320565b3d91506133b9565b600b5460801c90565b506fffffffffffffffffffffffffffffffff600b541643146132a8565b91908201809211612f4a57565b9173ffffffffffffffffffffffffffffffffffffffff918284169283156136b157811693841561362d578484146135cf57427f00000000000000000000000000000000000000000000000000000000000000001115806135c2575b6134758383614b0d565b156135b4576fffffffffffffffffffffffffffffffff600c5416905b813086036135a4575b5050308503613594575b505081600052600060205260406000205481811061351057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092856000526000845203604060002055846000526040600020613505828254613403565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b61359d916151a2565b38806134a4565b6135ad916151a2565b388161349a565b6135bc613281565b90613491565b6135ca61386d565b61346b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480613844575b1561379d577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176108bd5760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614613774565b6fffffffffffffffffffffffffffffffff80600c5416613a2d5761388f613ffa565b613897613281565b81811161034557167fffffffffffffffffffffffffffffffff00000000000000000000000000000000600c541617600c5573ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001660408051917fc4f59f9b0000000000000000000000000000000000000000000000000000000083526000908184600481845afa938415613a03578294613a0d575b5081809160048551809481937ff8b2f9910000000000000000000000000000000000000000000000000000000083525af1908115613a035782916139e9575b50815b84518110156139e0578061399a60019284612dea565b51886139a68389612dea565b51168552602090600d825286862055600e6139c58a611096858b612dea565b918a6139d1858b612dea565b51168752528585205501613984565b50505050509050565b6139fd91503d8084833e61032a8183612d06565b38613981565b83513d84823e3d90fd5b82919450613a2582913d8084833e6130878183612d06565b949150613942565b50565b600090815b8151831015613a5d57613a55600191613a4e8585612dea565b5190613403565b920191613a35565b91505090565b613a98613a8f7f0000000000000000000000000000000000000000000000000000000000000000614087565b600a5490612f3d565b908115613aa157565b60046040517f22826619000000000000000000000000000000000000000000000000000000008152fd5b929190613ad88251612d5f565b613ae0613281565b60009573ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001692427f00000000000000000000000000000000000000000000000000000000000000001115985b8751811015613dcf57670de0b6b3a7640000613b6983613b63848c612dea565b51614d2b565b04613b748288612dea565b5283613b808289612dea565b5116613b8c8288612dea565b51908015613d71578b613d64575b613ba38161499b565b613bac81614ca3565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808311610345576002908154908085168183160190808211612f4a577fff0000000000000000000000000000000000000000000000000000000000000091169116179055806000526020906000825260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604095868420613c50828254613403565b90558651908152a385613c638487612dea565b5116613c6f848a612dea565b5190883b156103455783517f12a31dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152600081604481838c5af18015613d59577fc0025304673122449dd60b9b0093874b0e2fd6fe57af1c7c2fbfee0ccf5ead5885948d94613d37878f968f969a8e613d288f8260019f858093613d3098613d2093613d4a575b50612dea565b51169b612dea565b511699612dea565b5195612dea565b519082519485528401523392a401613b43565b613d5390612cd6565b38613d1a565b83513d6000823e3d90fd5b613d6c61386d565b613b9a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b505050505093505050565b9081602091031261034557516fffffffffffffffffffffffffffffffff811681036103455790565b60ff8114613e585760ff811690601f8211613e2e5760405191613e2483612cea565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600554816000613e6b83612c83565b80835292602090600190818116908115613ef75750600114613e96575b505061308f92500382612d06565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410613edf575061308f9450505081016020013880613e88565b85548785018301529485019486945092810192613ec4565b90506020935061308f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013880613e88565b60ff8114613f5c5760ff811690601f8211613e2e5760405191613e2483612cea565b50604051600654816000613f6f83612c83565b80835292602090600190818116908115613ef75750600114613f9957505061308f92500382612d06565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b828410613fe2575061308f9450505081016020013880613e88565b85548785018301529485019486945092810192613fc7565b6040517fef5cfb8c0000000000000000000000000000000000000000000000000000000081523060048201526000816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610339576140735750565b613a2d903d806000833e61032a8183612d06565b60009073ffffffffffffffffffffffffffffffffffffffff16806140ab5750504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9182156141295780926140f5575b505090565b9091506020823d602011614121575b8161411160209383612d06565b8101031261411e57505190565b80fd5b3d9150614104565b604051903d90823e3d90fd5b3d1561418e573d9067ffffffffffffffff82116108bd576040519161418260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612d06565b82523d6000602084013e565b606090565b82156143d35773ffffffffffffffffffffffffffffffffffffffff168061422c5750600080809381935af16141c6614135565b50156141ce57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b61430c90604051906142bd82614291602097888301977fa9059cbb000000000000000000000000000000000000000000000000000000008952602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612d06565b604051916142ca83612cea565b8583527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656486840152600080958192519082855af1614306614135565b91615422565b8051918215918483156143ab575b5050509050156143275750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b9193818094500103126143cf5782015190811515820361411e57508038808461431a565b5080fd5b505050565b9190916fffffffffffffffffffffffffffffffff80809416911601918211612f4a57565b919061440781613a30565b9273ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691823b15610345576040958651937fb64761f900000000000000000000000000000000000000000000000000000000855260009485816004938183816144ad8930600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156148f5576148e2575b50427f000000000000000000000000000000000000000000000000000000000000000011918215926146cd575b506144f2613281565b856144fd8551612d5f565b9680927f0000000000000000000000000000000000000000000000000000000000000000925b875185101561466257614536858c612dea565b518390670de0b6b3a7640000808202908282041482151715614634578f918e8d8f928b978f91978f8a9961456b8d8c9a614d3e565b91614603575b5061457c8888612dea565b528c846145898986612dea565b51166145958989612dea565b51906145a092614193565b6145a991613403565b9b6145b391612dea565b5116946145bf91612dea565b51916145ca91612dea565b518251918252602082015233917f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa291a360010193614523565b8192509061462861462d926fffffffffffffffffffffffffffffffff600c5416615396565b612f3d565b9038614571565b6011897f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b995050505050505050509250806146765750565b6fffffffffffffffffffffffffffffffff808211610345577fffffffffffffffffffffffffffffffff000000000000000000000000000000006146c182600c5494168460801c6143d8565b60801b16911617600c55565b301561485f5782614852575b6146e23061499b565b6146eb30614ca3565b30865285602052888620548181106147cf5781903088528760205203898720557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082116103455760025490808316818316038181116147a257889392917fff00000000000000000000000000000000000000000000000000000000000000911691161760025589519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203092a3386144e9565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60848a517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b61485a61386d565b6146d9565b608489517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b6148ee90959195612cd6565b93386144bc565b89513d88823e3d90fd5b427f00000000000000000000000000000000000000000000000000000000000000001115614972576149507f0000000000000000000000000000000000000000000000000000000000000000614087565b30600052600060205260406000205480821060001461496d575090565b905090565b61308f7f0000000000000000000000000000000000000000000000000000000000000000614087565b6000916149a6612ffb565b92427f000000000000000000000000000000000000000000000000000000000000000011614a7457506149d98351612d5f565b9060005b8451811015614a29578073ffffffffffffffffffffffffffffffffffffffff614a0860019388612dea565b5116600052600d602052604060002054614a228286612dea565b52016149dd565b50925b8051156143d35773ffffffffffffffffffffffffffffffffffffffff83168015159081614a69575b50614a5e57505050565b614a6792614fe2565b565b905030141538614a54565b6040939193517ff8b2f99100000000000000000000000000000000000000000000000000000000815281816004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1918215614129578092614af2575b505090614a2c565b614b0692503d8091833e61032a8183612d06565b3880614aea565b906000614b18612ffb565b90427f000000000000000000000000000000000000000000000000000000000000000011614c0a5750614b4b8151612d5f565b9160005b8251811015614b9b578073ffffffffffffffffffffffffffffffffffffffff614b7a60019386612dea565b5116600052600d602052604060002054614b948287612dea565b5201614b4f565b50925b815115614c045773ffffffffffffffffffffffffffffffffffffffff9083838383168015159081614bf9575b50614be8575b50505083168015159081614a695750614a5e57505050565b614bf192614fe2565b388383614bd0565b905030141538614bca565b50505050565b6040939293517ff8b2f99100000000000000000000000000000000000000000000000000000000815281816004818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1918215614129578092614c88575b505091614b9e565b614c9c92503d8091833e61032a8183612d06565b3880614c80565b427f000000000000000000000000000000000000000000000000000000000000000011614d1e576fffffffffffffffffffffffffffffffff600c54165b73ffffffffffffffffffffffffffffffffffffffff82168015159081614d13575b50614d0a575050565b614a67916151a2565b905030141538614d01565b614d26613281565b614ce0565b81810292918115918404141715612f4a57565b8115614d48570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311614e075791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15614dfa57815173ffffffffffffffffffffffffffffffffffffffff811615614df4579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b6005811015614f7d5780614e245750565b60018103614e8a5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103614ef05760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314614ef957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b15614fb357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b9092919273ffffffffffffffffffffffffffffffffffffffff6150198184169384151580615198575b61501490614fac565b6153b9565b9160005b81518110156139e057826150318284612dea565b51169061503e8189612dea565b51826000526008906020908282526040806000208a60005283526fffffffffffffffffffffffffffffffff91828260002054168015615190575b81811461518157670de0b6b3a764000061509e6150986150bd9385612f3d565b8d614d2b565b0488600052868652836000208d6000528652836000205460801c613403565b9183821161034557838311610345578051948186019686881067ffffffffffffffff8911176108bd5760019986809561517b9a86521688528483890196168652600052815281600020908d600052526000209351167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835551166fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b0161501d565b5050505050506001915061517b565b506001615078565b503085141561500b565b73ffffffffffffffffffffffffffffffffffffffff81168015158061538c575b6151cb90614fac565b600090808252600960205260408220928354906fffffffffffffffffffffffffffffffff94858316928784146153825783156153465750508561524561523561524b9373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b61523f8584612f3d565b90614d2b565b92614d2b565b90670de0b6b3a764000090818102918183041490151715615319579061527091614d3e565b838111615315576152d790828452600960205261529785604086209216825460801c6143d8565b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b8284116143cf5790604091815260096020522091167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b8280fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b95949250958093508491501161411e5750907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091169116179055565b5050505050505050565b50308114156151c2565b670de0b6b3a764000091828102928184041490151715612f4a5761308f91614d3e565b73ffffffffffffffffffffffffffffffffffffffff1660009080825260096020526fffffffffffffffffffffffffffffffff60408320541680156140f0578261540f60409261308f956020528383205490615396565b9281526009602052205460801c90613403565b9192901561549d5750815115615436575090565b3b1561543f5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156154b05750805190602001fd5b6154ee906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b7a565b0390fdfea2646970667358221220affc153a08877a017e9561699ca4e2b643f3df59c9f77287552b6c29350fb7dc64736f6c634300081700330000000000000000000000007a493be5c2ce014cd049bf178a1ac0db1b434744000000000000000000000000ddfd5e912c1949b4bdb12579002c44b7a83f9e8800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000667cab80000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000225954205a697263756974205374616b696e6720657a4554482032374a554e32303234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559542d7a732d657a4554482d32374a554e323032340000000000000000000000