0 txs
0 calls
constructor
constructor(uint256 chainId)
functions
allowedValidators
viewfunction allowedValidators(address, address) view returns (bool)
cancelled
viewfunction cancelled(bytes32) view returns (bool)
currentContextAddress
viewfunction currentContextAddress() view returns (address)
EIP1271_MAGIC_VALUE
viewfunction EIP1271_MAGIC_VALUE() view returns (bytes4)
EIP712_EXCHANGE_DOMAIN_HASH
viewfunction EIP712_EXCHANGE_DOMAIN_HASH() view returns (bytes32)
filled
viewfunction filled(bytes32) view returns (uint256)
getAssetProxy
viewfunction getAssetProxy(bytes4 assetProxyId) view returns (address)
getOrderInfo
viewfunction getOrderInfo(tuple order) view returns (tuple orderInfo)
isValidHashSignature
viewfunction isValidHashSignature(bytes32 hash, address signerAddress, bytes signature) view returns (bool isValid)
isValidOrderSignature
viewfunction isValidOrderSignature(tuple order, bytes signature) view returns (bool isValid)
isValidTransactionSignature
viewfunction isValidTransactionSignature(tuple transaction, bytes signature) view returns (bool isValid)
orderEpoch
viewfunction orderEpoch(address, address) view returns (uint256)
owner
viewfunction owner() view returns (address)
preSigned
viewfunction preSigned(bytes32, address) view returns (bool)
protocolFeeCollector
viewfunction protocolFeeCollector() view returns (address)
protocolFeeMultiplier
viewfunction protocolFeeMultiplier() view returns (uint256)
transactionsExecuted
viewfunction transactionsExecuted(bytes32) view returns (bool)
batchCancelOrders
payablefunction batchCancelOrders(tuple[] orders) payable
batchExecuteTransactions
payablefunction batchExecuteTransactions(tuple[] transactions, bytes[] signatures) payable returns (bytes[])
batchFillOrders
payablefunction batchFillOrders(tuple[] orders, uint256[] takerAssetFillAmounts, bytes[] signatures) payable returns (tuple[] fillResults)
batchFillOrdersNoThrow
payablefunction batchFillOrdersNoThrow(tuple[] orders, uint256[] takerAssetFillAmounts, bytes[] signatures) payable returns (tuple[] fillResults)
batchFillOrKillOrders
payablefunction batchFillOrKillOrders(tuple[] orders, uint256[] takerAssetFillAmounts, bytes[] signatures) payable returns (tuple[] fillResults)
batchMatchOrders
payablefunction batchMatchOrders(tuple[] leftOrders, tuple[] rightOrders, bytes[] leftSignatures, bytes[] rightSignatures) payable returns (tuple batchMatchedFillResults)
batchMatchOrdersWithMaximalFill
payablefunction batchMatchOrdersWithMaximalFill(tuple[] leftOrders, tuple[] rightOrders, bytes[] leftSignatures, bytes[] rightSignatures) payable returns (tuple batchMatchedFillResults)
cancelOrder
payablefunction cancelOrder(tuple order) payable
cancelOrdersUpTo
payablefunction cancelOrdersUpTo(uint256 targetOrderEpoch) payable
detachProtocolFeeCollector
nonpayablefunction detachProtocolFeeCollector()
executeTransaction
payablefunction executeTransaction(tuple transaction, bytes signature) payable returns (bytes)
fillOrder
payablefunction fillOrder(tuple order, uint256 takerAssetFillAmount, bytes signature) payable returns (tuple fillResults)
fillOrKillOrder
payablefunction fillOrKillOrder(tuple order, uint256 takerAssetFillAmount, bytes signature) payable returns (tuple fillResults)
marketBuyOrdersFillOrKill
payablefunction marketBuyOrdersFillOrKill(tuple[] orders, uint256 makerAssetFillAmount, bytes[] signatures) payable returns (tuple fillResults)
marketBuyOrdersNoThrow
payablefunction marketBuyOrdersNoThrow(tuple[] orders, uint256 makerAssetFillAmount, bytes[] signatures) payable returns (tuple fillResults)
marketSellOrdersFillOrKill
payablefunction marketSellOrdersFillOrKill(tuple[] orders, uint256 takerAssetFillAmount, bytes[] signatures) payable returns (tuple fillResults)
marketSellOrdersNoThrow
payablefunction marketSellOrdersNoThrow(tuple[] orders, uint256 takerAssetFillAmount, bytes[] signatures) payable returns (tuple fillResults)
matchOrders
payablefunction matchOrders(tuple leftOrder, tuple rightOrder, bytes leftSignature, bytes rightSignature) payable returns (tuple matchedFillResults)
matchOrdersWithMaximalFill
payablefunction matchOrdersWithMaximalFill(tuple leftOrder, tuple rightOrder, bytes leftSignature, bytes rightSignature) payable returns (tuple matchedFillResults)
preSign
payablefunction preSign(bytes32 hash) payable
registerAssetProxy
nonpayablefunction registerAssetProxy(address assetProxy)
setProtocolFeeCollectorAddress
nonpayablefunction setProtocolFeeCollectorAddress(address updatedProtocolFeeCollector)
setProtocolFeeMultiplier
nonpayablefunction setProtocolFeeMultiplier(uint256 updatedProtocolFeeMultiplier)
setSignatureValidatorApproval
payablefunction setSignatureValidatorApproval(address validatorAddress, bool approval) payable
simulateDispatchTransferFromCalls
nonpayablefunction simulateDispatchTransferFromCalls(bytes[] assetData, address[] fromAddresses, address[] toAddresses, uint256[] amounts)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AssetProxyRegistered
event AssetProxyRegistered(bytes4 id, address assetProxy)
Cancel
event Cancel(address indexed makerAddress, address indexed feeRecipientAddress, bytes makerAssetData, bytes takerAssetData, address senderAddress, bytes32 indexed orderHash)
CancelUpTo
event CancelUpTo(address indexed makerAddress, address indexed orderSenderAddress, uint256 orderEpoch)
Fill
event Fill(address indexed makerAddress, address indexed feeRecipientAddress, bytes makerAssetData, bytes takerAssetData, bytes makerFeeAssetData, bytes takerFeeAssetData, bytes32 indexed orderHash, address takerAddress, address senderAddress, uint256 makerAssetFilledAmount, uint256 takerAssetFilledAmount, uint256 makerFeePaid, uint256 takerFeePaid, uint256 protocolFeePaid)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProtocolFeeCollectorAddress
event ProtocolFeeCollectorAddress(address oldProtocolFeeCollector, address updatedProtocolFeeCollector)
ProtocolFeeMultiplier
event ProtocolFeeMultiplier(uint256 oldProtocolFeeMultiplier, uint256 updatedProtocolFeeMultiplier)
SignatureValidatorApproval
event SignatureValidatorApproval(address indexed signerAddress, address indexed validatorAddress, bool isApproved)
TransactionExecution
event TransactionExecution(bytes32 indexed transactionHash)
errors
No errors.
creation bytecode
0x60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005ddb38038062005ddb833981016040819052620000419162000141565b600080546001600160a01b03191633178155819080309050620000dc6040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e300000000000000000000000000000000000000000000000000000008152508584620000ea60201b62005bd71760201c565b600155506200015a92505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b60006020828403121562000153578081fd5b5051919050565b615c71806200016a6000396000f3fe6080604052600436106102dc5760003560e01c80638d45cd2311610184578063beee2e14116100d6578063dd885e2d1161008a578063eea086ba11610064578063eea086ba14610735578063f2fde38b1461074a578063fc74896d1461076a576102dc565b8063dd885e2d146106ed578063dedfc1f11461070f578063e14b58c414610722576102dc565b8063c26cfecd116100bb578063c26cfecd14610698578063c585bb93146106ad578063d9bfa73e146106cd576102dc565b8063beee2e1414610665578063c0fa16cc14610678576102dc565b80639b44d55611610138578063a6c3bf3311610112578063a6c3bf331461061f578063b04fbddd14610632578063b718e29214610652576102dc565b80639b44d556146105bf5780639d3fa4b9146105d2578063a12dcc6f146105ff576102dc565b80638ea8dfe4116101695780638ea8dfe41461056c5780639331c7421461058c5780639694a402146105ac576102dc565b80638d45cd23146105375780638da5cb5b14610557576102dc565b8063607041081161023d5780637b8e3514116101f1578063850a1501116101cb578063850a1501146104ef57806388ec79fb146105045780638bc8efb314610524576102dc565b80637b8e35141461048f5780638171c407146104af57806382c174d0146104cf576102dc565b80636fcf3e9e116102225780636fcf3e9e1461045657806377fcce681461046957806378d29ac11461047c576102dc565b806360704108146104095780636a1a80fd14610436576102dc565b80632ac1262211610294578063369da09911610279578063369da099146103c357806346c02d7a146103e35780634f9559b1146103f6576102dc565b80632ac12622146103905780632da62987146103b0576102dc565b80631ce4c78b116102c55780631ce4c78b1461032e5780632280c91014610350578063288cdc9114610370576102dc565b80630228e168146102e15780630efca18514610317575b600080fd5b3480156102ed57600080fd5b506103016102fc366004614e63565b61078a565b60405161030e91906154c3565b60405180910390f35b34801561032357600080fd5b5061032c61079f565b005b34801561033a57600080fd5b506103436107b3565b60405161030e91906154ce565b61036361035e366004615107565b6107b9565b60405161030e919061569f565b34801561037c57600080fd5b5061034361038b366004614e63565b6107fb565b34801561039c57600080fd5b506103016103ab366004614e63565b61080d565b61032c6103be366004614f81565b610822565b6103d66103d1366004614d5f565b610846565b60405161030e91906159c1565b61032c6103f1366004614e63565b61096d565b61032c610404366004614e63565b6109e0565b34801561041557600080fd5b50610429610424366004614eec565b610aed565b60405161030e919061535a565b610449610444366004614c3f565b610b3b565b60405161030e919061594a565b610449610464366004614c3f565b610b73565b61032c610477366004614b29565b610b91565b6103d661048a366004614d5f565b610c54565b34801561049b57600080fd5b506103016104aa366004614af5565b610da4565b3480156104bb57600080fd5b506103016104ca366004614e9f565b610dc4565b3480156104db57600080fd5b506103016104ea366004614e7b565b610e23565b3480156104fb57600080fd5b50610429610e43565b61051761051236600461500b565b610e5f565b60405161030e91906159cf565b6103d6610532366004614d5f565b610e7d565b34801561054357600080fd5b50610301610552366004615107565b610eb1565b34801561056357600080fd5b50610429610ed6565b61057f61057a366004614cdb565b610ef2565b60405161030e91906154b0565b34801561059857600080fd5b5061032c6105a7366004614e63565b61101d565b61057f6105ba366004614cdb565b611065565b6103d66105cd3660046150a7565b61112c565b3480156105de57600080fd5b506105f26105ed366004614f81565b611151565b60405161030e9190615a11565b34801561060b57600080fd5b5061030161061a366004614fb4565b611235565b6103d661062d366004614d5f565b61125a565b34801561063e57600080fd5b5061032c61064d366004614b64565b61128e565b61051761066036600461500b565b61133a565b61057f610673366004614cdb565b611358565b34801561068457600080fd5b5061032c610693366004614ada565b61140d565b3480156106a457600080fd5b5061034361141e565b3480156106b957600080fd5b5061032c6106c8366004614ada565b611424565b3480156106d957600080fd5b506103436106e8366004614af5565b6115b8565b3480156106f957600080fd5b506107026115d5565b60405161030e919061562a565b61032c61071d366004614c0c565b6115f9565b6103d66107303660046150a7565b61163b565b34801561074157600080fd5b50610429611656565b34801561075657600080fd5b5061032c610765366004614ada565b611672565b61077d610778366004614db2565b611715565b60405161030e9190615432565b60056020526000908152604090205460ff1681565b6107a7611848565b6107b1600061188f565b565b60035481565b60606107c361192a565b156107d9576107d2838361194c565b90506107f5565b6107e1611a66565b6107eb838361194c565b90506107f5611aa8565b92915050565b60096020526000908152604090205481565b600a6020526000908152604090205460ff1681565b61082a611ad8565b61083381611b47565b61083b611b84565b610843611b98565b50565b61084e614560565b61085661192a565b156108ec57835160005b8181146108e5576000610880846020015187611bc290919063ffffffff16565b905061088a614560565b6108bb88848151811061089957fe5b6020026020010151838886815181106108ae57fe5b6020026020010151611be1565b90506108c78582611d22565b9450868560200151106108db5750506108e5565b5050600101610860565b5050610966565b6108f4611a66565b835160005b81811461095c576000610919846020015187611bc290919063ffffffff16565b9050610923614560565b61093288848151811061089957fe5b905061093e8582611d22565b94508685602001511061095257505061095c565b50506001016108f9565b5050610966611aa8565b9392505050565b610975611ad8565b600061097f611dbd565b600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff90941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555061083b611b84565b6109e8611ad8565b60006109f2611dbd565b9050600073ffffffffffffffffffffffffffffffffffffffff82163314610a195733610a1c565b60005b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b60209081526040808320938516835292905220549091506001840190808211610a7157610a71610a6c858584611def565b611e94565b73ffffffffffffffffffffffffffffffffffffffff8085166000818152600b602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610ad99086906154ce565b60405180910390a35050505061083b611b84565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b610b4361458f565b610b4b611ad8565b610b59858585856001611e9c565b9050610b63611b84565b610b6b611b98565b949350505050565b610b7b61458f565b610b83611ad8565b610b59858585856000611e9c565b610b99611ad8565b6000610ba3611dbd565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600860209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610c379086906154c3565b60405180910390a350610c48611b84565b610c50611b98565b5050565b610c5c614560565b610c6461192a565b15610d2257835160005b8181146108e5578251600090610c8b90879063ffffffff611bc216565b90506000610cc8888481518110610c9e57fe5b602002602001015160a00151898581518110610cb657fe5b60200260200101516080015184612209565b9050610cd2614560565b610cf6898581518110610ce157fe5b6020026020010151838987815181106108ae57fe5b9050610d028682611d22565b955087866000015110610d17575050506108e5565b505050600101610c6e565b610d2a611a66565b835160005b81811461095c578251600090610d4c90879063ffffffff611bc216565b90506000610d5f888481518110610c9e57fe5b9050610d69614560565b610d78898581518110610ce157fe5b9050610d848682611d22565b955087866000015110610d995750505061095c565b505050600101610d2f565b600860209081526000928352604080842090915290825290205460ff1681565b600080610dd285858561222b565b90506005816008811115610de257fe5b1480610df957506007816008811115610df757fe5b145b15610e0e57610e0e610a6c60058787876122aa565b610e1a81868686612352565b95945050505050565b600760209081526000928352604080842090915290825290205460ff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b610e676145b7565b610e6f611ad8565b610b598585858560006125c2565b610e85614560565b610e90848484610c54565b9050828160000151101561096657610966610a6c60008584600001516126af565b600080610ec9600154856126ce90919063ffffffff16565b9050610b6b8482856126e2565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6060610efc61192a565b15610f9f578351604080518281526020808402820101909152818015610f3c57816020015b610f29614560565b815260200190600190039081610f215790505b50915060005b8181146108e557610f80868281518110610f5857fe5b6020026020010151868381518110610f6c57fe5b60200260200101518684815181106108ae57fe5b838281518110610f8c57fe5b6020908102919091010152600101610f42565b610fa7611a66565b8351604080518281526020808402820101909152818015610fe257816020015b610fcf614560565b815260200190600190039081610fc75790505b50915060005b81811461095c57610ffe868281518110610f5857fe5b83828151811061100a57fe5b6020908102919091010152600101610fe8565b611025611848565b7f3a3e76d7a75e198aef1f53137e4f2a8a2ec74e2e9526db8404d08ccc9f1e621d60035482604051611058929190615542565b60405180910390a1600355565b606061106f611ad8565b83516040805182815260208084028201019091528180156110aa57816020015b611097614560565b81526020019060019003908161108f5790505b50915060005b81811461111a576110fb8682815181106110c657fe5b60200260200101518683815181106110da57fe5b60200260200101518684815181106110ee57fe5b6020026020010151612768565b83828151811061110757fe5b60209081029190910101526001016110b0565b5050611124611b84565b610966611b98565b611134614560565b61113c611ad8565b611147848484612768565b9050611124611b84565b6111596145eb565b6111628261280a565b6040830152602082015260808201516111825760015b60ff168152610b36565b60a0820151611192576002611178565b8160a001518160400151106111a8576005611178565b81610100015142106111bb576004611178565b6020808201516000908152600a909152604090205460ff16156111df576006611178565b610120820151825173ffffffffffffffffffffffffffffffffffffffff9081166000908152600b60209081526040808320606088015190941683529290522054111561122c576006611178565b60038152919050565b60008061124d6001548561283b90919063ffffffff16565b9050610b6b84828561284a565b611262614560565b61126d848484610846565b9050828160200151101561096657610966610a6c60018584602001516126af565b835160005b8181146112fe576112f68160001b8783815181106112ad57fe5b60200260200101518784815181106112c157fe5b60200260200101518785815181106112d557fe5b60200260200101518786815181106112e957fe5b602002602001015161289f565b600101611293565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190615913565b60405180910390fd5b6113426145b7565b61134a611ad8565b610b598585858560016125c2565b6060611362611ad8565b835160408051828152602080840282010190915281801561139d57816020015b61138a614560565b8152602001906001900390816113825790505b50915060005b81811461111a576113ee8682815181106113b957fe5b60200260200101518683815181106113cd57fe5b60200260200101518684815181106113e157fe5b6020026020010151612a63565b8382815181106113fa57fe5b60209081029190910101526001016113a3565b611415611848565b6108438161188f565b60015481565b61142c611848565b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114ac9190810190614f08565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561150a5761150a610a6c8383612a96565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906115ab9084908690615657565b60405180910390a1505050565b600b60209081526000928352604080842090915290825290205481565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b611601611ad8565b805160005b8181146116315761162983828151811061161c57fe5b6020026020010151611b47565b600101611606565b505061083b611b84565b611643614560565b61164b611ad8565b611147848484612a63565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b61167a611848565b73ffffffffffffffffffffffffffffffffffffffff81166116a5576116a0610a6c612b38565b610843565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b606061171f61192a565b156117c157825160408051828152602080840282010190915260609082801561175c57816020015b60608152602001906001900390816117475790505b50905060005b8281146117b85761179986828151811061177857fe5b602002602001015186838151811061178c57fe5b602002602001015161194c565b8282815181106117a557fe5b6020908102919091010152600101611762565b509150506107f5565b6117c9611a66565b825160408051828152602080840282010190915260609082801561180157816020015b60608152602001906001900390816117ec5790505b50905060005b82811461183c5761181d86828151811061177857fe5b82828151811061182957fe5b6020908102919091010152600101611807565b509150506107f5611aa8565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107b1576000546107b190610a6c90339073ffffffffffffffffffffffffffffffffffffffff16612b6f565b6004546040517fe1a5430ebec577336427f40f15822f1f36c5e3509ff209d6db9e6c9e6941cb0b916118db9173ffffffffffffffffffffffffffffffffffffffff90911690849061537b565b60405180910390a1600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000547501000000000000000000000000000000000000000000900460ff1690565b60606000611965600154856126ce90919063ffffffff16565b9050611972848483612b8c565b60608401516119818180612c60565b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556080870151905160609130916119cf919061530d565b600060405180830381855af49150503d8060008114611a0a576040519150601f19603f3d011682016040523d82523d6000602084013e611a0f565b606091505b509150915081611a2657611a26610a6c8583612cc3565b611a31836000612c60565b60405184907fa4a7329f1dd821363067e07d359e347b4af9b1efe4b6cccf13240228af3c800d90600090a29695505050505050565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556107b1612ce0565b60005474010000000000000000000000000000000000000000900460ff1615611b0657611b06610a6c612d15565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611b4f6145eb565b611b5882611151565b9050611b648282612d4c565b805160ff16600314611b765750610843565b610c50828260200151612dfb565b611b8c61192a565b6107b1576107b1612ce0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600082821115611bdb57611bdb610a6c60028585612ea4565b50900390565b611be9614560565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611c2390879087908790602401615a57565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060603073ffffffffffffffffffffffffffffffffffffffff1683604051611cab919061530d565b600060405180830381855af49150503d8060008114611ce6576040519150601f19603f3d011682016040523d82523d6000602084013e611ceb565b606091505b50915091508115611d1857805160a014611d0157fe5b80806020019051611d159190810190614f24565b93505b5050509392505050565b611d2a614560565b81518351611d3d9163ffffffff612ec316565b815260208083015190840151611d589163ffffffff612ec316565b602082015260408083015190840151611d769163ffffffff612ec316565b604082015260608083015190840151611d949163ffffffff612ec316565b606082015260808083015190840151611db29163ffffffff612ec316565b608082015292915050565b60065460009073ffffffffffffffffffffffffffffffffffffffff16818115611de65781611de8565b335b9250505090565b6060634ad3127560e01b848484604051602401611e0e939291906153a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b611ea461458f565b8551611eb757611eb7610a6c6000612edf565b8451611eca57611eca610a6c6001612edf565b8351865114611ee057611ee0610a6c6002612edf565b8251855114611ef657611ef6610a6c6003612edf565b8551604051908082528060200260200182016040528015611f3157816020015b611f1e614560565b815260200190600190039081611f165790505b5081528451604080518281526020808402820101909152908015611f6f57816020015b611f5c614560565b815260200190600190039081611f545790505b506020820152600080611f8061460b565b88600081518110611f8d57fe5b60200260200101519050611f9f61460b565b88600081518110611fac57fe5b602002602001015190506000611fc18361280a565b9150506000611fcf8361280a565b915050611fda614560565b611fe2614560565b611fea6145b7565b61201d87878f8c81518110611ffb57fe5b60200260200101518f8c8151811061200f57fe5b60200260200101518f6125c2565b80516020015190915061203790869063ffffffff612ec316565b945061205481602001516020015185612ec390919063ffffffff16565b9350612064838260000151611d22565b9250612074828260200151611d22565b915061209181604001518b60400151612ec390919063ffffffff16565b60408b0152606080820151908b01516120af9163ffffffff612ec316565b60608b015260a0870151851061215a578951805160018b019a85929181106120d357fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525092508e5189141561213757818a60200151898151811061212657fe5b6020026020010181905250506121f8565b8e898151811061214357fe5b602002602001015196506121568761280a565b9550505b8560a0015184106121f257818a6020015189806001019a508151811061217c57fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525091508d518814156121cf57828a600001518a8151811061212657fe5b8d88815181106121db57fe5b602002602001015195506121ee8661280a565b9450505b50611fe2565b505050505050505095945050505050565b6000610b6b8361221f868563ffffffff612f7e16565b9063ffffffff612faf16565b6000612238848484612fd9565b905073ffffffffffffffffffffffffffffffffffffffff831661226557612265610a6c60068686866122aa565b6008818181111561227257fe5b60ff161061228a5761228a610a6c60038686866122aa565b600081600881111561229857fe5b141561096657610966610a6c60048686865b6060637e5a231860e01b858585856040516024016122cb94939291906158b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050949350505050565b6000600185600881111561236257fe5b141561238957815160011461238157612381610a6c60028686866122aa565b506000610b6b565b600285600881111561239757fe5b14156124905781516042146123b6576123b6610a6c60028686866122aa565b6000826000815181106123c557fe5b016020015160f81c905060006123e284600163ffffffff61301816565b905060006123f785602163ffffffff61301816565b905060006001888585856040516000815260200160405260405161241e949392919061560c565b6020604051602081039080840390855afa158015612440573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8981169116149550610b6b945050505050565b600385600881111561249e57fe5b141561254b5781516042146124bd576124bd610a6c60028686866122aa565b6000826000815181106124cc57fe5b016020015160f81c905060006124e984600163ffffffff61301816565b905060006124fe85602163ffffffff61301816565b905060006001886040516020016125159190615329565b604051602081830303815290604052805190602001208585856040516000815260200160405260405161241e949392919061560c565b600485600881111561255957fe5b14156125715761256a848484613042565b9050610b6b565b600685600881111561257f57fe5b1461258657fe5b50600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16949350505050565b6125ca6145b7565b6101608087015161014080880191909152870151908601526125ea6145eb565b6125f387611151565b90506125fd6145eb565b61260687611151565b90506000612612611dbd565b90506126208984838a613238565b61262c88838389613238565b612640898985602001518560200151613356565b6126598989856040015185604001516003543a8b61339b565b935061267489828560200151866040015188600001516134f0565b61268d88828460200151856040015188602001516134f0565b6126a3836020015183602001518b8b85896135ce565b50505095945050505050565b60606318e4b14160e01b848484604051602401611e0e9392919061589d565b6000610966826126dd85613775565b6137fd565b6060830151600090816126f685838661222b565b9050600581600881111561270657fe5b1415612728576127216127198787613837565b86848761386f565b925061275f565b600781600881111561273657fe5b1415612750576127216127498787613837565b8386613923565b61275c81868487612352565b92505b50509392505050565b612770614560565b6127786145eb565b61278185611151565b9050600061278d611dbd565b905061279b86838387613238565b60006127b883604001518860a00151611bc290919063ffffffff16565b905060006127c68783613932565b90506127d688826003543a613948565b94506000846020015190506127f289858388604001518a6134f0565b6127fe818a86896139bf565b50505050509392505050565b6000806128226001548461283b90919063ffffffff16565b6000818152600960205260409020549092509050915091565b6000610966826126dd85613a56565b82516000908161285b85838661222b565b9050600581600881111561286b57fe5b141561287e576127216127198787613b2d565b600781600881111561288c57fe5b1415612750576127216127498787613b2d565b8015612a5c5760208451816128b057fe5b066004146128c7576128c7610a6c60008787613b65565b60006128d9858263ffffffff613b8416565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff168061293857612938610a6c60018989613b65565b6040516060907fa85e59e400000000000000000000000000000000000000000000000000000000906129749089908990899089906024016156b2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608373ffffffffffffffffffffffffffffffffffffffff16836040516129fc919061530d565b6000604051808303816000865af19150503d8060008114612a39576040519150601f19603f3d011682016040523d82523d6000602084013e612a3e565b606091505b509150915081612a5657612a56610a6c8b8b84613bd0565b50505050505b5050505050565b612a6b614560565b612a76848484612768565b90508281602001511461096657610966610a6c60028584602001516126af565b60606311c7b72060e01b8383604051602401612ab3929190615657565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401612ab392919061537b565b82602001514210612ba557612ba5610a6c600183613bef565b60408301513a8114612bbf57612bbf610a6c833a84613c0c565b60065473ffffffffffffffffffffffffffffffffffffffff168015612beb57612beb610a6c8483613c2b565b60008381526005602052604090205460ff1615612c1057612c10610a6c600085613bef565b606085015173ffffffffffffffffffffffffffffffffffffffff81163314801590612c435750612c418685876126e2565b155b15612c5857612c58610a6c60018684896122aa565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff82163314610c50576006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b60606320d11f6160e01b8383604051602401612ab3929190615550565b3031801561084357604051339082156108fc029083906000818181858888f19350505050158015610c50573d6000803e3d6000fd5b60408051808201909152600481527f0c3b823f00000000000000000000000000000000000000000000000000000000602082015290565b606082015173ffffffffffffffffffffffffffffffffffffffff1615612da057606082015173ffffffffffffffffffffffffffffffffffffffff163314612da057612da0610a6c6002836020015133613c48565b6000612daa611dbd565b90508073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614612df657612df6610a6c6000846020015184613c48565b505050565b6000818152600a60205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927f02c310a9a43963ff31a754a4099cc435ed498049687539d72d7818d9b093415c92612e9892909190339061571a565b60405180910390a45050565b606063e946c1bb60e01b848484604051602401611e0e93929190615845565b60008282018381101561096657610966610a6c60008686612ea4565b606063d4092f4f60e01b82604051602401612efa9190615832565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b600082612f8d575060006107f5565b82820282848281612f9a57fe5b041461096657610966610a6c60018686612ea4565b600081612fc557612fc5610a6c60038585612ea4565b6000828481612fd057fe5b04949350505050565b6000815160001415612ff557612ff5610a6c60028686866122aa565b8160018351038151811061300557fe5b016020015160f81c6008811115610b6b57fe5b6000816020018351101561303957613039610a6c6005855185602001613c67565b50016020015190565b8051600090613079837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff613c8616565b6040516060907f1626ba7e00000000000000000000000000000000000000000000000000000000906130b19088908790602401615550565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050613140848363ffffffff613c8616565b600060608673ffffffffffffffffffffffffffffffffffffffff1683604051613169919061530d565b600060405180830381855afa9150503d80600081146131a4576040519150601f19603f3d011682016040523d82523d6000602084013e6131a9565b606091505b50915091508180156131bc575080516020145b1561321e577fb0671381000000000000000000000000000000000000000000000000000000006131f382600063ffffffff613b8416565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610966565b61322d610a6c89898985613c8a565b505050509392505050565b825160ff1660031461326757613267610a6c8460200151856000015160ff16600681111561326257fe5b613cab565b606084015173ffffffffffffffffffffffffffffffffffffffff16156132bb57606084015173ffffffffffffffffffffffffffffffffffffffff1633146132bb576132bb610a6c6002856020015133613c48565b602084015173ffffffffffffffffffffffffffffffffffffffff1615613325578173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff161461332557613325610a6c6001856020015185613c48565b6133348484602001518361284a565b61335057613350610a6c600085602001518760000151856122aa565b50505050565b60a0808401519085015161336f9163ffffffff612f7e16565b608080850151908601516133889163ffffffff612f7e16565b101561335057613350610a6c8383613cc8565b6133a36145b7565b60a08801516000906133bb908863ffffffff611bc216565b905060006133d28a608001518b60a0015184613ce5565b905060006133ed888b60a00151611bc290919063ffffffff16565b905060006134048b608001518c60a0015184613ce5565b905085156134215761341a8c8c85878587613d19565b9450613432565b61342f8c8c85878587613deb565b94505b84515160808d015160c08e015161344a929190613ce5565b85516040015284516020015160a08d015160e08e015161346b929190613ce5565b85516060015260208501515160808c015160c08d015161348c929190613ce5565b856020015160400181815250506134b48560200151602001518c60a001518d60e00151613ce5565b60208601516060015260006134cf888a63ffffffff612f7e16565b86516080908101829052602088015101525050505050979650505050505050565b602081015161350690839063ffffffff612ec316565b600960008581526020019081526020016000208190555082856040015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff167f6869791f0a34781b29882982cc39e882768cf2c96995c2a110c577c53bc932d58861014001518961016001518a61018001518b6101a001518b338a600001518b602001518c604001518d606001518e608001516040516135bf9b9a99989796959493929190615766565b60405180910390a45050505050565b83518351604080870151908601516101408701518551602001516135f7918b918690889061289f565b6136118a896101400151868689602001516020015161289f565b61362b89886101800151858489602001516040015161289f565b6136458a896101800151868589600001516040015161289f565b61365b8a8961014001518689896040015161289f565b613671898861014001518589896060015161289f565b60006136898b8b88600001516080015188888c613e84565b9050806136a6578551600060809182018190526020880151909101525b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156136f657506101a080890151908a01516136f69163ffffffff613ee116565b156137345761372f8b8a6101a00151898661372a8b60200151606001518c6000015160600151612ec390919063ffffffff16565b61289f565b613768565b61374e8a896101a0015189858a602001516060015161289f565b6137688b8a6101a0015189868a600001516060015161289f565b5050505050505050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6040516060907fde047db40000000000000000000000000000000000000000000000000000000090612ab39085908590602401615a82565b8051600090601581101561388d5761388d610a6c60028787876122aa565b60006138c1847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb840163ffffffff613f0616565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526008602090815260408083209385168352929052205490915060ff1661390b5761390b610a6c8683613f46565b6139188188866015613f63565b979650505050505050565b6000610b6b8385846001613f63565b60008183106139415781610966565b5090919050565b613950614560565b6020810184905260a0850151608086015161396c918691613ce5565b815260a085015160c0860151613983918691613ce5565b604082015260a085015160e086015161399d918691613ce5565b60608201526139b2828463ffffffff612f7e16565b6080820152949350505050565b6139d984846101600151848660000151856020015161289f565b6139f384846101400151856000015185856000015161289f565b613a0d84846101a00151848660400151856060015161289f565b613a2b8484610180015185600001518660400151856040015161289f565b6000613a4185836080015186600001518661413a565b905080612a5c57600060808301525050505050565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613aa257fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6040516060907f3efe50c80000000000000000000000000000000000000000000000000000000090612ab39085908590602401615a35565b606063488219a660e01b848484604051602401611e0e9392919061580a565b60008160040183511015613ba557613ba5610a6c6003855185600401613c67565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6060634678472b60e01b848484604051602401611e0e93929190615569565b606063f598518460e01b8383604051602401612ab39291906158fc565b606063a26dac0960e01b848484604051602401611e0e939291906155f6565b606063dec4aedf60e01b8383604051602401612ab39291906154d7565b606063e53c76c860e01b848484604051602401611e0e93929190615866565b6060632800659560e01b848484604051602401611e0e939291906158aa565b9052565b6060631b8388f760e01b858585856040516024016122cb94939291906154fb565b606063fdb6ca8d60e01b8383604051602401612ab3929190615594565b606063b6555d6f60e01b8383604051602401612ab3929190615542565b6000613cf2848484614180565b15613d0557613d05610a6c8585856141e6565b610b6b8361221f868563ffffffff612f7e16565b613d216145b7565b81851184841184861115613d4157613d3a898686614205565b9250613d90565b86841115613d815782518790528251602001869052608088015160a0890151613d6b919089613ce5565b6020808501805192909252905101879052613d90565b613d8d87878787614242565b92505b8115613db6576020808401510151835151613db09163ffffffff611bc216565b60408401525b8015613dde5782516020908101519084015151613dd89163ffffffff611bc216565b60608401525b50505b9695505050505050565b613df36145b7565b82841115613e0d57613e06878484614205565b9050613e5b565b82841015613e4c5780518590528051602090810185905281015184905260a08601516080870151613e3f91908661426d565b6020808301510152613e5b565b613e5885858585614242565b90505b6020808201510151815151613e759163ffffffff611bc216565b60408201529695505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff168015613ed75730316000613eb88a84848b8b8a6142c1565b9050613eca89848385038b8a8a6142c1565b5060019350505050613de1565b6000915050613de1565b6000815183511480156109665750508051602091820120825192909101919091201490565b60008160140183511015613f2757613f27610a6c6004855185601401613c67565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b606063a15c0d0660e01b8383604051602401612ab392919061537b565b8151600090613f7a8484830363ffffffff613c8616565b6040516060907f20c13b0b0000000000000000000000000000000000000000000000000000000090613fb290889088906024016156f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050614041858363ffffffff613c8616565b600060608873ffffffffffffffffffffffffffffffffffffffff168360405161406a919061530d565b600060405180830381855afa9150503d80600081146140a5576040519150601f19603f3d011682016040523d82523d6000602084013e6140aa565b606091505b50915091508180156140bd575080516020145b1561411f577f20c13b0b000000000000000000000000000000000000000000000000000000006140f482600063ffffffff613b8416565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610b6b565b61412e610a6c8a8a8a856143f9565b50505050949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1680156141765761416b868230318888886142c1565b506001915050610b6b565b6000915050610b6b565b60008261419257614192610a6c61441a565b81158061419d575083155b156141aa57506000610966565b600083806141b457fe5b85840990506141c9858463ffffffff612f7e16565b6141db826103e863ffffffff612f7e16565b101595945050505050565b606063339f3de260e01b848484604051602401611e0e939291906155f6565b61420d6145b7565b60208082018051859052518101839052815101839052608084015160a0850151614238919085613ce5565b8151529392505050565b61424a6145b7565b805194909452835160209081019390935282840180519290925290519091015290565b600061427a848484614451565b1561428d5761428d610a6c8585856141e6565b610b6b8361221f6142a582600163ffffffff611bc216565b6142b5888763ffffffff612f7e16565b9063ffffffff612ec316565b60008385106142cd5750825b6040516060907fa3b4a3270000000000000000000000000000000000000000000000000000000090614307908690869089906024016153a2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608873ffffffffffffffffffffffffffffffffffffffff168484604051614390919061530d565b60006040518083038185875af1925050503d80600081146143cd576040519150601f19603f3d011682016040523d82523d6000602084013e6143d2565b606091505b5091509150816143ec576143ec610a6c8b898989866144b5565b5050509695505050505050565b6060635bd0428d60e01b858585856040516024016122cb94939291906153d3565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b60008261446357614463610a6c61441a565b81158061446e575083155b1561447b57506000610966565b6000838061448557fe5b85840990508361449b818363ffffffff611bc216565b816144a257fe5b0690506141c9858463ffffffff612f7e16565b60606387cb1e7560e01b86868686866040516024016144d89594939291906155b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905095945050505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060800160405280606081526020016060815260200160008152602001600081525090565b60405180608001604052806145ca614560565b81526020016145d7614560565b815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f557600080fd5b600082601f830112614706578081fd5b813561471961471482615b13565b615aec565b81815291506020808301908481018184028601820187101561473a57600080fd5b60005b848110156147615761474f88836146d2565b8452928201929082019060010161473d565b505050505092915050565b600082601f83011261477c578081fd5b813561478a61471482615b13565b8181529150602080830190840160005b838110156147c7576147b2876020843589010161488a565b8352602092830192919091019060010161479a565b5050505092915050565b600082601f8301126147e1578081fd5b81356147ef61471482615b13565b8181529150602080830190840160005b838110156147c7576148178760208435890101614911565b835260209283019291909101906001016147ff565b600082601f83011261483c578081fd5b813561484a61471482615b13565b81815291506020808301908481018184028601820187101561486b57600080fd5b60005b848110156147615781358452928201929082019060010161486e565b600082601f83011261489a578081fd5b813567ffffffffffffffff8111156148b0578182fd5b6148e160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615aec565b91508082528360208285010111156148f857600080fd5b8060208401602084013760009082016020015292915050565b60006101c0808385031215614924578182fd5b61492d81615aec565b91505061493a83836146d2565b815261494983602084016146d2565b602082015261495b83604084016146d2565b604082015261496d83606084016146d2565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156149cf57600080fd5b6149db8683870161488a565b838501526101609250828501359150808211156149f757600080fd5b614a038683870161488a565b83850152610180925082850135915080821115614a1f57600080fd5b614a2b8683870161488a565b838501526101a0925082850135915080821115614a4757600080fd5b50614a548582860161488a565b82840152505092915050565b600060a08284031215614a71578081fd5b614a7b60a0615aec565b90508135815260208201356020820152604082013560408201526060820135614aa381615b87565b6060820152608082013567ffffffffffffffff811115614ac257600080fd5b614ace8482850161488a565b60808301525092915050565b600060208284031215614aeb578081fd5b61096683836146d2565b60008060408385031215614b07578081fd5b614b1184846146d2565b9150614b2084602085016146d2565b90509250929050565b60008060408385031215614b3b578182fd5b614b4584846146d2565b915060208301358015158114614b59578182fd5b809150509250929050565b60008060008060808587031215614b79578182fd5b843567ffffffffffffffff80821115614b90578384fd5b614b9c8883890161476c565b95506020870135915080821115614bb1578384fd5b614bbd888389016146f6565b94506040870135915080821115614bd2578384fd5b614bde888389016146f6565b93506060870135915080821115614bf3578283fd5b50614c008782880161482c565b91505092959194509250565b600060208284031215614c1d578081fd5b813567ffffffffffffffff811115614c33578182fd5b610b6b848285016147d1565b60008060008060808587031215614c54578182fd5b843567ffffffffffffffff80821115614c6b578384fd5b614c77888389016147d1565b95506020870135915080821115614c8c578384fd5b614c98888389016147d1565b94506040870135915080821115614cad578384fd5b614cb98883890161476c565b93506060870135915080821115614cce578283fd5b50614c008782880161476c565b600080600060608486031215614cef578081fd5b833567ffffffffffffffff80821115614d06578283fd5b614d12878388016147d1565b94506020860135915080821115614d27578283fd5b614d338783880161482c565b93506040860135915080821115614d48578283fd5b50614d558682870161476c565b9150509250925092565b600080600060608486031215614d73578081fd5b833567ffffffffffffffff80821115614d8a578283fd5b614d96878388016147d1565b9450602086013593506040860135915080821115614d48578283fd5b60008060408385031215614dc4578182fd5b823567ffffffffffffffff80821115614ddb578384fd5b81850186601f820112614dec578485fd5b80359250614dfc61471484615b13565b83815260208082019190838101885b87811015614e3457614e228c848435890101614a60565b85529382019390820190600101614e0b565b50919750880135945050505080821115614e4c578283fd5b50614e598582860161476c565b9150509250929050565b600060208284031215614e74578081fd5b5035919050565b60008060408385031215614e8d578182fd5b823591506020830135614b5981615b87565b600080600060608486031215614eb3578081fd5b833592506020840135614ec581615b87565b9150604084013567ffffffffffffffff811115614ee0578182fd5b614d558682870161488a565b600060208284031215614efd578081fd5b813561096681615ba9565b600060208284031215614f19578081fd5b815161096681615ba9565b600060a0828403128015614f36578182fd5b8015614f40578182fd5b50614f4b60a0615aec565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215614f92578081fd5b813567ffffffffffffffff811115614fa8578182fd5b610b6b84828501614911565b60008060408385031215614fc6578182fd5b823567ffffffffffffffff80821115614fdd578384fd5b614fe986838701614911565b93506020850135915080821115614ffe578283fd5b50614e598582860161488a565b60008060008060808587031215615020578182fd5b843567ffffffffffffffff80821115615037578384fd5b61504388838901614911565b95506020870135915080821115615058578384fd5b61506488838901614911565b94506040870135915080821115615079578384fd5b6150858883890161488a565b9350606087013591508082111561509a578283fd5b50614c008782880161488a565b6000806000606084860312156150bb578081fd5b833567ffffffffffffffff808211156150d2578283fd5b6150de87838801614911565b94506020860135935060408601359150808211156150fa578283fd5b50614d558682870161488a565b60008060408385031215615119578182fd5b823567ffffffffffffffff80821115615130578384fd5b614fe986838701614a60565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b828110156151925761517c8683516151e6565b60a0959095019460209190910190600101615169565b5093949350505050565b600081518084526151b4816020860160208601615b33565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60006101c061522684845161513c565b6020830151615238602086018261513c565b50604083015161524b604086018261513c565b50606083015161525e606086018261513c565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526152b78387018261519c565b915050610160915081840151858203838701526152d4828261519c565b9250505061018080840151858303828701526152f0838261519c565b9150506101a091508184015185820383870152613de1828261519c565b6000825161531f818460208701615b33565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260806020830152615402608083018661519c565b8281036040840152615414818661519c565b8381036060850152615426818661519c565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156154a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261549185835161519c565b94509285019290850190600101615457565b5092979650505050505050565b6000602082526109666020830184615156565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600085825273ffffffffffffffffffffffffffffffffffffffff8516602083015260806040830152615530608083018561519c565b8281036060840152613918818561519c565b918252602082015260400190565b600083825260406020830152610b6b604083018461519c565b600084825260606020830152615582606083018561519c565b8281036040840152613de1818561519c565b828152604081016155a483615b7d565b8260208301529392505050565b600086825285602083015273ffffffffffffffffffffffffffffffffffffffff808616604084015280851660608401525060a0608083015261391860a083018461519c565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600060208252610966602083018461519c565b6000608082526156c5608083018761519c565b73ffffffffffffffffffffffffffffffffffffffff95861660208401529390941660408201526060015292915050565b600060408252615708604083018561519c565b8281036020840152610e1a818561519c565b60006060825261572d606083018661519c565b828103602084015261573f818661519c565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b600061016080835261577a8184018f61519c565b838103602085015261578c818f61519c565b91505082810360408401526157a1818d61519c565b83810360608501526157b3818d61519c565b73ffffffffffffffffffffffffffffffffffffffff9b8c16608086015299909a1660a0840152505060c081019590955260e08501939093526101008401919091526101208301526101409091015295945050505050565b600061581585615b5f565b84825283602083015260606040830152610e1a606083018461519c565b6020810161583f83615b69565b91905290565b6060810161585285615b69565b938152602081019290925260409091015290565b6060810161587385615b73565b938152602081019290925273ffffffffffffffffffffffffffffffffffffffff1660409091015290565b6060810161585285615b73565b606081016008851061585257fe5b60006158c386615b7d565b85825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613de1608083018461519c565b6040810161590984615b5f565b9281526020015290565b60208082526014908201527f5452414e53464552535f5355434345535346554c000000000000000000000000604082015260600190565b60006020825282516080602084015261596660a0840182615156565b602085015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526159a18183615156565b604086015160608601526060860151608086015280935050505092915050565b60a081016107f582846151e6565b6000610180820190506159e38284516151e6565b60208301516159f560a08401826151e6565b5060408301516101408301526060909201516101609091015290565b815160ff168152602080830151908201526040918201519181019190915260600190565b600060408252615a486040830185615216565b90508260208301529392505050565b600060608252615a6a6060830186615216565b8460208401528281036040840152613de1818561519c565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152615adc60e084018261519c565b9150508260208301529392505050565b60405181810167ffffffffffffffff81118282101715615b0b57600080fd5b604052919050565b600067ffffffffffffffff821115615b29578081fd5b5060209081020190565b60005b83811015615b4e578181015183820152602001615b36565b838111156133505750506000910152565b6002811061084357fe5b6004811061084357fe5b6003811061084357fe5b6007811061084357fe5b73ffffffffffffffffffffffffffffffffffffffff8116811461084357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461084357600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a723158204a18c0ccdefcba91568b2e92930a349a546dc5261877382dfaeeed16f03ab8b16c6578706572696d656e74616cf564736f6c634300050c00400000000000000000000000000000000000000000000000000000000000000001