[ { "inputs": [ { "internalType": "address", "name": "_PT", "type": "address" }, { "internalType": "int256", "name": "_scalarRoot", "type": "int256" }, { "internalType": "int256", "name": "_initialAnchor", "type": "int256" }, { "internalType": "uint80", "name": "_lnFeeRateRoot", "type": "uint80" }, { "internalType": "address", "name": "_vePendle", "type": "address" }, { "internalType": "address", "name": "_gaugeController", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "int256", "name": "exchangeRate", "type": "int256" } ], "name": "MarketExchangeRateBelowOne", "type": "error" }, { "inputs": [], "name": "MarketExpired", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "currentAmount", "type": "int256" }, { "internalType": "int256", "name": "requiredAmount", "type": "int256" } ], "name": "MarketInsufficientPtForTrade", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualBalance", "type": "uint256" }, { "internalType": "uint256", "name": "requiredBalance", "type": "uint256" } ], "name": "MarketInsufficientPtReceived", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "actualBalance", "type": "uint256" }, { "internalType": "uint256", "name": "requiredBalance", "type": "uint256" } ], "name": "MarketInsufficientSyReceived", "type": "error" }, { "inputs": [], "name": "MarketProportionMustNotEqualOne", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "proportion", "type": "int256" }, { "internalType": "int256", "name": "maxProportion", "type": "int256" } ], "name": "MarketProportionTooHigh", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "rateScalar", "type": "int256" } ], "name": "MarketRateScalarBelowZero", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "scalarRoot", "type": "int256" } ], "name": "MarketScalarRootBelowZero", "type": "error" }, { "inputs": [], "name": "MarketZeroAmountsInput", "type": "error" }, { "inputs": [], "name": "MarketZeroAmountsOutput", "type": "error" }, { "inputs": [], "name": "MarketZeroLnImpliedRate", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "totalPt", "type": "int256" }, { "internalType": "int256", "name": "totalAsset", "type": "int256" } ], "name": "MarketZeroTotalPtOrTotalAsset", "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": "receiverSy", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiverPt", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "netLpBurned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "netSyOut", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "netPtOut", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "observationCardinalityNextOld", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "observationCardinalityNextNew", "type": "uint16" } ], "name": "IncreaseObservationCardinalityNext", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "netLpMinted", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "netSyUsed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "netPtUsed", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "rewardsOut", "type": "uint256[]" } ], "name": "RedeemRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "netPtOut", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "netSyOut", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "netSyFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "netSyToReserve", "type": "uint256" } ], "name": "Swap", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lnLastImpliedRate", "type": "uint256" } ], "name": "UpdateImpliedRate", "type": "event" }, { "inputs": [], "name": "_storage", "outputs": [ { "internalType": "int128", "name": "totalPt", "type": "int128" }, { "internalType": "int128", "name": "totalSy", "type": "int128" }, { "internalType": "uint96", "name": "lastLnImpliedRate", "type": "uint96" }, { "internalType": "uint16", "name": "observationIndex", "type": "uint16" }, { "internalType": "uint16", "name": "observationCardinality", "type": "uint16" }, { "internalType": "uint16", "name": "observationCardinalityNext", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "activeBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "receiverSy", "type": "address" }, { "internalType": "address", "name": "receiverPt", "type": "address" }, { "internalType": "uint256", "name": "netLpToBurn", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "netSyOut", "type": "uint256" }, { "internalType": "uint256", "name": "netPtOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": "getNonOverrideLnFeeRateRoot", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "cardinalityNext", "type": "uint16" } ], "name": "increaseObservationsCardinalityNext", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isExpired", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRewardBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "netSyDesired", "type": "uint256" }, { "internalType": "uint256", "name": "netPtDesired", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "netLpOut", "type": "uint256" }, { "internalType": "uint256", "name": "netSyUsed", "type": "uint256" }, { "internalType": "uint256", "name": "netPtUsed", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "observations", "outputs": [ { "internalType": "uint32", "name": "blockTimestamp", "type": "uint32" }, { "internalType": "uint216", "name": "lnImpliedRateCumulative", "type": "uint216" }, { "internalType": "bool", "name": "initialized", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "secondsAgos", "type": "uint32[]" } ], "name": "observe", "outputs": [ { "internalType": "uint216[]", "name": "lnImpliedRateCumulative", "type": "uint216[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "router", "type": "address" } ], "name": "readState", "outputs": [ { "components": [ { "internalType": "int256", "name": "totalPt", "type": "int256" }, { "internalType": "int256", "name": "totalSy", "type": "int256" }, { "internalType": "int256", "name": "totalLp", "type": "int256" }, { "internalType": "address", "name": "treasury", "type": "address" }, { "internalType": "int256", "name": "scalarRoot", "type": "int256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint256", "name": "lnFeeRateRoot", "type": "uint256" }, { "internalType": "uint256", "name": "reserveFeePercent", "type": "uint256" }, { "internalType": "uint256", "name": "lastLnImpliedRate", "type": "uint256" } ], "internalType": "struct MarketState", "name": "market", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "readTokens", "outputs": [ { "internalType": "contract IStandardizedYield", "name": "_SY", "type": "address" }, { "internalType": "contract IPPrincipalToken", "name": "_PT", "type": "address" }, { "internalType": "contract IPYieldToken", "name": "_YT", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "redeemRewards", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardState", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "lastBalance", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "exactPtIn", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapExactPtForSy", "outputs": [ { "internalType": "uint256", "name": "netSyOut", "type": "uint256" }, { "internalType": "uint256", "name": "netSyFee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "exactPtOut", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swapSyForExactPt", "outputs": [ { "internalType": "uint256", "name": "netSyIn", "type": "uint256" }, { "internalType": "uint256", "name": "netSyFee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalActiveSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userReward", "outputs": [ { "internalType": "uint128", "name": "index", "type": "uint128" }, { "internalType": "uint128", "name": "accrued", "type": "uint128" } ], "stateMutability": "view", "type": "function" } ]
6102208060405234620004ec5760c081620068398038038091620000248285620008f6565b833981010312620004ec576200003a816200091a565b602082015160408301516060840151916001600160501b0383168303620004ec576200007760a06200006f608088016200091a565b96016200091a565b60405163afd27bf560e01b81529095906020816004816001600160a01b038a165afa908115620004fa5760009162000898575b50604051620000b981620008da565b600d81526c14195b991b194813585c9ad95d609a1b602082015260405190620000e282620008da565b600a8252691411539113114b53141560b21b60208301528051906001600160401b0382116200076b5760035490600182811c921680156200088d575b60208310146200074a5781601f84931162000818575b50602090601f83116001146200078d5760009262000781575b50508160011b916000199060031b1c1916176003555b8051906001600160401b0382116200076b5760045490600182811c9216801562000760575b60208310146200074a5781601f849311620006d8575b50602090601f831160011462000649576000926200063d575b50508160011b916000199060031b1c1916176004555b6012608052600280546001600160f81b0316600160f81b17905560a0526001600160a01b0390811660e052610100868152604051635162986d60e11b81529096909160209183916004918391600091165af1908115620004fa57600091620005fb575b5060c0526001600160a01b03841661012081815260405163afd27bf560e01b815290959091602090839060049082905afa918215620004fa57600092620005b5575b506001600160a01b03918216610140908152865160405163781c18db60e01b8152919391929160209184916004918391165afa918215620004fa5760009262000571575b506101609160018060a01b0316825260405163329f6acb60e21b8152600c600482015263ffffffff4216602482015260408160448173e2978be1b9fb8a2a70ce6097c640047a64b5c0475af4908115620004fa576000906000926200051f575b50600b805463ffffffff60701b191660809390931b61ffff60801b169290921760709190911b61ffff60701b16179055600084131562000506576101c09384526101e09485526102009586526040516370c264df60e11b8152929190602090849060049082906001600160a01b03165afa928315620004fa57600093620004bb575b506101a09283526101809133835260405197615ef9998a620009408b396080518a61186e015260a0518a8181613be101526151f5015260c0518a613c14015260e0518a81816128ae01526156f5015251896152260152518881816103ee015281816115ce0152818161195f01528181611b3e01528181611fb901526125010152518781816104220152818161140b0152818161193a01528181611b0601528181611ccc01528181611ffa01526124ad01525186818161135c0152818161198601528181611a5001526121d0015251858181610888015261313601525184818161070b01528181611328015281816118c901528181611a1c0152818161219c01526131d2015251836131af015251826126d20152518181816106b1015261318a0152f35b9092506020813d602011620004f1575b81620004da60209383620008f6565b81010312620004ec5751913862000398565b600080fd5b3d9150620004cb565b6040513d6000823e3d90fd5b60405163483512b160e11b815260048101859052602490fd5b9150506040813d60401162000568575b816200053e60409383620008f6565b81010312620004ec5762000560602062000558836200092f565b92016200092f565b903862000316565b3d91506200052f565b9091506020813d602011620005ac575b816200059060209383620008f6565b81010312620004ec57620005a4906200091a565b9038620002b6565b3d915062000581565b9091506020813d602011620005f2575b81620005d460209383620008f6565b81010312620004ec57620005ea6004916200091a565b919062000272565b3d9150620005c5565b90506020813d60201162000634575b816200061960209383620008f6565b81010312620004ec576200062d906200091a565b3862000230565b3d91506200060a565b015190503880620001b7565b6004600090815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f1984168510620006bc576001945083601f19811610620006a2575b505050811b01600455620001cd565b015160001960f88460031b161c1916905538808062000693565b8181015183556020948501946001909301929091019062000676565b60046000529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c81016020851062000742575b90849392915b601f830160051c82018110620007325750506200019e565b600081558594506001016200071a565b508062000714565b634e487b7160e01b600052602260045260246000fd5b91607f169162000188565b634e487b7160e01b600052604160045260246000fd5b0151905038806200014d565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9350601f198516905b818110620007ff5750908460019594939210620007e5575b505050811b0160035562000163565b015160001960f88460031b161c19169055388080620007d6565b92936020600181928786015181550195019301620007be565b60036000529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c8101916020851062000882575b90601f859493920160051c01905b81811062000872575062000134565b6000815584935060010162000863565b909150819062000855565b91607f16916200011e565b90506020813d602011620008d1575b81620008b660209383620008f6565b81010312620004ec57620008ca906200091a565b38620000aa565b3d9150620008a7565b604081019081106001600160401b038211176200076b57604052565b601f909101601f19168101906001600160401b038211908210176200076b57604052565b51906001600160a01b0382168203620004ec57565b519061ffff82168203620004ec5756fe608080604052600436101561001357600080fd5b60003560e01c90816306fdde0314612bd2575080630892cd8b14612b6d578063095ea7b314612b1e578063156e29f61461210557806318160ddd146120a85780631dd19cb414611f0c57806323b872dd14611d7a578063252c09d714611cf857806329910b11146119ad5780632c8ce6bc146118ee5780632f13b60c14611892578063313ce5671461183657806337d45e3a146116245780635b709f17146112b95780635cbadbe41461121e57806370a08231146111b35780637206926414611177578063794052f3146110c4578063883bdbfd14610e215780639262187b14610b9957806395d89b4114610a41578063a9059cbb1461096d578063a9f8d18114610931578063c3fb90d6146108ac578063c45a01551461083d578063c4f59f9b146107ab578063dd62ed3e1461072e578063e184c9be146106d5578063e4f8b2e914610670578063ea64a820146105e65763f6b911bc1461017457600080fd5b3461044e5761018236612d59565b916002805490610197818360f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8093161781556101e73361302e565b3015610562576101f630614b3e565b30600052602092600084526040600020548781106104de57879030600052600086520360406000205580871161044e578254818816828216038281116104af57827fff000000000000000000000000000000000000000000000000000000000000009116911617835560006040518881527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef863092a361029530614c01565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871161044e57861561048557838201956102d1875189613b5c565b956102e26040850197885190613db8565b976102f96102f186518c613b5c565b895190613db8565b9789158061047d575b610453576103118b8251614d3a565b905261031e888651614d3a565b855261032b898251614d3a565b90526000881261044e576000871261044e577f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f908860409a6103c07f01000000000000000000000000000000000000000000000000000000000000009773ffffffffffffffffffffffffffffffffffffffff808716968530890361041b575b50508c81891698308a036103e8575b505050613498565b8b51908152602081019190915260408101899052606090a38254161790558351928352820152f35b610413927f0000000000000000000000000000000000000000000000000000000000000000166136ca565b388c816103b8565b61044791837f0000000000000000000000000000000000000000000000000000000000000000166136ca565b38856103a9565b600080fd5b60046040517fccbf5468000000000000000000000000000000000000000000000000000000008152fd5b508815610302565b60046040517f25daaec3000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b608485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b3461044e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5773ffffffffffffffffffffffffffffffffffffffff610632612d13565b166000908152600760209081526040918290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b0390f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57602060405169ffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461044e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57610765612d13565b61076d612d36565b9073ffffffffffffffffffffffffffffffffffffffff8091166000526001602052604060002091166000526020526020604060002054604051908152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e576107e2613b9b565b6040518091602080830160208452825180915260206040850193019160005b82811061081057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610801565b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760c0600a54600b5461ffff906040519280600f0b845260801d600f0b60208401526bffffffffffffffffffffffff81166040840152818160601c166060840152818160701c16608084015260801c1660a0820152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e576020600654604051908152f35b3461044e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e577f01000000000000000000000000000000000000000000000000000000000000006109c5612d13565b610a2e600254916109dc60028460f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033613855565b6002541617600255602060405160018152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760405160009060045460018160011c9060018316928315610b8f575b6020938484108114610b6057838652908115610b225750600114610ac7575b61066c84610abb81880382612ea5565b60405191829182612cad565b600460009081529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610b0f575050508161066c93610abb9282010193610aab565b8054858501870152928501928101610af3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858501525050151560051b8201019150610abb8161066c610aab565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610a8c565b3461044e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57610bd1612d13565b9060025490610be660028360f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80931617600255610c3783614b3e565b610c4083614c01565b610c48613b9b565b92610c5384516146f7565b90600073ffffffffffffffffffffffffffffffffffffffff95868316915b8151811015610db45787610c858284614746565b5116600052600590818752604060002084600052875260406000205491608092831c610cb18389614746565b52610cbc8288614746565b51610ccd575b506001915001610c71565b89610cd88386614746565b5116600052875260406000208460005287526040600020916fffffffffffffffffffffffffffffffff92838154169055610d128288614746565b519083821161044e578a610d268487614746565b5116600052600789528360406000209216908254901c039283116104af57600192610d8c91906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b610dae89610d9a8386614746565b511686610da7848a614746565b5191614c93565b89610cc2565b61066c857f010000000000000000000000000000000000000000000000000000000000000089867f78d61a0c27b13f43911095f9f356f14daa3cd8b125eea1aa22421245e90e813d60405180610e0a8782612efe565b0390a2600254161760025560405191829182612efe565b3461044e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5767ffffffffffffffff60043581811161044e573660238201121561044e578060040135610e7d81612ee6565b91610e8b6040519384612ea5565b8183528483016024819360051b8301019136831161044e57602401905b8282106110a85750505063ffffffff91600b5461ffff906040519485937f1dd421ce00000000000000000000000000000000000000000000000000000000855260c4850190600c6004870152824216602487015260c060448701525180915260e4850195916000905b8a83831061108b578a88600081808d8c8c6bffffffffffffffffffffffff81166064850152818160601c16608485015260701c1660a4830152038173e2978be1b9fb8a2a70ce6097c640047a64b5c0475af491821561107f57600092610fd4575b5050906040519181839283018184528251809152816040850193019160005b828110610fa057505050500390f35b83517affffffffffffffffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610f91565b9091503d806000843e610fe78184612ea5565b820191838184031261044e57805191821161044e57019080601f8301121561044e57815161101481612ee6565b926110226040519485612ea5565b818452848085019260051b82010192831161044e578401905b82821061104c575050508280610f72565b81517affffffffffffffffffffffffffffffffffffffffffffffffffffff8116810361044e57815290840190840161103b565b6040513d6000823e3d90fd5b845182168952978801978997509093019260019190910190610f11565b813563ffffffff8116810361044e578152908601908601610ea8565b3461044e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57610120611106611101612d13565b61302e565b6040519080518252602081015160208301526040810151604083015273ffffffffffffffffffffffffffffffffffffffff60608201511660608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008091015190820152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e576020600854604051908152f35b3461044e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760206112166111ef612d13565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b604051908152f35b3461044e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57611255612d13565b61125d612d36565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526005602090815260408083209390941682529182528290205482516fffffffffffffffffffffffffffffffff8216815260809190911c91810191909152f35b3461044e576112c736612db9565b9192906002546112dd60028260f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f000000000000000000000000000000000000000000000000000000000000000011156115fa576113563361302e565b926113807f0000000000000000000000000000000000000000000000000000000000000000613400565b937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90818811908161044e576113bc6113c6978a4291846141ce565b9791989098613b0a565b9860008a1261044e576000891261044e576000881261044e5773ffffffffffffffffffffffffffffffffffffffff91828716968c3089036115c7575b505061143889847f00000000000000000000000000000000000000000000000000000000000000001694606087015116856136ca565b61144184613498565b8161154a575b505060206114548261366b565b9201918251906000821261044e571061150057505061044e57851161044e576040957f829000a5bc6a12d46e30cdcecd7c56b1efd88f6d7d059da6734a04f3764557c4857f0100000000000000000000000000000000000000000000000000000000000000956114e96114c68a613b0a565b8b5195865260208601526040850192909252606084015233929081906080820190565b0390a3600254161760025582519182526020820152f35b6115099061366b565b9051906000821261044e57604491604051917ff62951c700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6000945090858b1161044e5761155f8b613b0a565b333b1561044e578c6115a160009360405195869485947ffa483e7200000000000000000000000000000000000000000000000000000000865260048601612fac565b038183335af1801561107f576115b8575b80611447565b6115c190612e46565b8a6115b2565b6115f391857f0000000000000000000000000000000000000000000000000000000000000000166136ca565b8c8c611402565b60046040517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b3461044e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e576004359061ffff9081831680930361044e576002549161167a60028460f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760025580600b5460801c16604051947f587cdc06000000000000000000000000000000000000000000000000000000008652600c60048701528160248701526044860152828560648173e2978be1b9fb8a2a70ce6097c640047a64b5c0475af491821561107f576000926117e0575b7f010000000000000000000000000000000000000000000000000000000000000095508216808203611767575b60028054861687179055005b7fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a936040937fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff71ffff00000000000000000000000000000000600b549260801b16911617600b558351928352820152a18280808061175b565b91508285813d831161182f575b6117f78183612ea5565b8101031261044e576118297f010000000000000000000000000000000000000000000000000000000000000095612ffe565b9161172e565b503d6117ed565b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e576020604051427f000000000000000000000000000000000000000000000000000000000000000011158152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57606060405173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000168252807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b3461044e576119bb36612db9565b9091926002546119d160028260f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f000000000000000000000000000000000000000000000000000000000000000011156115fa57611a4a3361302e565b91611a747f0000000000000000000000000000000000000000000000000000000000000000613400565b957f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96878211908161044e57611ab6904290611aaf85613b0a565b90886141ce565b969198909760008a1261044e576000891261044e576000881261044e5773ffffffffffffffffffffffffffffffffffffffff91828716968b308903611cc5575b5050611b2b8984606087015116857f0000000000000000000000000000000000000000000000000000000000000000166136ca565b611b3484613498565b81611c46575b50507f000000000000000000000000000000000000000000000000000000000000000016611b678161366b565b8251906000821261044e5710611bfc57505061044e57611b8690613b0a565b95851161044e576040957f829000a5bc6a12d46e30cdcecd7c56b1efd88f6d7d059da6734a04f3764557c46114e97f0100000000000000000000000000000000000000000000000000000000000000958951918291898b3397859094939260609260808301968352602083015260408201520152565b611c059061366b565b9051906000821261044e57604491604051917f2c49ea0f00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b6000945090611c5486613b0a565b908c8c1161044e57333b1561044e57600091611c9f8d9260405195869485947ffa483e7200000000000000000000000000000000000000000000000000000000865260048601612fac565b038183335af1801561107f57611cb6575b80611b3a565b611cbf90612e46565b8a611cb0565b611cf191857f0000000000000000000000000000000000000000000000000000000000000000166136ca565b8c8b611af6565b3461044e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760043561ffff81101561044e57606090600c01546040519063ffffffff811682527affffffffffffffffffffffffffffffffffffffffffffffffffffff8160201c16602083015260f81c15156040820152f35b3461044e57611d8836612d59565b60025491611d9c60028460f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760025573ffffffffffffffffffffffffffffffffffffffff841660005260016020526040600020336000526020526040600020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103611e6a575b5090610a2e917f010000000000000000000000000000000000000000000000000000000000000094613855565b9190818310611eae577f010000000000000000000000000000000000000000000000000000000000000094611ea583610a2e9503338361328b565b94509091611e3d565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57600254611f4e60028260f81c1415612f3a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255611f9f3361302e565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001692611fe38461366b565b82516000811261044e57611ff691612f9f565b90807f000000000000000000000000000000000000000000000000000000000000000016906120248261366b565b956020850151966000881261044e577f01000000000000000000000000000000000000000000000000000000000000009761205e91612f9f565b9380612090575b5050826120785760028054861687179055005b606061208794015116906136ca565b8280808061175b565b6120a19183606088015116906136ca565b8680612065565b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461044e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5761213c612d13565b602435907f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025461219460028260f81c1415612f3a565b1617600255427f000000000000000000000000000000000000000000000000000000000000000011156115fa576121ca3361302e565b906121f47f0000000000000000000000000000000000000000000000000000000000000000613400565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80851161044e57806044351161044e57600085158015612b14575b610485574260a086015111156115fa57604085015180612a7d57505061225960443586613b5c565b906000821261044e5760006003831115612a6e5750816001908060011c600181018091116104af5791905b848310612a53575050505b811161044e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1881019081136001166104af57926103e8604435935b60008613801590612a48575b8015612a3d575b610453576122f0876020850151613ea8565b6020840152612300858451613ea8565b835261231961230f8388613ea8565b6040850151613ea8565b60408401526000821261044e576000861261044e576000871261044e576000851261044e57816126a3575b505073ffffffffffffffffffffffffffffffffffffffff8216156126455761236b82614b3e565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161044e576002547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80861681831601116104af577fff000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808716818416011691161760025573ffffffffffffffffffffffffffffffffffffffff82166000526000602052604060002061243e85825461348b565b905560405184815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff861693a361248d82614c01565b61249681613498565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166124d68161366b565b6020830151906000821261044e57106125f8575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661252a8161366b565b8251906000821261044e5710611bfc575050604080518481526020810186905290810183905261066c929173ffffffffffffffffffffffffffffffffffffffff16907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90606090a27f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6002541617600255604051938493846040919493926060820195825260208201520152565b61260360209161366b565b910151906000821261044e57604491604051917ff62951c700000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b4260a084015111156115fa576126c161270491602085015190613ec4565b6126cf4260a0860151612f9f565b907f0000000000000000000000000000000000000000000000000000000000000000906126fc8387613f5d565b908651613fef565b610100830152612712614979565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161044e57600254907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831601917effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116104af5760206000927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef927fff000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600197169116176002558484528382526040842061282f82825461348b565b9055604051908152a3306001141580612849575b80612344565b612852906154bb565b600160005260006020526040600020546040517fe268b3a400000000000000000000000000000000000000000000000000000000815260016004820152604081602481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561107f576000916000916129f6575b50826028810204602814831517156104af5760646028840204916fffffffffffffffffffffffffffffffff8116612983575b50509080821060001461297c57505b612947816129426008546001600052600960205260406000205490612f9f565b61348b565b600855600160005260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365585612843565b9050612922565b906129c96fffffffffffffffffffffffffffffffff806129ce941692167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416613f4a565b613fe5565b90603c820291808304603c14901517156104af5760646129ef92049061348b565b8780612913565b9150506040813d604011612a35575b81612a1260409383612ea5565b8101031261044e57612a2f6020612a2883615ea6565b9201615ea6565b886128e1565b3d9150612a05565b5060008513156122de565b5060008713156122d7565b90919350612a65846129428184613fe5565b821c9190612284565b911561228f576001915061228f565b612a9b91959250612a9390604497959735613b5c565b825190613db8565b93612aaa604083015185613b5c565b93612abb6020840195865190613db8565b9081871215612af9575050612af3612ad7866044359651613b5c565b612aee612ae960408601518093613ea8565b613e3c565b613db8565b956122cb565b9550959350612b0e612ad78796978451613b5c565b936122cb565b5060443515612231565b3461044e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e57612b62612b58612d13565b602435903361328b565b602060405160018152f35b3461044e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5773ffffffffffffffffffffffffffffffffffffffff612bb9612d13565b1660005260096020526020604060002054604051908152f35b3461044e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261044e5760009060035460018160011c9060018316928315612ca3575b6020938484108114610b6057838652908115610b225750600114612c485761066c84610abb81880382612ea5565b600360009081529294507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410612c90575050508161066c93610abb9282010193610aab565b8054858501870152928501928101612c74565b91607f1691612c1a565b60208082528251818301819052939260005b858110612cff575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b818101830151848201604001528201612cbf565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361044e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361044e57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261044e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361044e5791602435908116810361044e579060443590565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261044e5760043573ffffffffffffffffffffffffffffffffffffffff8116810361044e57916024359160443567ffffffffffffffff9283821161044e578060238301121561044e57816004013593841161044e576024848301011161044e576024019190565b67ffffffffffffffff8111612e5a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117612e5a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612e5a57604052565b67ffffffffffffffff8111612e5a5760051b60200190565b602090602060408183019282815285518094520193019160005b828110612f26575050505090565b835185529381019392810192600101612f18565b15612f4157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b919082039182116104af57565b9293806080957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094601f9487526020870152606060408701528160608701528686013760008582860101520116010190565b519061ffff8216820361044e57565b519073ffffffffffffffffffffffffffffffffffffffff8216820361044e57565b906040805192610120840184811067ffffffffffffffff821117612e5a57825260608401600090818152608086019180835260a087019381855260c088019282845260e089018381526101008a01978489528a600a5480600f0b825260801d600f0b60208201527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821161326d5782015273ffffffffffffffffffffffffffffffffffffffff91828251957f5c098c11000000000000000000000000000000000000000000000000000000008752306004880152166024860152606085604481867f0000000000000000000000000000000000000000000000000000000000000000165afa80156132815786928796889261320d575b505060ff16905216905269ffffffffffffffffffff915080821661320857507f00000000000000000000000000000000000000000000000000000000000000005b1690527f000000000000000000000000000000000000000000000000000000000000000090527f000000000000000000000000000000000000000000000000000000000000000090526bffffffffffffffffffffffff600b54169052565b6131aa565b93509550506060823d606011613279575b8161322b60609383612ea5565b810103126132755761323c8261300d565b9460208301519269ffffffffffffffffffff841684036132715701519460ff8616860361326d57919460ff38613169565b8680fd5b8780fd5b8580fd5b3d915061321e565b82513d88823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff80911691821561337d57169182156132f95760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b602073ffffffffffffffffffffffffffffffffffffffff600460009360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af190811561107f5760009161345c575090565b90506020813d602011613483575b8161347760209383612ea5565b8101031261044e575190565b3d915061346a565b919082018092116104af57565b610100810180516bffffffffffffffffffffffff80821161044e576134ca60206134c2865161417f565b95015161417f565b93600b549161ffff956040968751947f4af74b68000000000000000000000000000000000000000000000000000000008652600c6004870152818160601c16602487015263ffffffff421660448701528381166064870152818160701c16608487015260801c1660a4850152868460c48173e2978be1b9fb8a2a70ce6097c640047a64b5c0475af49182156136605760009360009361360a575b6dffff0000000000000000000000009495507fffffffffffffffffffffffffffffffff00000000000000000000000000000000809360801b16906fffffffffffffffffffffffffffffffff1617600a556fffff0000000000000000000000000000600b549360701b1695169116179160601b161717600b555190519081527f5c0e21d57bb4cf91d8fe238d6f92e2685a695371b19209afcce6217b478f83e160204292a2565b925092508684813d8311613659575b6136238183612ea5565b8101031261044e576dffff00000000000000000000000092613650602061364987612ffe565b9601612ffe565b92859450613564565b503d613619565b87513d6000823e3d90fd5b602073ffffffffffffffffffffffffffffffffffffffff916024604051809481937f70a08231000000000000000000000000000000000000000000000000000000008352306004840152165afa90811561107f5760009161345c575090565b9060405160208101937fa9059cbb00000000000000000000000000000000000000000000000000000000855273ffffffffffffffffffffffffffffffffffffffff8093166024830152604482015260448152608081019181831067ffffffffffffffff841117612e5a5761378b9383604052169061374783612e89565b602083527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460a0820152600080958192519082855af1613785614c35565b9161587b565b908151918215928315613827575b505050156137a357565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b819293509060209181010312613851576020015190811515820361384e5750388080613799565b80fd5b5080fd5b91909173ffffffffffffffffffffffffffffffffffffffff808216908115613a86578416928315613a02578382146139a4576138918584614b92565b6000908282528160205260408220548181106139205760208260408587957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95878c99528286520382822055868152206138ec82825461348b565b9055604051908152a33003613911575b5030036139065750565b61390f9061568d565b565b61391a9061568d565b386138fc565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b9081600003918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14901517156104af57565b90670de0b6b3a7640000918281029281840514901517156104af57565b8181029291600082127f80000000000000000000000000000000000000000000000000000000000000008214166104af5781840514901517156104af57565b73ffffffffffffffffffffffffffffffffffffffff6040517fc4f59f9b0000000000000000000000000000000000000000000000000000000081526000918282600481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215613dad578392613d0e575b507f000000000000000000000000000000000000000000000000000000000000000091613c3e8382614789565b613d07578051906001906001830195868411613cda577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c97613c8189612ee6565b98613c8f6040519a8b612ea5565b808a52612ee6565b013660208901375b838110613cba57505050613cb39084614746565b9116905290565b8085613cc7859385614746565b5116613cd3828a614746565b5201613c9f565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b9250505090565b9091503d8084833e613d208183612ea5565b8101906020908181840312613da95780519067ffffffffffffffff821161327557019180601f84011215613da9578251613d5981612ee6565b93613d676040519586612ea5565b818552838086019260051b82010192831161326d578301905b828210613d9257505050509038613c11565b838091613d9e8461300d565b815201910190613d80565b8480fd5b6040513d85823e3d90fd5b8115613e0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f80000000000000000000000000000000000000000000000000000000000000008214166104af570590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182136001166104af57565b90670de0b6b3a7640000600083820393128184128116918413901516176104af57565b818103929160001380158285131691841216176104af57565b919091600083820193841291129080158216911516176104af57565b613f0b670de0b6b3a76400009160008412600014613f3f57613f067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff946147db565b613f4a565b047f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161044e57613f3c91613b5c565b90565b613f066001946147db565b818102929181159184041417156104af57565b60800151906301e13380918281029281840514901517156104af577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161044e57613fa891613db8565b906000821315613fb457565b602482604051907f1ca418760000000000000000000000000000000000000000000000000000000082526004820152fd5b8115613e0d570490565b94939291906000958681126141215761401461400e6140199383613ea8565b91613b3f565b61482e565b670d529ae9e86000008082136140ea5750614048929161401461403e61404393614d4b565b613b3f565b613ea8565b670de0b6b3a764000081126140b95761406090614838565b8381126140b5576301e133809081810291818304149015171561408857613f3c929350613fe5565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8380fd5b602490604051907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b60449250604051917ffc68d09e00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b807fffffffffffffffffffffffffffffffff800000000000000000000000000000001315806141b4575b1561044e57600f0b90565b506f7fffffffffffffffffffffffffffffff8113156141a9565b93909360a081019484865111156115fa578151848113156146c057506040918251946080860186811067ffffffffffffffff821117612e5a57845260009586815260208101938785528582019088825260608301948986528a8c5111156146975761423a8b8d51612f9f565b956142458783613f5d565b85526020820196614257885185613ec4565b808a528351908115801561468f575b61465957505082516101008401998a5192808251938a519561428e6301e13380948592613f4a565b04957f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96878111614652576142c2906159a8565b91670de0b6b3a76400009687841261461f576143029261401461403e6142f78561401461400e6142fc9761430e9c9b99613ea8565b614d4b565b90613e8f565b8a5260c0880151613f4a565b0483811161461b57906143218a926159a8565b8552614346865191519161401461400e8c51946143408d519785614d3a565b93613ea8565b670d529ae9e86000008082136145e5575061436b929161401461403e61404393614d4b565b8181126145b5578d90614389614384826140148d613b3f565b613b0a565b9451918a131561459557816140146143a092613b3f565b82811261456557506143bb6143b58392613e6c565b85613b5c565b059c5b60e0850151838111613851578e60646143da6143e19383613b5c565b0595613e8f565b91818312801561454d57156145425761441a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff936147db565b81810291818304149015171561451557866144349161348b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111614515578661446891613fe5565b92831161384e57506144859161447d91613b5c565b9b5b846150e8565b9061449090846150e8565b9a8b919c819e51906144a191612f9f565b968351906144ae91614d3a565b83528751916144bc91613ea8565b6144c591614d3a565b80965251946144d391613ec4565b91519051916144e194613fef565b809152156144ec5750565b600490517faa69ae1e000000000000000000000000000000000000000000000000000000008152fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b61441a6001936147db565b505050614485915061455f90856150e8565b9b61447f565b6024908d51907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b5061438481612aee6145a96145af94613e6c565b87613b5c565b9c6143be565b6024908c51907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b604492508e51917ffc68d09e00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b8e80fd5b5050506024908f51907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b5050508f80fd5b604492508b51917fb1c4aefb00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b508015614266565b600488517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b60449085604051917f8615426c00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b9061470182612ee6565b61470e6040519182612ea5565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061473c8294612ee6565b0190602036910137565b805182101561475a5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9081519160005b8381106147a05750505050600090565b73ffffffffffffffffffffffffffffffffffffffff806147c08385614746565b5116908416146147d257600101614790565b50505050600190565b6000808213156147e9575090565b7f80000000000000000000000000000000000000000000000000000000000000008214613cda570390565b8015613e0d576ec097ce7bc90715b34b9f10000000000590565b8115613e0d570590565b600081131561491b5780670c7d713b49da0000128061490a575b1561490157670de0b6b3a7640000906ec097ce7bc90715b34b9f1000000000906148a5908302828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f00000000001830261482e565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b0590565b613f3c90614d9c565b50670f43fc2c04ee00008112614852565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b61498161517a565b815115614b3a5760019030821415908161499c575b50505050565b6149a983959493926154bb565b600082815260209060098252604091828220549582985b6149d1575b50505050839450614996565b8051891015614b355773ffffffffffffffffffffffffffffffffffffffff6149f98a83614746565b511698614a068187614746565b519980855260059081855286862089875285526fffffffffffffffffffffffffffffffff8088882054168015614b2e575b8d81148015614b26575b614b165781614a848f92614a688f614a62670de0b6b3a76400009387612f9f565b90613f4a565b04858b52868a528d8c8c20908c528a528b8b205460801c61348b565b9111613271578181116132715792614b0d92828c9d9e9f93958d97968c5195614aac87612e89565b1685521688840152885286528787208488528652878720815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b019897966149c0565b5050505086979899508690614b0d565b508d15614a41565b5089614a37565b6149c5565b5050565b614b4661517a565b90805115614b8d5773ffffffffffffffffffffffffffffffffffffffff83168015159081614b82575b50614b7957505050565b61390f926154f1565b905030141538614b6f565b505050565b614b9a61517a565b918151156149965773ffffffffffffffffffffffffffffffffffffffff9083838383168015159081614bf6575b50614be5575b50505083168015159081614b825750614b7957505050565b614bee926154f1565b388383614bcd565b905030141538614bc7565b73ffffffffffffffffffffffffffffffffffffffff81168015159081614c2a575b506139065750565b905030141538614c22565b3d15614c8e573d9067ffffffffffffffff8211612e5a5760405191614c8260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612ea5565b82523d6000602084013e565b606090565b9190918115614b8d5773ffffffffffffffffffffffffffffffffffffffff169182614d31576000809350809281925af1614ccb614c35565b5015614cd357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b61390f926136ca565b9080821261412157613f3c91613e8f565b670de0b6b3a76400008114614d7257614d6d8161401461400e613f3c94613e6c565b614838565b60046040517fa9c8b14d000000000000000000000000000000000000000000000000000000008152fd5b670de0b6b3a764000081126150d15760649060007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c00000000000008212156150a6575b73011798004d755d3c8bc8e03204cf44619e000000821215615085575b820290808302906e01855144814a7ff805980ff00840009081831215615062575b50506b02df0ab5a80a22c61ab5a70080821215615042575b50693f1fce3da636ea5cf85080821215615022575b50690127fa27722cc06cc5e280821215615002575b5068280e60114edb805d0380821215614fe2575b50680ebc5fb4174612111080821215614fcb575b506808f00f760a4b2db55d80821215614fab575b506806f5f177578893793780821215614f8b575b506806248f33704b28660380821215614f6c575b506805c548670b9510e7ac80821215614f4d575b50614f0c68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000081830192010261482e565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b010590565b68056bc75e2d631000006756bc75e2d631000092020591019038614ed0565b68056bc75e2d6310000067ad78ebc5ac62000092020591019038614ebc565b68056bc75e2d6310000068015af1d78b58c4000092020591019038614ea8565b68056bc75e2d631000006802b5e3af16b188000092020591019038614e94565b68056bc75e2d631000008092020591019038614e80565b68056bc75e2d63100000680ad78ebc5ac620000092020591019038614e6c565b68056bc75e2d631000006815af1d78b58c40000092020591019038614e58565b68056bc75e2d63100000682b5e3af16b1880000092020591019038614e43565b68056bc75e2d631000006856bc75e2d63100000092020591019038614e2e565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101903880614e16565b906b1425982cf597cd205cef73806803782dace9d900000091059101614df5565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000614dd8565b6150dd6150e291614814565b614d9c565b60000390565b600082121561516f5761511b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff926147db565b90670de0b6b3a7640000918281029281840414901517156104af5761513f91613fe5565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161044e57613f3c91613b5c565b61511b6001926147db565b615182613b9b565b9061518d82516146f7565b825190600091156154b657600654431461545257436006556008549173ffffffffffffffffffffffffffffffffffffffff60409586517fef5cfb8c000000000000000000000000000000000000000000000000000000008152306004820152838160248183877f0000000000000000000000000000000000000000000000000000000000000000165af180156153be576153c8575b50817f000000000000000000000000000000000000000000000000000000000000000016803b156140b55783809160048a51809481937f58f3d1630000000000000000000000000000000000000000000000000000000083525af180156153be576153ab575b50825b81518110156153a1578261529f8284614746565b51169081855260076020908082528a8720938b51946152bd86612e89565b5491836fffffffffffffffffffffffffffffffff968785169485825260801c95869101528315615398575b846152f98d85969761530196615d84565b94908761348b565b9388851161044e576153129161348b565b9387851161044e57878f9560019961538797519661532f88612e89565b16865216828501528a52528b8820815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b6153918288614746565b520161528b565b600193506152e8565b5095505050919050565b6153b790939193612e46565b9138615288565b88513d86823e3d90fd5b3d8085833e6153d78183612ea5565b810160209182818303126132755780519067ffffffffffffffff821161326d570181601f820112156132755780519083808c61541e61541586612ee6565b91519182612ea5565b848152019260051b82010192831161326d578301905b82821061544357505050615222565b81518152908301908301615434565b90805b84518110156154b1578073ffffffffffffffffffffffffffffffffffffffff61548060019388614746565b5116835260076020526fffffffffffffffffffffffffffffffff6040842054166154aa8286614746565b5201615455565b505090565b919050565b156154c257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b9291909273ffffffffffffffffffffffffffffffffffffffff80911680151580615683575b61551f906154bb565b600094818652602090600982526040938488205491885b8151811015615677578261554a8284614746565b5116908a615558828b614746565b5183825260058089528a83208a845289526fffffffffffffffffffffffffffffffff94858c85205416801561566f575b8381148015615667575b61565957670de0b6b3a76400006155b56155af6155d09387612f9f565b8c613f4a565b04828652838c528d86208d87528c528d86205460801c61348b565b9386841161384e5786851161384e5786615653956001988f51966155f388612e89565b168652168b850152528852898d20898e528852898d20815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b01615536565b505050505060019150615653565b508315615592565b506001615588565b50505050505050509050565b5030811415615516565b73ffffffffffffffffffffffffffffffffffffffff6156bb8183169283151580615871575b6111ef906154bb565b9060409182517fe268b3a40000000000000000000000000000000000000000000000000000000081528460048201528381602481600080977f0000000000000000000000000000000000000000000000000000000000000000165af19081156158675783908492615826575b506fffffffffffffffffffffffffffffffff8091169060288402848104602814851517156157f95760649004928261579d575b505050908082106000146157955750925b6157878461294260085484865260096020528686205490612f9f565b600855815260096020522055565b90509261576b565b6157d092916129c991167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416613f4a565b603c810290808204603c1490151715614088579060646157f192049061348b565b38808061575a565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b809250858092503d8311615860575b61583f8183612ea5565b8101031261585c576158556020612a2883615ea6565b9038615727565b8280fd5b503d615835565b84513d85823e3d90fd5b50308414156156b2565b919290156158f6575081511561588f575090565b3b156158985790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156159095750805190602001fd5b61593f906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260048301612cad565b0390fd5b1561594a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081121580615d71575b6159db90615943565b60008112615d5c576064906806f05b59d3b20000008112615cf9577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615cc0575b6856bc75e2d631000000811215615c86575b682b5e3af16b18800000811215615c4e575b6815af1d78b58c400000811215615c16575b680ad78ebc5ac6200000811215615bdf575b82811215615ba8575b6802b5e3af16b1880000811215615b71575b68015af1d78b58c40000811215615b3a575b60028382800205058360038184840205056004828583020505600583868302050560068487830205056007858883020505906008868984020505926009878a8602050594600a888b8802050596600b898c8a02050599600c8a8d8d0205059b0101010101010101010101010205020590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590615ac8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590615ab6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590615aa4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000084920192020590615a9b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590615a89565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590615a77565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590615a65565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001615a53565b6803782dace9d90000008112615d49577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092615a3e565b68056bc75e2d6310000082600192615a3e565b615d68906000036159a8565b613f3c90614814565b5068070c1cc73b00c800008113156159d2565b9291928315615e9a5760009073ffffffffffffffffffffffffffffffffffffffff1680615e06575050615db79047612f9f565b670de0b6b3a764000090818102908082048314901517156104af57615ddf84615de692613fe5565b9384613f4a565b818101908181116104af57670de0b6b3a763ffff019081116104af570490565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215615e8e578092615e57575b505090615db791612f9f565b9091506020823d602011615e86575b81615e7360209383612ea5565b8101031261384e575051615db738615e4b565b3d9150615e66565b604051903d90823e3d90fd5b50509050600090600090565b51906fffffffffffffffffffffffffffffffff8216820361044e5756fea26469706673582212208ea9e6b1b8a22e094d87f87798d1962c13e9629079ffddf9eaba61b4b270577d64736f6c634300081800330000000000000000000000009468b647b36a23af2e48dab81a178596a6af95d9000000000000000000000000000000000000000000000000c2914ef8b06f3a000000000000000000000000000000000000000000000000000e80e22f3924ac0000000000000000000000000000000000000000000000000000038d0a4e4d25400000000000000000000000004f30a9d41b80ecc5b94306ab4364951ae317021000000000000000000000000047d74516b33ed5d70dde7119a40839f6fcc24e57