[ { "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": [], "name": "InvalidShortString", "type": "error" }, { "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" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "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": [], "name": "EIP712DomainChanged", "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": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "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": "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": "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": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "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": [ { "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" } ]
6103008060405234620005f85760c08162005c618038038091620000248285620009eb565b833981010312620005f8576200003a8162000a0f565b60208201516040830151606084015191936001600160501b0383168303620005f8576200007860a0620000706080840162000a0f565b920162000a0f565b60405163afd27bf560e01b8152906020826004816001600160a01b038a165afa91821562000606576000926200098b575b5060405190620000b982620009cf565b600c82526b121e5c195c8813585c9ad95d60a21b602083015260405191620000e183620009cf565b600983526812165411548b53141560ba1b6020840152604051926200010684620009cf565b60018452603160f81b602085015281516001600160401b0381116200074057600354600181811c9116801562000980575b60208210146200086357601f81116200091a575b50806020601f8211600114620008905760009162000884575b508160011b916000199060031b1c1916176003555b8051906001600160401b038211620007405760045490600182811c9216801562000879575b6020831014620008635781601f849311620007f1575b50602090601f8311600114620007625760009262000756575b50508160011b916000199060031b1c1916176004555b6012608052600280546001600160f81b0316600160f81b179055620002088162000a34565b61014052620002178362000bf8565b6101605260208151910120918261010052602081519101209384610120524660c0526040519460208601937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8552604087015260608601524660808601523060a086015260a0855260c085019385851060018060401b0386111762000740576040859052855190932060a0523060e052610180929092526001600160a01b039182166101c0526101e0819052635162986d60e11b835260209183916004918391600091165af1918215620006065760009262000701575b50506101a0526001600160a01b03831661020081905260405163afd27bf560e01b815290602090829060049082905afa9081156200060657600091620006bf575b506001600160a01b03908116610220526102005160405163781c18db60e01b81529160209183916004918391165afa90811562000606576000916200067d575b506001600160a01b0316610240526040805163329f6acb60e21b8152600f60048201524263ffffffff1660248201529081604481732ff909a1fd086a055931fa6796588c214f13e2745af490811562000606576000906000926200062b575b50600e805463ffffffff60701b191660809390931b61ffff60801b169290921760709190911b61ffff60701b161790556000841315620006125790602092916004946102a0526102c0526102e052604051928380926370c264df60e11b825260018060a01b03165afa9081156200060657600091620005c9575b50610280523361026052604051614eb062000db18239608051816114d0015260a05181612eb0015260c05181612f7b015260e05181612e7a01526101005181612eff01526101205181612f2501526101405181610e5601526101605181610e80015261018051818181613184015261444a01526101a051816131b801526101c051818181611ff2015261493301526101e051816144820152610200518181816103780152818161131101528181611577015281816116ff015281816119ce0152611d890152610220518181816103ac0152818161119b01528181611552015281816116c70152818161183601528181611a0f0152611d420152610240518181816111100152818161159e015281816116350152611b3b01526102605181818161081e015261265d015261028051818181610573015281816110dc0152818161150d0152818161160101528181611b0701526126fa01526102a051816126d701526102c05181611ef201526102e05181818161053701526126b20152614eb090f35b90506020813d602011620005fd575b81620005e760209383620009eb565b81010312620005f857513862000448565b600080fd5b3d9150620005d8565b6040513d6000823e3d90fd5b60405163483512b160e11b815260048101859052602490fd5b9150506040813d60401162000674575b816200064a60409383620009eb565b81010312620005f8576200066c6020620006648362000a24565b920162000a24565b9038620003ce565b3d91506200063b565b90506020813d602011620006b6575b816200069b60209383620009eb565b81010312620005f857620006af9062000a0f565b386200036f565b3d91506200068c565b90506020813d602011620006f8575b81620006dd60209383620009eb565b81010312620005f857620006f19062000a0f565b386200032f565b3d9150620006ce565b6020809293503d831162000738575b6200071c8185620009eb565b81010312620005f857620007309062000a0f565b3880620002ee565b503d62000710565b634e487b7160e01b600052604160045260246000fd5b015190503880620001cd565b6004600090815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f1984168510620007d5576001945083601f19811610620007bb575b505050811b01600455620001e3565b015160001960f88460031b161c19169055388080620007ac565b818101518355602094850194600190930192909101906200078f565b60046000529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c8101602085106200085b575b90849392915b601f830160051c820181106200084b575050620001b4565b6000815585945060010162000833565b50806200082d565b634e487b7160e01b600052602260045260246000fd5b91607f16916200019e565b90508301513862000164565b6003600090815292507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905b601f198316841062000901576001935082601f19811610620008e7575b5050811b0160035562000179565b85015160001960f88460031b161c191690553880620008d9565b85810151825560209384019360019092019101620008bc565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81016020841062000978575b601f830160051c820181106200096b5750506200014b565b6000815560010162000953565b508062000953565b90607f169062000137565b9091506020813d602011620009c6575b81620009aa60209383620009eb565b81010312620005f857620009be9062000a0f565b9038620000a9565b3d91506200099b565b604081019081106001600160401b038211176200074057604052565b601f909101601f19168101906001600160401b038211908210176200074057604052565b51906001600160a01b0382168203620005f857565b519061ffff82168203620005f857565b8051602091908281101562000ad3575090601f82511162000a72578082519201519080831062000a6357501790565b82600019910360031b1b161790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000ab9575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000a95565b6001600160401b03811162000740576005928354926001938481811c9116801562000bed575b838210146200086357601f811162000bb6575b5081601f841160011462000b4c575092829391839260009462000b40575b50501b916000199060031b1c191617905560ff90565b01519250388062000b2a565b919083601f1981168760005284600020946000905b8883831062000b9b575050501062000b81575b505050811b01905560ff90565b015160001960f88460031b161c1916905538808062000b74565b85870151885590960195948501948793509081019062000b61565b8560005284601f846000209201871c820191601f8601881c015b82811062000be057505062000b0c565b6000815501859062000bd0565b90607f169062000af9565b80516020908181101562000c865750601f82511162000c25578082519201519080831062000a6357501790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000c6c575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000c48565b906001600160401b0382116200074057600654926001938481811c9116801562000da5575b838210146200086357601f811162000d6b575b5081601f841160011462000cff575092829391839260009462000cf3575b50501b916000199060031b1c19161760065560ff90565b01519250388062000cdc565b919083601f198116600660005284600020946000905b8883831062000d50575050501062000d36575b505050811b0160065560ff90565b015160001960f88460031b161c1916905538808062000d28565b85870151885590960195948501948793509081019062000d15565b600660005284601f84600020920160051c820191601f860160051c015b82811062000d9857505062000cbe565b6000815501859062000d88565b90607f169062000cab56fe608080604052600436101561001357600080fd5b60e0600035811c91826306fdde031461227f575081630892cd8b14612245578163095ea7b314612214578163156e29f614611ac657816318160ddd14611a9d5781631dd19cb41461198357816323b872dd146118b1578163252c09d71461186257816329910b11146115c55781632c8ce6bc146115325781632f13b60c146114f4578163313ce567146114b65781633644e5151461149b57816337d45e3a1461134f5781635b709f171461109f5781635cbadbe41461103857816370a0823114610ff75781637206926414610fd9578163794052f314610f535781637ecebe0014610f1957816384b0196e14610e40578163883bdbfd14610c025781639262187b14610a1757816395d89b4114610934578163a9059cbb146108cd578163a9f8d181146108af578163c3fb90d61461084d578163c45a015514610808578163c4f59f9b146107a1578163d505accf146105e757508063dd62ed3e14610596578063e184c9be1461055b578063e4f8b2e914610514578063ea64a820146104be5763f6b911bc146101a257600080fd5b346103d8576101b036612396565b600292918354936101c6818660f81c1415612500565b6001600160f81b03948516600160f91b1781556101e2336125af565b94301561046f576101f230613e68565b306000526020926000845260406000205485811061041f5785903060005260008652036040600020558185116103d8578254828616838216038381116104095783169060ff60f81b161783556000604051868152600080516020614e5b833981519152863092a361026230613f11565b6001600160ff1b0385116103d85784156103f75783870195610285875187612e54565b9561029660408a0197885190613325565b976102ad6102a58b5184612e54565b895190613325565b978915806103ef575b6103dd576102c5838251613fea565b90526102d2888b51613fea565b8a526102df898251613fea565b9052600088126103d857600087126103d857877f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909161034560409b60018060a01b0380871696853089036103a5575b50508b81891698308a03610372575b505050612956565b8a51908152602081019190915260408101889052606090a3815416600160f81b1790558351928352820152f35b61039d927f000000000000000000000000000000000000000000000000000000000000000016612b00565b388b8161033d565b6103d191837f000000000000000000000000000000000000000000000000000000000000000016612b00565b388561032e565b600080fd5b604051631997ea8d60e31b8152600490fd5b5088156102b6565b6040516325daaec360e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260048101869052602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b346103d85760203660031901126103d8576001600160a01b036104df61236a565b166000908152600a60209081526040918290205482516001600160801b038216815260809190911c91810191909152f35b0390f35b346103d85760003660031901126103d857602060405169ffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103d85760003660031901126103d85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103d85760403660031901126103d8576105af61236a565b6105b7612380565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b346103d857806003193601126103d8576105ff61236a565b90610608612380565b604435916084359060643560ff831683036103d85780421161075c5760018060a01b0391828716938460005260076020526040600020918254926001840190556040519360208501937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98552876040870152868916606087015289608087015260a086015260c085015260c084528301918383106001600160401b03841117610746576106f0936106e8936040525190206106c1612e77565b906040519161190160f01b83526002830152602282015260c43591604260a4359220613a1b565b919091613aaa565b1603610701576106ff926127e0565b005b60405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606490fd5b346103d85760003660031901126103d8576107ba613165565b6040518091602080830160208452825180915260206040850193019160005b8281106107e857505050500390f35b83516001600160a01b0316855286955093810193928101926001016107d9565b346103d85760003660031901126103d8576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103d85760003660031901126103d85760c0600d54600e5461ffff906040519280600f0b845260801d600f0b60208401526001600160601b0381166040840152818160601c166060840152818160701c16608084015260801c1660a0820152f35b346103d85760003660031901126103d8576020600954604051908152f35b346103d85760403660031901126103d8576108e661236a565b61091b600254916108fd60028460f81c1415612500565b6001600160f81b03928316600160f91b176002556024359033612c37565b600160f81b906002541617600255602060405160018152f35b346103d85760003660031901126103d857604051600454600082610957836124c6565b91828252602093600190856001821691826000146109f757505060011461099a575b506109869250038361248e565b61051060405192828493845283019061232a565b84915060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b906000915b8583106109df575050610986935082010185610979565b805483890185015287945086939092019181016109c8565b60ff19168582015261098695151560051b85010192508791506109799050565b346103d8576020806003193601126103d857610a3161236a565b9060025490610a4660028360f81c1415612500565b6001600160f81b03918216600160f91b17600255610a6383613e68565b610a6c83613f11565b610a74613165565b92610a7f84516127ae565b6001600160a01b03949091908582169060005b8151811015610ba55787610aa682846139ac565b5116600052600890818752604060002084600052875260406000205491608092831c610ad283896139ac565b52610add82886139ac565b51610aee575b506001915001610a92565b89610af983866139ac565b5116600052875260406000208460005287526040600020916001600160801b0392838154169055610b2a82886139ac565b51908382116103d8578a610b3e84876139ac565b5116600052600a89528360406000209216908254901c0392831161040957600192610b7d91906001600160801b0382549181199060801b169116179055565b610b9f89610b8b83866139ac565b511686610b98848a6139ac565b5191613f77565b89610ae3565b848688857f78d61a0c27b13f43911095f9f356f14daa3cd8b125eea1aa22421245e90e813d60405184815280610bdd8682018861242c565b0390a2600160f81b90600254161760025561051060405192828493845283019061242c565b346103d8576020806003193601126103d8576001600160401b036004358181116103d857366023820112156103d8578060040135610c3f816124af565b91610c4d604051938461248e565b8183528483016024819360051b830101913683116103d857602401905b828210610e245750505063ffffffff91600e5461ffff90604051948593630eea10e760e11b855260c4850190600f6004870152824216602487015260c060448701525180915260e4850195916000905b8a838310610e07578a88600081808d8c8c6001600160601b0381166064850152818160601c16608485015260701c1660a48301520381732ff909a1fd086a055931fa6796588c214f13e2745af4918215610dfb57600092610d64575b5050906040519181839283018184528251809152816040850193019160005b828110610d4457505050500390f35b83516001600160d81b031685528695509381019392810192600101610d35565b9091503d806000843e610d77818461248e565b82019183818403126103d85780519182116103d857019080601f830112156103d8578151610da4816124af565b92610db2604051948561248e565b818452848085019260051b8201019283116103d8578401905b828210610ddc575050508280610d16565b81516001600160d81b03811681036103d8578152908401908401610dcb565b6040513d6000823e3d90fd5b845182168952978801978997509093019260019190910190610cba565b813563ffffffff811681036103d8578152908601908601610c6a565b346103d85760003660031901126103d857610e7a7f0000000000000000000000000000000000000000000000000000000000000000612fa1565b90610ea47f00000000000000000000000000000000000000000000000000000000000000006130a5565b604051602081018181106001600160401b038211176107465761051092610ef89160405260008352610eea604051968796600f60f81b885280602089015287019061232a565b90858203604087015261232a565b90466060850152306080850152600060a085015283820360c085015261242c565b346103d85760203660031901126103d8576001600160a01b03610f3a61236a565b1660005260076020526020604060002054604051908152f35b346103d85760203660031901126103d85761012090610f78610f7361236a565b6125af565b6040519181518352602082015160208401526040820151604084015260018060a01b0360608301511660608401526080820151608084015260a082015160a084015260c082015160c084015280820151908301526101008091015190820152f35b346103d85760003660031901126103d8576020600b54604051908152f35b346103d85760203660031901126103d857602061103061101561236a565b6001600160a01b031660009081526020819052604090205490565b604051908152f35b346103d85760403660031901126103d85761105161236a565b611059612380565b6001600160a01b0391821660009081526008602090815260408083209390941682529182528290205482516001600160801b038216815260809190911c91810191909152f35b346103d8576110ad366123cb565b92600292919254906110c560028360f81c1415612500565b6001600160f81b03918216600160f91b17600255427f0000000000000000000000000000000000000000000000000000000000000000111561133d5761110a336125af565b926111347f00000000000000000000000000000000000000000000000000000000000000006128e2565b936001600160ff1b039081831190816103d85761115761116197854291846135b3565b9a91989098612e20565b9860008a126103d857600089126103d85760008b126103d8576001600160a01b038781169790929087308a0361130a575b50506111c88c847f0000000000000000000000000000000000000000000000000000000000000000169460608701511685612b00565b6111d184612956565b806112a5575b505060206111e482612ac5565b920191825190600082126103d857106112745750506103d85785116103d8577f829000a5bc6a12d46e30cdcecd7c56b1efd88f6d7d059da6734a04f3764557c48460409761125761123489612e20565b8a5195865260208601526040850192909252606084015233929081906080820190565b0390a3600160f81b90600254161760025582519182526020820152f35b61127d90612ac5565b905190600082126103d8576044916040519163f62951c760e01b835260048301526024820152fd5b6000945090858b116103d8576112ba8b612e20565b90333b156103d8576000916112e46040519485938493637d241f3960e11b85528c60048601612559565b038183335af18015610dfb576112fb575b806111d7565b61130490612460565b8a6112f5565b61133691857f000000000000000000000000000000000000000000000000000000000000000016612b00565b8c87611192565b60405163b2094b5960e01b8152600490fd5b346103d8576020806003193601126103d8576004359061ffff918281168091036103d8576002549261138760028560f81c1415612500565b6001600160f81b03938416600160f91b17600255600e54604051632c3e6e0360e11b8152600f600482015260809190911c821660248201819052604482019390935291908383606481732ff909a1fd086a055931fa6796588c214f13e2745af4928315610dfb57600093611464575b508216808203611411575b600280548616600160f81b179055005b7fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a93604093600e549061ffff60801b9060801b169061ffff60801b191617600e558351928352820152a181808080611401565b9092508381813d8311611494575b61147c818361248e565b810103126103d85761148d9061258c565b91856113f6565b503d611472565b346103d85760003660031901126103d8576020611030612e77565b346103d85760003660031901126103d857602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103d85760003660031901126103d8576020604051427f000000000000000000000000000000000000000000000000000000000000000011158152f35b346103d85760003660031901126103d857606060405160018060a01b03807f0000000000000000000000000000000000000000000000000000000000000000168252807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b346103d8576115d3366123cb565b909192600254906115ea60028360f81c1415612500565b6001600160f81b03918216600160f91b17600255427f0000000000000000000000000000000000000000000000000000000000000000111561133d5761162f336125af565b946116597f00000000000000000000000000000000000000000000000000000000000000006128e2565b6001600160ff1b03919082821190816103d85761168290429061167b85612e20565b908b6135b3565b999198909760008a126103d857600089126103d85760008b126103d8576001600160a01b03878116979092908b308a0361182f575b50506116ec8c84606087015116857f000000000000000000000000000000000000000000000000000000000000000016612b00565b6116f584612956565b816117c9575b50507f00000000000000000000000000000000000000000000000000000000000000001661172881612ac5565b825190600082126103d857106117985750506103d85761174790612e20565b9085116103d8576040805191825260208201869052818101859052606082019690965233907f829000a5bc6a12d46e30cdcecd7c56b1efd88f6d7d059da6734a04f3764557c4908060808101611257565b6117a190612ac5565b905190600082126103d85760449160405191632c49ea0f60e01b835260048301526024820152fd5b60009450906117d786612e20565b90878c116103d857333b156103d8576000916118098d926040519586948594637d241f3960e11b865260048601612559565b038183335af18015610dfb57611820575b806116fb565b61182990612460565b8a61181a565b61185b91857f000000000000000000000000000000000000000000000000000000000000000016612b00565b8c8b6116b7565b346103d85760203660031901126103d85760043561ffff8110156103d857606090600f01546040519063ffffffff8116825260018060d81b038160201c16602083015260f81c15156040820152f35b346103d8576118bf36612396565b600292919254926118d660028560f81c1415612500565b6001600160f81b03938416600160f91b176002556001600160a01b03831660009081526001602081815260408084203385529091529091205493908401611922575b61091b9350612c37565b82841061193e576119398361091b950333836127e0565b611918565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b346103d85760003660031901126103d8576002546119a760028260f81c1415612500565b6001600160f81b03908116600160f91b176002556119c4336125af565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166119f881612ac5565b8351600081126103d857611a0b9161254c565b91807f00000000000000000000000000000000000000000000000000000000000000001691611a3983612ac5565b6020860151600081126103d857611a4f9161254c565b9380611a85575b505082611a6d57600280548616600160f81b179055005b6060611a7c9401511690612b00565b81808080611401565b611a96918360608801511690612b00565b8580611a56565b346103d85760003660031901126103d8576002546040516001600160f81b039091168152602090f35b346103d85760603660031901126103d857611adf61236a565b600254611af260028260f81c1415612500565b6001600160f81b0316600160f91b17600255427f0000000000000000000000000000000000000000000000000000000000000000111561133d57611b35336125af565b90611b5f7f00000000000000000000000000000000000000000000000000000000000000006128e2565b6001600160ff1b03602435116103d8576001600160ff1b03604435116103d857600060243515801561220a575b6103f7574260a0850151111561133d57604084015180612183575050611bb6604435602435612e54565b600081126103d857600060038211156121755750808060011c60018101811161040957600101905b82821061215b5750505b6001600160ff1b0381116103d8576103e719810190811360011661040957916103e89360243594604435935b60008613156103dd57611c2b876020850151613392565b6020840152611c3b858451613392565b8352611c54611c4a8388613392565b6040850151613392565b6040840152600082126103d857600086126103d857600087126103d857600085126103d85781611ec3575b50506001600160a01b03821615611e7e57611c9982613e68565b6001600160f81b0384116103d8576002546001600160f81b038082168682160111610409576001600160f81b031981166001600160f81b0391821686831601909116176002556001600160a01b03821660009081526020819052604090208054611d04908690612949565b90556040518481526001600160a01b03831690600090600080516020614e5b83398151915290602090a3611d3782613f11565b611d4081612956565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d7381612ac5565b602083015190600082126103d85710611e4a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dba81612ac5565b825190600082126103d85710611798575050604080518481526020810186905290810183905261051092916001600160a01b0316907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb90606090a2600280546001600160f81b0316600160f81b179055604080519384526020840194909452928201929092529081906060820190565b611e55602091612ac5565b91015190600082126103d8576044916040519163f62951c760e01b835260048301526024820152fd5b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b4260a0840151111561133d57611ee1611f24916020850151906133ae565b611eef4260a086015161254c565b907f000000000000000000000000000000000000000000000000000000000000000090611f1c838761340d565b90865161346e565b610100830152611f32613d0d565b6001600160f81b0381116103d8576002546001600160f81b03808216818416019291908311610409576020600092600080516020614e5b83398151915292600195868060f81b03169060ff60f81b161760025584845283825260408420611f9a828254612949565b9055604051908152a3306001141580611fb4575b80611c7f565b611fbd906147a1565b6001600052600060205260406000205460405163389a2ce960e21b815260016004820152604081602481600060018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610dfb57600091600091612114575b50826028810204602814831517156104095760646028840204916001600160801b0381166120be575b5050908082106000146120b757505b6120828161207d600b546001600052600c6020526040600020549061254c565b612949565b600b556001600052600c6020527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c5585611fae565b905061205d565b6002546120eb926001600160801b03928316926120e6929116906001600160f81b03166133fa565b613464565b9081603c810204603c1482151715610409576064603c61210d93020490612949565b878061204e565b9150506040813d604011612153575b816121306040938361248e565b810103126103d85761214d602061214683614e46565b9201614e46565b88612025565b3d9150612123565b90915061216c8261207d8184613464565b60011c90611bde565b9015611be857506001611be8565b61219761219f916044969593949635612e54565b845190613325565b926121b06040820151602435612e54565b926121c16020830194855190613325565b808612156121ec57506121e66121db866044359651612e54565b604084015190613325565b95611c14565b959350935084936122046121db602435978451612e54565b93611c14565b5060443515611b8c565b346103d85760403660031901126103d85761223a61223061236a565b60243590336127e0565b602060405160018152f35b346103d85760203660031901126103d8576001600160a01b0361226661236a565b16600052600c6020526020604060002054604051908152f35b346103d85760003660031901126103d85760035460008261229f836124c6565b91828252602093600190856001821691826000146109f75750506001146122cd57506109869250038361248e565b84915060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906000915b858310612312575050610986935082010185610979565b805483890185015287945086939092019181016122fb565b919082519283825260005b848110612356575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201612335565b600435906001600160a01b03821682036103d857565b602435906001600160a01b03821682036103d857565b60609060031901126103d8576001600160a01b039060043582811681036103d8579160243590811681036103d8579060443590565b9060606003198301126103d8576004356001600160a01b03811681036103d85791602435916044356001600160401b03928382116103d857806023830112156103d85781600401359384116103d857602484830101116103d8576024019190565b90815180825260208080930193019160005b82811061244c575050505090565b83518552938101939281019260010161243e565b6001600160401b03811161074657604052565b604081019081106001600160401b0382111761074657604052565b90601f801991011681019081106001600160401b0382111761074657604052565b6001600160401b0381116107465760051b60200190565b90600182811c921680156124f6575b60208310146124e057565b634e487b7160e01b600052602260045260246000fd5b91607f16916124d5565b1561250757565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9190820391821161040957565b928492608095928552602085015260606040850152816060850152848401376000828201840152601f01601f1916010190565b519061ffff821682036103d857565b51906001600160a01b03821682036103d857565b90604080519261012084018481106001600160401b0382111761074657825260608401600090818152608086019180835260a087019381855260c088019282845260e089018381526101008a01978489528a600d5480600f0b825260801d600f0b602082015260018060f81b03600254169060018060ff1b038211612790578201528051635c098c1160e01b81523060048201526001600160a01b03948516602482015293916060856044817f000000000000000000000000000000000000000000000000000000000000000087165afa80156127a457869287968892612730575b505060ff16905216905269ffffffffffffffffffff915080821661272b57507f00000000000000000000000000000000000000000000000000000000000000005b1690527f000000000000000000000000000000000000000000000000000000000000000090527f000000000000000000000000000000000000000000000000000000000000000090526001600160601b03600e54169052565b6126d2565b93509550506060823d60601161279c575b8161274e6060938361248e565b810103126127985761275f8261259b565b9460208301519269ffffffffffffffffffff841684036127945701519460ff8616860361279057919460ff38612691565b8680fd5b8780fd5b8580fd5b3d9150612741565b82513d88823e3d90fd5b906127b8826124af565b6127c5604051918261248e565b82815280926127d6601f19916124af565b0190602036910137565b6001600160a01b0390811691821561289157169182156128415760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b604051630754bb7160e21b815290602090829060049082906000906001600160a01b03165af1908115610dfb5760009161291a575090565b90506020813d602011612941575b816129356020938361248e565b810103126103d8575190565b3d9150612928565b9190820180921161040957565b610100810180516001600160601b03928382116103d857612984602061297c8351613585565b920151613585565b90600e549161ffff9560409687519463095ee96d60e31b8652600f6004870152818160601c16602487015263ffffffff421660448701528281166064870152818160701c16608487015260801c1660a4850152868460c481732ff909a1fd086a055931fa6796588c214f13e2745af4928315612aba57600094600094612a76575b506001600160801b0319809360801b16906001600160801b031617600d55600e549261ffff60701b9060701b1694169116179061ffff60601b9060601b161717600e555190519081527f5c0e21d57bb4cf91d8fe238d6f92e2685a695371b19209afcce6217b478f83e160204292a2565b945092508684813d8111612ab3575b612a8f818361248e565b810103126103d857612aac6020612aa58661258c565b950161258c565b9238612a05565b503d612a85565b87513d6000823e3d90fd5b6040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115610dfb5760009161291a575090565b90604051602081019363a9059cbb60e01b855260018060a01b03809316602483015260448201526044815260808101918183106001600160401b0384111761074657612b9993836040521690612b5583612473565b602083527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460a0820152600080958192519082855af1612b93613f38565b91614a80565b908151918215928315612c09575b50505015612bb157565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b819293509060209181010312612c335760200151908115158203612c305750388080612ba7565b80fd5b5080fd5b9091906001600160a01b03808216908115612dcd578416928315612d7c57838214612d3757612c668584613eaf565b600090828252816020526040822054818110612ce3576020826040858795600080516020614e5b83398151915295878c9952828652038282205586815220612caf828254612949565b9055604051908152a33003612cd4575b503003612cc95750565b612cd2906148f0565b565b612cdd906148f0565b38612cbf565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b908160000391808305600019149015171561040957565b90670de0b6b3a76400009182810292818405149015171561040957565b818102929160008212600160ff1b82141661040957818405149015171561040957565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480612f78575b15612ed2577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c081018181106001600160401b038211176107465760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612ea9565b60ff8114612fdf5760ff811690601f8211612fcd5760405191612fc383612473565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b50604051600554816000612ff2836124c6565b808352926020906001908181169081156130815750600114613020575b505061301d9250038261248e565b90565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410613069575061301d945050508101602001388061300f565b8554878501830152948501948694509281019261304e565b9150506020925061301d94915060ff191682840152151560051b820101388061300f565b60ff81146130c75760ff811690601f8211612fcd5760405191612fc383612473565b506040516006548160006130da836124c6565b80835292602090600190818116908115613081575060011461310457505061301d9250038261248e565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b82841061314d575061301d945050508101602001388061300f565b85548785018301529485019486945092810192613132565b60405163c4f59f9b60e01b81526000906001600160a01b0382826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561331a57839261327c575b507f0000000000000000000000000000000000000000000000000000000000000000916131e283826139d6565b61327557805190600190600183019586841161326157613201876124af565b9661320f604051988961248e565b80885261321e601f19916124af565b013660208901375b8381106132415750505061323a90846139ac565b9116905290565b808561324e8593856139ac565b511661325a828a6139ac565b5201613226565b634e487b7160e01b81526011600452602490fd5b9250505090565b9091503d8084833e61328e818361248e565b8101906020908181840312613316578051906001600160401b03821161279857019180601f840112156133165782516132c6816124af565b936132d4604051958661248e565b818552838086019260051b820101928311612790578301905b8282106132ff575050505090386131b5565b83809161330b8461259b565b8152019101906132ed565b8480fd5b6040513d85823e3d90fd5b811561334057600160ff1b8114600019831416610409570590565b634e487b7160e01b600052601260045260246000fd5b90670de0b6b3a76400006000838203931281841281169184139015161761040957565b8181039291600013801582851316918412161761040957565b9190916000838201938412911290801582169115161761040957565b6133d7670de0b6b3a764000091600084126000146133ef576133d260001994613bc4565b6133fa565b046001600160ff1b0381116103d85761301d91612e54565b6133d2600194613bc4565b8181029291811591840414171561040957565b60800151906301e1338091828102928184051490151715610409576001600160ff1b0381116103d85761343f91613325565b90600082131561344b57565b604051630e520c3b60e11b815260048101839052602490fd5b8115613340570490565b94939291906000958681126135555761349361348d6134989383613392565b91612e37565b613bfb565b670d529ae9e860000080821361353757506134c792916134936134bd6134c293613ffb565b612e37565b613392565b670de0b6b3a7640000811261351f576134df90613c05565b83811261351b576301e13380908181029181830414901517156135075761301d929350613464565b634e487b7160e01b84526011600452602484fd5b8380fd5b6024906040519063329e322960e21b82526004820152fd5b6044925060405191637e34684f60e11b835260048301526024820152fd5b60405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b6044820152606490fd5b8060016001607f1b03191315806135a2575b156103d857600f0b90565b5060016001607f1b03811315613597565b93909360a0810194848651111561133d5781518481131561398e5750604091825194608086018681106001600160401b0382111761074657845260009586815260208101938785528582019088825260608301948986528a8c51111561397d5761361e8b8d5161254c565b95613629878361340d565b8552602082019661363b8851856133ae565b808a5283519081158015613975575b61395857505082516101008401998a5192808251938a51956136726301e133809485926133fa565b6001600160ff1b03979190048781116139515761368e90614b5c565b91670de0b6b3a764000096878412613937576136ce926134936134bd6136c38561349361348d6136c8976136da9c9b99613392565b613ffb565b90613379565b8a5260c08801516133fa565b0483811161393357906136ed8a92614b5c565b8552613712865191519161349361348d8c519461370c8d519785613fea565b93613392565b670d529ae9e8600000808213613916575061373792916134936134bd6134c293613ffb565b8181126138ff578d90613755613750826134938d612e37565b612e20565b9451918a13156138da578161349361376c92612e37565b8281126138c357506137876137818392613356565b85612e54565b059c5b60e0850151838111612c33578e60646137a66137ad9383612e54565b0595613379565b9181831280156138ab57156138a0576137c860001993613bc4565b81810291818304149015171561388c57866137e291612949565b600019810190811161388c57866137f891613464565b928311612c3057506138159161380d91612e54565b9b5b8461436a565b90613820908461436a565b9a8b919c819e51906138319161254c565b9683519061383e91613fea565b835287519161384c91613392565b61385591613fea565b8096525194613863916133ae565b91519051916138719461346e565b8091521561387c5750565b51635534d70f60e11b8152600490fd5b634e487b7160e01b82526011600452602482fd5b6137c8600193613bc4565b50505061381591506138bd908561436a565b9b61380f565b6024908d519063329e322960e21b82526004820152fd5b50613750816138f46138ee6138f994613356565b87612e54565b613325565b9c61378a565b6024908c519063329e322960e21b82526004820152fd5b604492508e5191637e34684f60e11b835260048301526024820152fd5b8e80fd5b5050506024908f519063329e322960e21b82526004820152fd5b5050508f80fd5b604492508b519163b1c4aefb60e01b835260048301526024820152fd5b50801561364a565b875163b2094b5960e01b8152600490fd5b6044908560405191632185509b60e21b835260048301526024820152fd5b80518210156139c05760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9081519160005b8381106139ed5750505050600090565b6001600160a01b0380613a0083856139ac565b511690841614613a12576001016139dd565b50505050600190565b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311613a9e5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa15613a915781516001600160a01b03811615613a8b579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b6005811015613bae5780613abb5750565b60018103613b085760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606490fd5b60028103613b555760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606490fd5b600314613b5e57565b60405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608490fd5b634e487b7160e01b600052602160045260246000fd5b600080821315613bd2575090565b600160ff1b8214613261570390565b8015613340576ec097ce7bc90715b34b9f10000000000590565b8115613340570590565b6000811315613cd85780670c7d713b49da00001280613cc7575b15613cbe57670de0b6b3a7640000906ec097ce7bc90715b34b9f100000000090613c62908302828101906ec097ce7bc90715b34b9f0fffffffff19018302613bfb565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b0590565b61301d90614034565b50670f43fc2c04ee00008112613c1f565b60405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b6044820152606490fd5b613d156143f7565b815115613e6457600190308214159081613d30575b50505050565b613d3d83959493926147a1565b6000828152602090600c8252604091828220549582985b613d65575b50505050839450613d2a565b8051891015613e5f576001600160a01b03613d808a836139ac565b511698613d8d81876139ac565b519980855260089081855286862089875285526001600160801b038088882054168015613e58575b8d8114613e485781613dfb8f92613ddf8f613dd9670de0b6b3a7640000938761254c565b906133fa565b04858b52868a528d8c8c20908c528a528b8b205460801c612949565b9111612794578181116127945792613e3f92828c9d9e9f93958d97968c5195613e2387612473565b16855216888401528852865287872084885286528787206143c5565b01989796613d54565b5050505086979899508690613e3f565b5089613db5565b613d59565b5050565b613e706143f7565b90805115613eaa576001600160a01b0383168015159081613e9f575b50613e9657505050565b612cd2926147be565b905030141538613e8c565b505050565b613eb76143f7565b91815115613d2a576001600160a01b039083838284168015159081613f06575b50613ef5575b50505083168015159081613e9f5750613e9657505050565b613efe926147be565b388383613edd565b905030141538613ed7565b6001600160a01b0381168015159081613f2d575b50612cc95750565b905030141538613f25565b3d15613f72573d906001600160401b0382116107465760405191613f66601f8201601f19166020018461248e565b82523d6000602084013e565b606090565b9190918115613eaa576001600160a01b03169182613fe1576000809350809281925af1613fa2613f38565b5015613faa57565b60405162461bcd60e51b815260206004820152600f60248201526e195d1a081cd95b990819985a5b1959608a1b6044820152606490fd5b612cd292612b00565b908082126135555761301d91613379565b670de0b6b3a764000081146140225761401d8161349361348d61301d94613356565b613c05565b60405163a9c8b14d60e01b8152600490fd5b670de0b6b3a764000081126143535760649060007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215614328575b73011798004d755d3c8bc8e03204cf44619e000000821215614307575b820290808302906e01855144814a7ff805980ff008400090818312156142e4575b50506b02df0ab5a80a22c61ab5a700808212156142c4575b50693f1fce3da636ea5cf850808212156142a4575b50690127fa27722cc06cc5e280821215614284575b5068280e60114edb805d0380821215614264575b50680ebc5fb417461211108082121561424d575b506808f00f760a4b2db55d8082121561422d575b506806f5f17757889379378082121561420d575b506806248f33704b286603808212156141ee575b506805c548670b9510e7ac808212156141cf575b5061418e68056bc75e2d6310000091828082019168056bc75e2d630fffff190102613bfb565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b010590565b68056bc75e2d631000006756bc75e2d631000092020591019038614168565b68056bc75e2d6310000067ad78ebc5ac62000092020591019038614154565b68056bc75e2d6310000068015af1d78b58c4000092020591019038614140565b68056bc75e2d631000006802b5e3af16b18800009202059101903861412c565b68056bc75e2d631000008092020591019038614118565b68056bc75e2d63100000680ad78ebc5ac620000092020591019038614104565b68056bc75e2d631000006815af1d78b58c400000920205910190386140f0565b68056bc75e2d63100000682b5e3af16b18800000920205910190386140db565b68056bc75e2d631000006856bc75e2d631000000920205910190386140c6565b68ad78ebc5ac62000000925069021e19e0c9bab2400000020591019038806140ae565b906b1425982cf597cd205cef73806803782dace9d90000009105910161408d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000614070565b61435f61436491613be1565b614034565b60000390565b60008212156143ba5761437f60001992613bc4565b90670de0b6b3a764000091828102928184041490151715610409576143a391613464565b6001600160ff1b0381116103d85761301d91612e54565b61437f600192613bc4565b815160209092015160801b6fffffffffffffffffffffffffffffffff19166001600160801b0392909216919091179055565b6143ff613165565b9061440a82516127ae565b918051926000931561479b57600954431461474c5743600955600b54604051633bd73ee360e21b81523060048083019190915295919291908181602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156146b8576146c3575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15612c33578180916004604051809481936358f3d16360e01b83525af180156146b8576146a9575b5090815b84518110156146a0576001600160a01b036144f382876139ac565b511690818452600a918260205260408520906040519161451283612473565b546001600160801b038116808452608082901c6020909401939093526001600160a01b03614540858b6139ac565b51168061462d5750614557475b8260801c9061254c565b6001600160801b03821615614624575b886145db575b6001600160801b0384116103d8576145879160801c612949565b6001600160801b0381116103d8576001946145ca926001600160801b03604051936145b185612473565b81871685521660208401528852602052604087206143c5565b6145d482856139ac565b52016144d8565b92670de0b6b3a764000080850290858204148515171561460f57906146038a61460993613464565b90612949565b9261456d565b60118d634e487b7160e01b6000525260246000fd5b60019350614567565b60208c6024604051809481936370a0823160e01b835230908301525afa8015614695578890614661575b614557915061454d565b506020813d60201161468d575b8161467b6020938361248e565b810103126103d8576145579051614657565b3d915061466e565b6040513d8a823e3d90fd5b50939294505050565b6146b290612460565b386144d4565b6040513d84823e3d90fd5b3d8083833e6146d2818361248e565b8101602091828183031261351b578051906001600160401b038211613316570181601f8201121561351b57805190838061470b846124af565b614718604051918261248e565b848152019260051b820101928311613316578301905b82821061473d5750505061447f565b8151815290830190830161472e565b9092805b8451811015614796576001906001600160a01b0361476e82886139ac565b51168352600a6020526001600160801b0360408420541661478f82866139ac565b5201614750565b505090565b92509190565b156147a857565b634e487b7160e01b600052600160045260246000fd5b909291906001600160a01b03908116801515806148e6575b6147df906147a1565b600094818652602090600c82526040938488205491885b81518110156148da578261480a82846139ac565b5116908a614818828b6139ac565b5183825260088089528a83208a845289526001600160801b0394858c8520541680156148d2575b8381146148c457670de0b6b3a764000061486561485f614880938761254c565b8c6133fa565b04828652838c528d86208d87528c528d86205460801c612949565b93868411612c3057868511612c3057866148be956001988f51966148a388612473565b168652168b850152528852898d20898e528852898d206143c5565b016147f6565b5050505050600191506148be565b50600161483f565b50505050505050509050565b50308114156147d6565b6001600160a01b03818116916149129083151580614a76575b611015906147a1565b90604091825163389a2ce960e21b81528460048201528381602481600080977f0000000000000000000000000000000000000000000000000000000000000000165af1908115614a6c5783908492614a2b575b506001600160801b03809116906028840284810460281485151715614a17576064900492826149d2575b505050908082106000146149ca5750925b6149bc8461207d600b54848652600c602052868620549061254c565b600b558152600c6020522055565b9050926149a0565b6002546149ee93926120e69216906001600160f81b03166133fa565b603c810290808204603c149015171561350757906064614a0f920490612949565b38808061498f565b634e487b7160e01b86526011600452602486fd5b809250858092503d8311614a65575b614a44818361248e565b81010312614a6157614a5a602061214683614e46565b9038614965565b8280fd5b503d614a3a565b84513d85823e3d90fd5b5030841415614909565b91929015614ae25750815115614a94575090565b3b15614a9d5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015614af55750805190602001fd5b60405162461bcd60e51b815260206004820152908190614b1990602483019061232a565b0390fd5b15614b2457565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195e1c1bdb995b9d60821b6044820152606490fd5b680238fd42c5cf03ffff1981121580614e33575b614b7990614b1d565b60008112614e1e576064906806f05b59d3b20000008112614dd1576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215614dae575b6856bc75e2d631000000811215614d8a575b682b5e3af16b18800000811215614d68575b6815af1d78b58c400000811215614d46575b680ad78ebc5ac6200000811215614d25575b82811215614d04575b6802b5e3af16b1880000811215614ce3575b68015af1d78b58c40000811215614cc2575b60028382800205058360038184840205056004828583020505600583868302050560068487830205056007858883020505906008868984020505926009878a8602050594600a888b8802050596600b898c8a02050599600c8a8d8d0205059b0101010101010101010101010205020590565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590614c50565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590614c3e565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590614c2c565b68280e60114edb805d038391680ad78ebc5ac61fffff190192020590614c23565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590614c11565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590614bff565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590614bed565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901614bdb565b6803782dace9d90000008112614e0b576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef738092614bc6565b68056bc75e2d6310000082600192614bc6565b614e2a90600003614b5c565b61301d90613be1565b5068070c1cc73b00c80000811315614b70565b51906001600160801b03821682036103d85756feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220385eee72d78a9a48b16b43034becf97da5e6792d13a3cc687ce44c2354ac3d0464736f6c634300081600330000000000000000000000001cde6a099a1cb14f3093d2b7cb5b7cbb2145cb640000000000000000000000000000000000000000000000003be83b08d7bec0000000000000000000000000000000000000000000000000000fc1a87037cc1200000000000000000000000000000000000000000000000000000aa466489d62c000000000000000000000000049fe8c5ced2d50303b0899cef3d56f69d604f0880000000000000000000000003c0763930a3cfd3c7e9b9b33aeabdc1fa1a60d4c