[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "increaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "BuyShares", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "assetTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "name": "DODOFlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "fromToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "toToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fromAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" } ], "name": "DODOSwap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" } ], "name": "RChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "decreaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "SellShares", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_ADMIN_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_PRICE_CUMULATIVE_LAST_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BLOCK_TIMESTAMP_LAST_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_IS_OPEN_TWAP_", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_I_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_K_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_LP_FEE_RATE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MAINTAINER_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_BASE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_QUOTE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_RATE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_RATE_MODEL_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_PRICE_LIMIT_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_RState_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "addressToShortString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" } ], "name": "adjustMtFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "adjustPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "priceLimit", "type": "uint256" } ], "name": "adjustPriceLimit", "outputs": [], "stateMutability": "nonpayable", "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": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "buildDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "baseInput", "type": "uint256" }, { "internalType": "uint256", "name": "quoteInput", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "correctRState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" }, { "internalType": "address", "name": "assetTo", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getBaseInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMidPrice", "outputs": [ { "internalType": "uint256", "name": "midPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMtFeeTotal", "outputs": [ { "internalType": "uint256", "name": "mtFeeBase", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeQuote", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMState", "outputs": [ { "components": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "R", "type": "uint8" } ], "internalType": "struct PMMPricing.PMMState", "name": "state", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMStateForCall", "outputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "uint256", "name": "R", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getQuoteInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserFeeRate", "outputs": [ { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVaultReserve", "outputs": [ { "internalType": "uint256", "name": "baseReserve", "type": "uint256" }, { "internalType": "uint256", "name": "quoteReserve", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "maintainer", "type": "address" }, { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "k", "type": "uint256" }, { "internalType": "bool", "name": "isOpenTWAP", "type": "bool" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payBaseAmount", "type": "uint256" } ], "name": "querySellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newBaseTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payQuoteAmount", "type": "uint256" } ], "name": "querySellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newQuoteTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "baseMinAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteMinAmount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "sellShares", "outputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "withdrawMtFeeTotal", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001805461ff00191690556103e8601455601780546001600160a01b031916905534801561003157600080fd5b5060016000556148b4806100466000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c8063880a4d87116101de578063d505accf1161010f578063ee27c689116100ad578063fcf709f71161007c578063fcf709f714610841578063fd1ed7e91461084c578063fe24cb7f14610889578063fff6cae91461089257600080fd5b8063ee27c68914610815578063f5346aea1461081d578063f6b06e7014610825578063f811d6921461083857600080fd5b8063e539ef49116100e9578063e539ef49146107de578063e6485c8e146107f1578063eb99da6a14610804578063ec2fd46d1461080c57600080fd5b8063d505accf1461077f578063dd62ed3e14610792578063dd93f59a146107cb57600080fd5b8063bbf5ce781161017c578063bfdbd72311610156578063bfdbd72314610747578063c0ffa17814610750578063d0a494e414610759578063d4b970461461076c57600080fd5b8063bbf5ce7814610703578063bd6015b41461071d578063bf357dae1461073057600080fd5b8063a9059cbb116101b8578063a9059cbb146106c1578063ab44a7a3146106d4578063b56ceaa6146106dd578063b59b8555146106f057600080fd5b8063880a4d871461067857806395d89b41146106a4578063a382d1b9146106ac57600080fd5b806347bbad2e116102c357806370a082311161026157806377f586571161023057806377f586571461060057806379a04876146106325780637d721504146106455780637ecebe001461065857600080fd5b806370a08231146105b457806371f9100c146105dd57806372bf079e146105e557806373d74cf8146105f857600080fd5b806354fd4d501161029d57806354fd4d501461055157806363ab59931461057657806365f6fcbb1461058957806366410a211461059157600080fd5b806347bbad2e146105075780634a248d2a146105105780634c85b4251461052357600080fd5b806330adf81f116103305780633644e5151161030a5780633644e515146104ab5780633afdfeba146104b45780634322ec83146104bd57806344096609146104ee57600080fd5b806330adf81f14610438578063313ce5671461045f57806336223ce91461047e57600080fd5b8063171019401161036c57806317101940146103e957806318160ddd146103fc57806323b872dd146104135780632df6cb481461042657600080fd5b806304b621bc1461039357806306fdde03146103a8578063095ea7b3146103c6575b600080fd5b6103a66103a1366004614013565b61089a565b005b6103b0610b2e565b6040516103bd91906140c7565b60405180910390f35b6103d96103d43660046140fa565b610bbc565b60405190151581526020016103bd565b6103b06103f7366004614124565b610bd3565b610405600b5481565b6040519081526020016103bd565b6103d961042136600461413f565b610d56565b6001546103d990610100900460ff1681565b6104057f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60095461046c9060ff1681565b60405160ff90911681526020016103bd565b6005546001600160701b0380821691600160701b9004165b604080519283526020830191909152016103bd565b610405600e5481565b61040560145481565b6001546104d6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016103bd565b6104966104fc366004614124565b506011546010549091565b61040560165481565b6003546104d6906001600160a01b031681565b610536610531366004614124565b610f06565b604080519384526020840192909252908201526060016103bd565b60408051808201909152600981526847535020312e302e3160b81b60208201526103b0565b6002546104d6906001600160a01b031681565b610405611370565b6105a461059f3660046140fa565b611408565b6040516103bd94939291906141b3565b6104056105c2366004614124565b6001600160a01b03166000908152600c602052604090205490565b610405611471565b6103a66105f33660046141dd565b6114bf565b6103a66115a4565b60075461061a90600160701b90046001600160701b031681565b6040516001600160701b0390911681526020016103bd565b6105a46106403660046140fa565b61165b565b60055461061a906001600160701b031681565b610405610666366004614124565b600f6020526000908152604090205481565b60055461068f90600160e01b900463ffffffff1681565b60405163ffffffff90911681526020016103bd565b6103b06116c4565b6106b46116d1565b6040516103bd91906141f6565b6103d96106cf3660046140fa565b611773565b61040560115481565b6104966106eb36600461428f565b61185f565b6103a66106fe3660046141dd565b611c39565b60055461061a90600160701b90046001600160701b031681565b61040561072b366004614124565b611cdc565b60075461068f90600160e01b900463ffffffff1681565b61040560155481565b61040560105481565b6103a6610767366004614309565b611f55565b6004546104d6906001600160a01b031681565b6103a661078d366004614380565b612515565b6104056107a03660046143ed565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b6104056107d9366004614124565b61272b565b60075461061a906001600160701b031681565b6103a66107ff3660046141dd565b612998565b6103a6612a36565b61040560125481565b610405612ae6565b610405612af8565b6017546104d6906001600160a01b031681565b61040560135481565b601554601654610496565b610854612c00565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016103bd565b61040560065481565b6103a6612c62565b60015460ff16156108e45760405162461bcd60e51b815260206004820152600f60248201526e11d4d417d253925512505312569151608a1b60448201526064015b60405180910390fd5b6001805460ff1916811790556001600160a01b038087169088160361094b5760405162461bcd60e51b815260206004820152601a60248201527f424153455f51554f54455f43414e5f4e4f545f42455f53414d4500000000000060448201526064016108db565b600380546001600160a01b03808a166001600160a01b0319928316179092556004805492891692909116919091179055821580159061099957506ec097ce7bc90715b34b9f10000000008311155b6109a257600080fd5b6013839055670de0b6b3a76400008211156109bc57600080fd5b60128290556011859055601084905560018054600280546001600160a01b038c81166001600160a01b03199092169190911790915561ff0019908c16620100000216610100600160b01b0319909116178155604080518082018252918252605f60f81b6020808401919091528151808301909252600382526204753560ec1b908201528082610a4a30610bd3565b604051602001610a5c93929190614420565b604051602081830303815290604052600a9081610a799190614501565b506040805180820190915260038152620474c560ec1b6020820152600890610aa19082614501565b50886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0491906145c1565b6009805460ff191660ff92909216919091179055610b20612af8565b505050505050505050505050565b600a8054610b3b90614479565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790614479565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b505050505081565b6000610bc9338484612c7c565b5060015b92915050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160088082528184019093526060926001600160a01b038516929160009160208201818036833701905050905060005b6004811015610d4d5782600485610c4284600c6145f4565b60208110610c5257610c52614607565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610c7857610c78614607565b01602001516001600160f81b03191682610c9383600261461d565b81518110610ca357610ca3614607565b60200101906001600160f81b031916908160001a9053508284610cc783600c6145f4565b60208110610cd757610cd7614607565b825191901a600f16908110610cee57610cee614607565b01602001516001600160f81b03191682610d0983600261461d565b610d149060016145f4565b81518110610d2457610d24614607565b60200101906001600160f81b031916908160001a90535080610d458161463c565b915050610c2a565b50949350505050565b6001600160a01b0383166000908152600c6020526040812054821115610db35760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b6001600160a01b0384166000908152600d60209081526040808320338452909152902054821115610e1d5760405162461bcd60e51b815260206004820152601460248201527308298989eae829c868abe9c9ea8be8a9c9eaa8e960631b60448201526064016108db565b6001600160a01b0384166000908152600c6020526040902054610e41908390614655565b6001600160a01b038086166000908152600c60205260408082209390935590851681522054610e719083906145f4565b6001600160a01b038085166000908152600c60209081526040808320949094559187168152600d82528281203382529091522054610eb0908390614655565b6001600160a01b038581166000818152600d60209081526040808320338452825291829020949094555185815291861692909160008051602061481f833981519152910160405180910390a35060019392505050565b6000806000610f13612cdd565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f849190614668565b610f8e9190614655565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110049190614668565b61100e9190614655565b6005549091506001600160701b0380821691600160701b9004166110328285614655565b955061103e8184614655565b9450600086116110805760405162461bcd60e51b815260206004820152600d60248201526c1393d7d09054d157d253941555609a1b60448201526064016108db565b600b546000036111f957600083116110ce5760405162461bcd60e51b815260206004820152601160248201527016915493d7d45553d51157d05353d55395607a1b60448201526064016108db565b6110da84601354612d36565b83106110e657836110f2565b6110f283601354612d5c565b600780546001600160701b0319166001600160701b03831617905560135490975061111e908890612d36565b60078054600160701b600160e01b031916600160701b6001600160701b039384168102919091179182905590041661118f5760405162461bcd60e51b815260206004820152601460248201527351554f54455f5441524745545f49535f5a45524f60601b60448201526064016108db565b6107d187116111d95760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6111e660006103e9612d71565b6111f26103e988614655565b96506112f0565b6000821180156112095750600081115b156112f057600061121a8784612d5c565b905060006112288784612d5c565b90506000828210611239578261123b565b815b9050611249600b5482612d36565b600754909a50611262906001600160701b031682612d36565b60075461127891906001600160701b03166145f4565b600780546001600160701b0319166001600160701b0392831617908190556112a991600160701b9091041682612d36565b6007546112c69190600160701b90046001600160701b03166145f4565b6007600e6101000a8154816001600160701b0302191690836001600160701b031602179055505050505b6112fa8888612d71565b6113048484612e7b565b6001600160a01b0388166000818152600c60209081526040918290205482519384529083018a905282820152517f1c172440bdebb59cd92a7f08f4227903a3305ab6f880cb25f93eddb66843a1029181900360600190a1505050506113696001600055565b9193909250565b6015546005546003546040516370a0823160e01b8152306004820152600093926001600160701b0316916001600160a01b0316906370a08231906024015b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ef9190614668565b6113f99190614655565b6114039190614655565b905090565b60008060008060006114186116d1565b90506114248187612ee6565b6011546010549297509094509061143b8782612d36565b9550856114488884612d36565b6114529089614655565b61145c9190614655565b96508260a00151935050505092959194509250565b601654600554600480546040516370a0823160e01b8152309281019290925260009392600160701b90046001600160701b0316916001600160a01b03909116906370a08231906024016113ae565b6002546001600160a01b0316331461150f5760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b6000601354821161152d57816013546115289190614655565b61153a565b60135461153a9083614655565b905060145460135482620f4240611551919061461d565b61155b9190614697565b111561159e5760405162461bcd60e51b8152602060048201526012602482015271115610d1515117d4149250d157d31253525560721b60448201526064016108db565b50601355565b60075463ffffffff600160e01b9091041660021480156115d457506007546005546001600160701b039182169116105b156115f957600554600160701b8082046001600160701b039081169091029116176007555b60075463ffffffff600160e01b90910416600114801561163457506007546005546001600160701b03600160701b9283900481169290910416105b1561165957600554600160701b8082046001600160701b039081169091029116176007555b565b600080600080600061166b6116d1565b90506116778187612fdb565b6011546010549297509094509061168e8782612d36565b95508561169b8884612d36565b6116a59089614655565b6116af9190614655565b96508260800151935050505092959194509250565b60088054610b3b90614479565b6116d9613fa1565b601354815260125460208201526005546001600160701b038082166040840152600160701b918290048116606084015260075480821660808501529182041660a0830152600160e01b900463ffffffff16600281111561173b5761173b61417b565b8160c0019060028111156117515761175161417b565b908160028111156117645761176461417b565b905250611770816130d8565b90565b336000908152600c60205260408120548211156117c75760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b336000908152600c60205260409020546117e2908390614655565b336000908152600c6020526040808220929092556001600160a01b0385168152205461180f9083906145f4565b6001600160a01b0384166000818152600c602052604090819020929092559051339060008051602061481f8339815191529061184e9086815260200190565b60405180910390a350600192915050565b60008061186a612cdd565b428310156118a95760405162461bcd60e51b815260206004820152600c60248201526b1512535157d156141254915160a21b60448201526064016108db565b336000908152600c60205260409020548911156118f95760405162461bcd60e51b815260206004820152600e60248201526d08e98a0be9c9ea8be8a9c9eaa8e960931b60448201526064016108db565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a9190614668565b6119749190614655565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa1580156119c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ea9190614668565b6119f49190614655565b600b5490915080611a058d8561461d565b611a0f9190614697565b945080611a1c8d8461461d565b611a269190614697565b600754909450611a4a90611a44908e906001600160701b031661461d565b8261317c565b600754611a6091906001600160701b0316614655565b600780546001600160701b0319166001600160701b039283161790819055611a9691611a44918f91600160701b9091041661461d565b600754611ab39190600160701b90046001600160701b0316614655565b6007600e6101000a8154816001600160701b0302191690836001600160701b03160217905550898510158015611ae95750888410155b611b2b5760405162461bcd60e51b81526020600482015260136024820152720ae92a89088a482aebe9c9ea8be8a9c9eaa8e9606b1b60448201526064016108db565b611b35338d6131c5565b611b3f8b8661327d565b611b498b8561329e565b611b516132bb565b8615611bc0578a6001600160a01b0316632411d338338e88888d8d6040518763ffffffff1660e01b8152600401611b8d969594939291906146e2565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050505b336000818152600c60209081526040918290205482519384526001600160a01b038f16918401919091528282018f90526060830152517f55caccde83781f39bfc1296eff45655b6496729443a7d48958b18b3b685600a59181900360800190a1505050611c2d6001600055565b97509795505050505050565b6001546201000090046001600160a01b03163314611c895760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b670de0b6b3a7640000811115611cd75760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f4d545f4645455f5241544560681b60448201526064016108db565b601055565b6000611ce6612cdd565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190614668565b611d619190614655565b600554909150600090611d7d906001600160701b031683614655565b90506000806000611d8e328561165b565b9298509094509092509050611da3878761329e565b82601654611db191906145f4565b601655806002811115611dc657611dc661417b565b600754600160e01b900463ffffffff908116911614611e79576001600160701b03821115611e065760405162461bcd60e51b81526004016108db90614722565b600780546001600160701b0319166001600160701b038416179055806002811115611e3357611e3361417b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061483f83398151915281604051611e709190614744565b60405180910390a15b601654600480546040516370a0823160e01b81523092810192909252611f0092889290916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190614668565b611efb9190614655565b612e7b565b60035460045460405160008051602061485f83398151915292611f39926001600160a01b039182169291169088908b9033908e90614752565b60405180910390a15050505050611f506001600055565b919050565b611f5d612cdd565b611f67838661327d565b611f71838561329e565b8015611fde5760405163d5b9979760e01b81526001600160a01b0384169063d5b9979790611fab903390899089908890889060040161478c565b600060405180830381600087803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b505050505b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190614668565b6120599190614655565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa1580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf9190614668565b6120d99190614655565b6005549091506001600160701b0316821015806121085750600554600160701b90046001600160701b03168110155b6121245760405162461bcd60e51b81526004016108db906147ba565b6005546001600160701b03168210156122e85760055460009061215790600160701b90046001600160701b031683614655565b90506000806000806121693286611408565b60055493975091955093509150849061218c9089906001600160701b0316614655565b11156121aa5760405162461bcd60e51b81526004016108db906147ba565b826015546121b891906145f4565b6015558160028111156121cd576121cd61417b565b600754600160e01b900463ffffffff908116911614612289576001600160701b0381111561220d5760405162461bcd60e51b81526004016108db90614722565b60078054600160701b600160e01b031916600160701b6001600160701b038416021790558160028111156122435761224361417b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061483f833981519152826040516122809190614744565b60405180910390a15b60008051602061485f833981519152600460009054906101000a90046001600160a01b0316600360009054906101000a90046001600160a01b03168787338f6040516122da96959493929190614752565b60405180910390a150505050505b600554600160701b90046001600160701b03168110156124aa5760055460009061231b906001600160701b031684614655565b905060008060008061232d328661165b565b600554939750919550935091508490612357908890600160701b90046001600160701b0316614655565b11156123755760405162461bcd60e51b81526004016108db906147ba565b8260165461238391906145f4565b6016558160028111156123985761239861417b565b600754600160e01b900463ffffffff90811691161461244b576001600160701b038111156123d85760405162461bcd60e51b81526004016108db90614722565b600780546001600160701b0319166001600160701b0383161790558160028111156124055761240561417b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061483f833981519152826040516124429190614744565b60405180910390a15b60008051602061485f833981519152600360009054906101000a90046001600160a01b0316600460009054906101000a90046001600160a01b03168787338f60405161249c96959493929190614752565b60405180910390a150505050505b6124b26132bb565b604080513381526001600160a01b0387166020820152908101889052606081018790527f0b82e93068db15abd9fbb2682c65462ea8a0a10582dce93a5664818e296f54eb9060800160405180910390a1505061250e6001600055565b5050505050565b4284101561255c5760405162461bcd60e51b81526020600482015260146024820152731113d113d7d1d4d417d3140e881156141254915160621b60448201526064016108db565b600e546001600160a01b0388166000908152600f6020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876125af8361463c565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161262892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612693573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906126c95750886001600160a01b0316816001600160a01b0316145b6127155760405162461bcd60e51b815260206004820152601e60248201527f444f444f5f4753505f4c503a20494e56414c49445f5349474e4154555245000060448201526064016108db565b612720898989612c7c565b505050505050505050565b6000612735612cdd565b601654600480546040516370a0823160e01b81523092810192909252600092916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ab9190614668565b6127b59190614655565b6005549091506000906127d890600160701b90046001600160701b031683614655565b905060008060006127e93285611408565b92985090945090925090506127fe878761327d565b8260155461280c91906145f4565b6015558060028111156128215761282161417b565b600754600160e01b900463ffffffff9081169116146128dd576001600160701b038211156128615760405162461bcd60e51b81526004016108db90614722565b60078054600160701b600160e01b031916600160701b6001600160701b038516021790558060028111156128975761289761417b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061483f833981519152816040516128d49190614744565b60405180910390a15b6015546003546040516370a0823160e01b815230600482015261295f92916001600160a01b0316906370a0823190602401602060405180830381865afa15801561292b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294f9190614668565b6129599190614655565b86612e7b565b60045460035460405160008051602061485f83398151915292611f39926001600160a01b039182169291169088908b9033908e90614752565b6002546001600160a01b031633146129e85760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b620f4240811115612a315760405162461bcd60e51b81526020600482015260136024820152721253959053125117d4149250d157d312535255606a1b60448201526064016108db565b601455565b612a3e612cdd565b6001546201000090046001600160a01b03163314612a8e5760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b601680546015546000909255600154909190612ab9906201000090046001600160a01b03168361329e565b6000601555600154612ada906201000090046001600160a01b03168261327d565b50506116596001600055565b6000611403612af36116d1565b613463565b60408051808201825260018152605f60f81b6020808301919091528251808401909352600383526204753560ec1b90830152600091828183612b3930610bd3565b604051602001612b4b93929190614420565b60408051601f198184030181528282528051602091820120838301835260018452603160f81b9382019390935281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c09093019091528151910120600e819055949350505050565b600080600080600080600080612c146116d1565b905080600001519750806020015196508060400151955080606001519450806080015193508060a0015192508060c001516002811115612c5657612c5661417b565b91505090919293949596565b612c6a612cdd565b612c726132bb565b6116596001600055565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260005403612d2f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108db565b6002600055565b6000670de0b6b3a7640000612d4b838561461d565b612d559190614697565b9392505050565b600081612d4b84670de0b6b3a764000061461d565b6103e88111612dbb5760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6001600160a01b0382166000908152600c6020526040902054612ddf9082906145f4565b6001600160a01b0383166000908152600c6020526040902055600b54612e069082906145f4565b600b556040518181526001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a26040518181526001600160a01b0383169060009060008051602061481f833981519152906020015b60405180910390a35050565b6001600160701b038211801590612e9957506001600160701b038111155b612eb55760405162461bcd60e51b81526004016108db90614722565b600580546001600160701b03928316600160701b026001600160e01b03199091169290931691909117919091179055565b600080808460c001516002811115612f0057612f0061417b565b03612f1a57612f0f8484613562565b915060019050612fd4565b60018460c001516002811115612f3257612f3261417b565b03612f4157612f0f8484613589565b600084606001518560a00151612f579190614655565b9050600085608001518660400151612f6f9190614655565b905081851015612f9a57612f8386866135a6565b93506002925080841115612f95578093505b612fd1565b818503612fad5780935060009250612fd1565b612fc086612fbb8488614655565b613562565b612fca90826145f4565b9350600192505b50505b9250929050565b600080808460c001516002811115612ff557612ff561417b565b0361300f5761300484846135da565b915060029050612fd4565b60018460c0015160028111156130275761302761417b565b036130c3576000846040015185608001516130429190614655565b905060008560a00151866060015161305a9190614655565b9050818510156130855761306e86866135f9565b93506001925080841115613080578093505b6130bc565b81850361309857809350600092506130bc565b6130ab866130a68488614655565b6135da565b6130b590826145f4565b9350600292505b5050612fd4565b6130cd8484613624565b946002945092505050565b60028160c0015160028111156130f0576130f061417b565b036131255761311d8160600151826080015183604001516131119190614655565b83516020850151613643565b60a082015250565b60018160c00151600281111561313d5761313d61417b565b036131795761317381604001518260a00151836060015161315e9190614655565b83516131699061377b565b8460200151613643565b60808201525b50565b6000806131898385614697565b90506000613197848361461d565b6131a19086614655565b905080156131bd576131b48260016145f4565b92505050610bcd565b509050610bcd565b6001600160a01b0382166000908152600c60205260409020546131e9908290614655565b6001600160a01b0383166000908152600c6020526040902055600b54613210908290614655565b600b556040518181526001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a26040518181526000906001600160a01b0384169060008051602061481f83398151915290602001612e6f565b801561329a5760035461329a906001600160a01b03168383613796565b5050565b801561329a5760045461329a906001600160a01b03168383613796565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015613308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332c9190614668565b6133369190614655565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015613388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ac9190614668565b6133b69190614655565b90506001600160701b0382118015906133d657506001600160701b038111155b6133f25760405162461bcd60e51b81526004016108db90614722565b6005546001600160701b0316821461342057600580546001600160701b0319166001600160701b0384161790555b600554600160701b90046001600160701b0316811461329a57600580546001600160701b038316600160701b02600160701b600160e01b03199091161790555050565b600060028260c00151600281111561347d5761347d61417b565b036134f257606082015160a08301516000916134b19161349d908061461d565b6134a79190614697565b8460600151612d5c565b90506134c1836020015182612d36565b60208401516134d890670de0b6b3a7640000614655565b6134e291906145f4565b9050612d55836000015182612d5c565b604082015160808301516000916135219161350d908061461d565b6135179190614697565b8460400151612d5c565b9050613531836020015182612d36565b602084015161354890670de0b6b3a7640000614655565b61355291906145f4565b9050612d55836000015182612d36565b6000612d55836080015184608001518461357f876000015161377b565b87602001516137ed565b6000612d55836080015184604001518461357f876000015161377b565b6000612d558360a001518385606001516135c091906145f4565b606086015186516135d09061377b565b8760200151613aff565b6000612d558360a001518460a0015184866000015187602001516137ed565b6000612d55836080015183856040015161361391906145f4565b604086015186516020880151613aff565b6000612d558360a00151846060015184866000015187602001516137ed565b600081600003613668576136578385612d36565b61366190866145f4565b9050613773565b8460000361367857506000613773565b6000808461368785600461461d565b613691919061461d565b9050806000036136ab57670de0b6b3a7640000915061372f565b85816136b7828261461d565b6136c19190614697565b03613704576136fd6ec097ce7bc90715b34b9f1000000000886136e4898561461d565b6136ee9190614697565b6136f891906145f4565b613bfa565b915061372f565b61372c6ec097ce7bc90715b34b9f1000000000876137228a85614697565b6136ee919061461d565b91505b6000670de0b6b3a76400006137576137478286614655565b61375288600261461d565b612d5c565b61376191906145f4565b905061376d8882612d36565b93505050505b949350505050565b6000610bcd826ec097ce7bc90715b34b9f1000000000614697565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526137e8908490613ce2565b505050565b600080861161382f5760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b8360000361383f57506000613af6565b8160000361386f57846138528486612d36565b11613866576138618385612d36565b613868565b845b9050613af6565b670de0b6b3a7640000820361393b5760008061388b868661461d565b90508060000361389e576000915061390c565b86816138aa828261461d565b6138b49190614697565b036138de576138c3888061461d565b6138cd888361461d565b6138d79190614697565b915061390c565b8785816138eb8a8a61461d565b6138f59190614697565b6138ff919061461d565b6139099190614697565b91505b61391e670de0b6b3a7640000836145f4565b613928838961461d565b6139329190614697565b92505050613af6565b6000613947858561461d565b8787613953828761461d565b61395d9190614697565b613967919061461d565b61397191906145f4565b905060008661398885670de0b6b3a7640000614655565b613992919061461d565b905060008282106139b2576139a78383614655565b9150600090506139c3565b6139bc8284614655565b9150600190505b6139d5670de0b6b3a764000083614697565b91506000613a136139ee87670de0b6b3a7640000614655565b6139f990600461461d565b8b613a04898e612d36565b613a0e919061461d565b612d36565b9050613a23816136ee858061461d565b90506000613a3987670de0b6b3a7640000614655565b613a4490600261461d565b905060008315613aaf57613a588584614655565b905080600003613aaa5760405162461bcd60e51b815260206004820152601960248201527f444f444f4d6174683a2073686f756c64206e6f7420626520300000000000000060448201526064016108db565b613abc565b613ab983866145f4565b90505b6000613ac88284613db7565b90508b811115613ae2576000975050505050505050613af6565b613aec818d614655565b9750505050505050505b95945050505050565b6000808611613b415760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b6000613b4d8587614655565b613b57908561461d565b905082600003613b7b57613b73670de0b6b3a764000082614697565b915050613af6565b6000613b9b87613b8b8a8061461d565b613b959190614697565b87612d5c565b90506000613ba98583612d36565b90506ec097ce7bc90715b34b9f10000000008382613bcf88670de0b6b3a7640000614655565b613bd991906145f4565b613be3919061461d565b613bed9190614697565b9998505050505050505050565b600081600003613c0c57506000919050565b60006001613c1984613dd4565b901c6001901b90506001818481613c3257613c32614681565b048201901c90506001818481613c4a57613c4a614681565b048201901c90506001818481613c6257613c62614681565b048201901c90506001818481613c7a57613c7a614681565b048201901c90506001818481613c9257613c92614681565b048201901c90506001818481613caa57613caa614681565b048201901c90506001818481613cc257613cc2614681565b048201901c9050612d5581828581613cdc57613cdc614681565b04613e68565b6000613d37826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e7e9092919063ffffffff16565b9050805160001480613d58575080806020019051810190613d5891906147e5565b6137e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108db565b6000612d55613dce84670de0b6b3a764000061461d565b8361317c565b600080608083901c15613de957608092831c92015b604083901c15613dfb57604092831c92015b602083901c15613e0d57602092831c92015b601083901c15613e1f57601092831c92015b600883901c15613e3157600892831c92015b600483901c15613e4357600492831c92015b600283901c15613e5557600292831c92015b600183901c15610bcd5760010192915050565b6000818310613e775781612d55565b5090919050565b6060613773848460008585600080866001600160a01b03168587604051613ea59190614802565b60006040518083038185875af1925050503d8060008114613ee2576040519150601f19603f3d011682016040523d82523d6000602084013e613ee7565b606091505b5091509150613ef887838387613f03565b979650505050505050565b60608315613f72578251600003613f6b576001600160a01b0385163b613f6b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108db565b5081613773565b6137738383815115613f875781518083602001fd5b8060405162461bcd60e51b81526004016108db91906140c7565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006002811115613fe957613fe961417b565b905290565b80356001600160a01b0381168114611f5057600080fd5b801515811461317957600080fd5b60008060008060008060008060006101208a8c03121561403257600080fd5b61403b8a613fee565b985061404960208b01613fee565b975061405760408b01613fee565b965061406560608b01613fee565b955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a013561409281614005565b809150509295985092959850929598565b60005b838110156140be5781810151838201526020016140a6565b50506000910152565b60208152600082518060208401526140e68160408501602087016140a3565b601f01601f19169190910160400192915050565b6000806040838503121561410d57600080fd5b61411683613fee565b946020939093013593505050565b60006020828403121561413657600080fd5b612d5582613fee565b60008060006060848603121561415457600080fd5b61415d84613fee565b925061416b60208501613fee565b9150604084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b600381106141af57634e487b7160e01b600052602160045260246000fd5b9052565b84815260208101849052608081016141ce6040830185614191565b82606083015295945050505050565b6000602082840312156141ef57600080fd5b5035919050565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015161424660c0840182614191565b5092915050565b60008083601f84011261425f57600080fd5b50813567ffffffffffffffff81111561427757600080fd5b602083019150836020828501011115612fd457600080fd5b600080600080600080600060c0888a0312156142aa57600080fd5b873596506142ba60208901613fee565b95506040880135945060608801359350608088013567ffffffffffffffff8111156142e457600080fd5b6142f08a828b0161424d565b989b979a5095989497959660a090950135949350505050565b60008060008060006080868803121561432157600080fd5b853594506020860135935061433860408701613fee565b9250606086013567ffffffffffffffff81111561435457600080fd5b6143608882890161424d565b969995985093965092949392505050565b60ff8116811461317957600080fd5b600080600080600080600060e0888a03121561439b57600080fd5b6143a488613fee565b96506143b260208901613fee565b9550604088013594506060880135935060808801356143d081614371565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561440057600080fd5b61440983613fee565b915061441760208401613fee565b90509250929050565b600084516144328184602089016140a3565b8451908301906144468183602089016140a3565b84519101906144598183602088016140a3565b0195945050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061448d57607f821691505b6020821081036144ad57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156137e857600081815260208120601f850160051c810160208610156144da5750805b601f850160051c820191505b818110156144f9578281556001016144e6565b505050505050565b815167ffffffffffffffff81111561451b5761451b614463565b61452f816145298454614479565b846144b3565b602080601f831160018114614564576000841561454c5750858301515b600019600386901b1c1916600185901b1785556144f9565b600085815260208120601f198616915b8281101561459357888601518255948401946001909101908401614574565b50858210156145b15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156145d357600080fd5b8151612d5581614371565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bcd57610bcd6145de565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615614637576146376145de565b500290565b60006001820161464e5761464e6145de565b5060010190565b81810381811115610bcd57610bcd6145de565b60006020828403121561467a57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826146b457634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015284604082015283606082015260a06080820152600061471660a0830184866146b9565b98975050505050505050565b6020808252600890820152674f564552464c4f5760c01b604082015260600190565b60208101610bcd8284614191565b6001600160a01b0396871681529486166020860152604085019390935260608401919091528316608083015290911660a082015260c00190565b60018060a01b0386168152846020820152836040820152608060608201526000613ef86080830184866146b9565b60208082526011908201527011931054d217d313d05397d19052531151607a1b604082015260600190565b6000602082840312156147f757600080fd5b8151612d5581614005565b600082516148148184602087016140a3565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdf176ad18be4f9f32efaa32f06e9d1175476504739a745f1399a6d3fa4b75917c2c0245e056d5fb095f04cd6373bc770802ebd1e6c918eb78fdef843cdb37b0fa2646970667358221220f3687e01d102b5cdb36d7d8bacce721c475ea34f78cb33a0180d425c383b574c64736f6c63430008100033