0 txs
1 call
constructor
constructor(address owner, address currency_, address collateral_, address oracle_, address swapper_, address reader_)
functions
CALLBACK_ROLE
viewfunction CALLBACK_ROLE() view returns (bytes32)
collateral
viewfunction collateral() view returns (address)
currency
viewfunction currency() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
equity
viewfunction equity(bytes32 marketId, address account) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
markets
viewfunction markets(uint256) view returns (bytes32)
maxSlippage
viewfunction maxSlippage() view returns (uint256)
morpho
viewfunction morpho() view returns (address)
morphoReader
viewfunction morphoReader() view returns (address)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
oracle
viewfunction oracle() view returns (address)
priceCollateralInCurrency
viewfunction priceCollateralInCurrency(uint256 assets) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapper
viewfunction swapper() view returns (address)
addMarket
nonpayablefunction addMarket(bytes32 marketId)
borrow
nonpayablefunction borrow(bytes32 marketId, uint256 cash, address account, address receiver)
deleteMarket
nonpayablefunction deleteMarket(bytes32 marketId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
onMorphoFlashLoan
nonpayablefunction onMorphoFlashLoan(uint256 amount, bytes data)
onMorphoSupplyCollateral
nonpayablefunction onMorphoSupplyCollateral(uint256 assets, bytes data)
recover
nonpayablefunction recover(address token, address recipient, uint256 amount)
recoverETH
nonpayablefunction recoverETH(address recipient, uint256 amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
repay
nonpayablefunction repay(bytes32 marketId, uint256 cash, address account)
repayShares
nonpayablefunction repayShares(bytes32 marketId, uint256 shares, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setMaxSlippage
nonpayablefunction setMaxSlippage(uint256 maxSlippageBps)
setMaxSlippageForce
nonpayablefunction setMaxSlippageForce(uint256 maxSlippageBps)
setSwapper
nonpayablefunction setSwapper(address newSwapper)
shiftCollateral
nonpayablefunction shiftCollateral(bytes32 marketFrom, bytes32 marketTo, uint256 assets, address account)
shiftCurrency
nonpayablefunction shiftCurrency(bytes32 marketFrom, bytes32 marketTo, uint256 cash, address account)
shiftPosition
nonpayablefunction shiftPosition(bytes32 marketFrom, bytes32 marketTo, uint256 assets, uint256 cash, address account)
supplyCollateral
nonpayablefunction supplyCollateral(bytes32 marketId, uint256 assets, address account)
swapToCollateral
nonpayablefunction swapToCollateral(uint256 cash)
swapToCurrency
nonpayablefunction swapToCurrency(uint256 assets)
unwind
nonpayablefunction unwind(bytes32 marketId, uint256 assets, uint256 minCash)
unwind
nonpayablefunction unwind(bytes32 marketId, uint256 assets)
unwindAll
nonpayablefunction unwindAll(bytes32 marketId, uint256 minCash)
unwindAll
nonpayablefunction unwindAll(bytes32 marketId)
unwindAllFor
nonpayablefunction unwindAllFor(bytes32 marketId, address account, uint256 minCash)
unwindAllFor
nonpayablefunction unwindAllFor(bytes32 marketId, address account)
unwindFor
nonpayablefunction unwindFor(bytes32 marketId, uint256 assets, address account)
unwindFor
nonpayablefunction unwindFor(bytes32 marketId, uint256 assets, uint256 minCash, address account)
wind
nonpayablefunction wind(bytes32 marketId, uint256 cash, uint256 minAssets)
wind
nonpayablefunction wind(bytes32 marketId, uint256 cash)
windFor
nonpayablefunction windFor(bytes32 marketId, uint256 cash, address account)
windFor
nonpayablefunction windFor(bytes32 marketId, uint256 cash, uint256 minAssets, address account)
withdrawAllCollateral
nonpayablefunction withdrawAllCollateral(bytes32 marketId, address account, address receiver)
withdrawCollateral
nonpayablefunction withdrawCollateral(bytes32 marketId, uint256 assets, address account, address receiver)
events
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unwind
event Unwind(address indexed account, bytes32 indexed marketId, uint256 repaidAssets, uint256 collateralWithdrawn)
Wind
event Wind(address indexed account, bytes32 indexed marketId, uint256 borrowedAssets, uint256 collateralSupplied)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AccountNotDelegated
error AccountNotDelegated(address account)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EmptyPosition
error EmptyPosition(bytes32 marketId, address account)
FailedInnerCall
error FailedInnerCall()
InvalidAccount
error InvalidAccount(address account)
MarketAlreadyAdded
error MarketAlreadyAdded()
MarketUnknown
error MarketUnknown()
MinOutput
error MinOutput()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlippageBounds
error SlippageBounds()
SlippageCap
error SlippageCap()
creation bytecode
0x610140604052346200026857620000266200001962000469565b9493909392919262000681565b620000306200026e565b615dad62000a7a8239608051818181611608015281816126100152818161269d01528181612f6f0152818161309f0152818161317b0152818161349e0152818161352b01528181613ada01528181613f810152818161462801528181614760015281816148db01528181614a1401528181614bed01528181614ccb01528181614d2901528181614e2401528181614eff0152818161551c015281816155fa015261564e015260a0518181816114fa0152818161304501528181613444015281816139de015281816140de0152818161506c015281816151a2015281816154a2015281816154f60152615674015260c051818181610e6201528181613dbd01528181615b780152615c6a015260e05181818161158101528181612ccf01528181612d0101528181612f940152818161306a015281816134690152818161389901528181613f50015281816140ad015281816141f6015281816143c3015281816143f50152818161464c0152818161467c015281816146ae01528181614784015281816148ff015281816149300152818161496201528181614a3801528181614b8601528181614c1101528181614c4301528181614cef01528181614d4d01528181614d8701528181614e4801528181614e7d01528181614f2301528181615090015281816150c3015281816150f4015281816151c6015281816152d20152818161530401526158bb015261010051818181610b800152613c7b015261012051818181613e2801528181615b2b0152615cfe0152615dad90f35b62000274565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620002a29062000278565b810190811060018060401b03821117620002bb57604052565b62000282565b90620002d8620002d06200026e565b928362000296565b565b5f80fd5b60018060a01b031690565b620002f490620002de565b90565b6200030281620002e9565b036200030a57565b5f80fd5b905051906200031d82620002f7565b565b6200032a90620002e9565b90565b62000338816200031f565b036200034057565b5f80fd5b9050519062000353826200032d565b565b6200036090620002e9565b90565b6200036e8162000355565b036200037657565b5f80fd5b90505190620003898262000363565b565b6200039690620002e9565b90565b620003a4816200038b565b03620003ac57565b5f80fd5b90505190620003bf8262000399565b565b620003cc90620002e9565b90565b620003da81620003c1565b03620003e257565b5f80fd5b90505190620003f582620003cf565b565b909160c082840312620004635762000412835f84016200030e565b9262000422816020850162000344565b9262000432826040830162000344565b92620004606200044684606085016200037a565b93620004568160808601620003b0565b9360a001620003e6565b90565b620002da565b6200048c62006827803803806200048081620002c1565b928339810190620003f7565b909192939495565b90565b620004b0620004aa620004b692620002de565b62000494565b620002de565b90565b620004c49062000497565b90565b620004d290620004b9565b90565b5f1b90565b90620004e85f1991620004d5565b9181191691161790565b90565b90565b620005116200050b6200051792620004f2565b62000494565b620004f5565b90565b90565b9062000537620005316200053f92620004f8565b6200051a565b8254620004da565b9055565b90565b6200055f62000559620005659262000543565b62000494565b620004f5565b90565b906200057b60018060a01b0391620004d5565b9181191691161790565b620005909062000497565b90565b6200059e9062000585565b90565b90565b90620005be620005b8620005c69262000593565b620005a1565b825462000568565b9055565b90565b90565b620005e9620005e3620005ef92620005ca565b620004d5565b620005cd565b90565b620005fd5f620005d0565b90565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990565b7f73f9a0f79d0de650ebb1c7d68b67125ab5d93ce97641ba33e5e1e4b5f481921c90565b6200065390620002e9565b90565b62000662905162000648565b90565b620006709062000497565b90565b6200067e9062000665565b90565b939092620006ee92620007029694620006ae73bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb620004c7565b60e052620006bf600560046200051d565b620006d96ec097ce7bc90715b34b9f100000000062000546565b6101205260805260a05260c0526001620005a4565b61010052620006fc620005f2565b62000944565b50620007196200071162000600565b339062000944565b50620007456200072862000624565b6200073e6200073860e062000656565b62000673565b9062000944565b50620007656200075462000600565b6200075e620005f2565b90620007ea565b620007846200077362000624565b6200077d620005f2565b90620007ea565b565b6200079190620005cd565b90565b90620007a09062000786565b5f5260205260405f2090565b5f1c90565b620007bc90620007ac565b90565b90620007d9620007d3620007e19262000786565b620007b1565b8254620004da565b9055565b5f0190565b90620007f6826200089f565b91620008128260016200080b5f859062000794565b01620007bf565b91620008556200084e620008477fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9562000786565b9262000786565b9262000786565b92620008606200026e565b806200086c81620007e5565b0390a4565b5f90565b90565b620008876200088d91620007ac565b62000875565b90565b6200089c905462000878565b90565b6001620008bc620008c392620008b462000871565b505f62000794565b0162000890565b90565b5f90565b151590565b620008da9062000665565b90565b90620008e990620008cf565b5f5260205260405f2090565b906200090360ff91620004d5565b9181191691161790565b6200091890620008ca565b90565b90565b90620009386200093262000940926200090d565b6200091b565b8254620008f5565b9055565b6200094e620008c6565b50620009676200096082849062000a35565b15620008ca565b5f1462000a02576200099560016200098f5f6200098681869062000794565b018590620008dd565b6200091e565b90620009a062000a6a565b90620009e3620009dc620009d57f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9562000786565b92620008cf565b92620008cf565b92620009ee6200026e565b80620009fa81620007e5565b0390a4600190565b50505f90565b60ff1690565b62000a1d62000a2391620007ac565b62000a08565b90565b62000a32905462000a0e565b90565b62000a63915f62000a5662000a5d9362000a4e620008c6565b508262000794565b01620008dd565b62000a26565b90565b5f90565b62000a7462000a66565b50339056fe60806040526004361015610013575b61175f565b61001d5f3561034c565b806301ffc9a7146103475780631ec66cb7146103425780631ec82cb81461033d578063237f013514610338578063248a9ca3146103335780632b3297f91461032e5780632b8f81e8146103295780632dfe6400146103245780632e5f35bd1461031f5780632f2ff15d1461031a57806331f570721461031557806333d579151461031057806336568abe1461030b578063370ee8cb146103065780633e0c06291461030157806340eaeebf146102fc5780634383173a146102f757806343f68a49146102f25780635bfe19bc146102ed5780635c2a81ad146102e857806363c8acdb146102e35780636f6654a3146102de5780636f84bd1f146102d9578063738315ed146102d45780637dc0d1d0146102cf5780638336bbb8146102ca57806385107154146102c55780638c04166f146102c0578063918d2f41146102bb57806391d14854146102b6578063977da540146102b15780639c82f2a4146102ac578063a193212e146102a7578063a217fddf146102a2578063a4356d1f1461029d578063a979756314610298578063ad8b6e2714610293578063b1022fdf1461028e578063b1283e7714610289578063bd26c7f014610284578063c84a67591461027f578063ce0591cd1461027a578063ce88c52c14610275578063d547741f14610270578063d8dfeb451461026b578063d8fbc83314610266578063e5a6b10f14610261578063e86eb3051461025c578063ed4112c814610257578063f5b541a6146102525763ff2681250361000e5761172b565b6116f6565b611693565b61165f565b61162a565b6115d1565b61154a565b6114c4565b611490565b61145c565b611428565b6113f4565b611385565b611285565b611250565b611219565b6111e6565b6111b1565b611143565b611110565b611090565b61105a565b611025565b610fc1565b610f55565b610ee7565b610eb2565b610e29565b610df2565b610dbf565b610d88565b610cfb565b610c7e565b610c05565b610bd0565b610b4a565b610b16565b610ab6565b610a64565b610a2e565b6109ab565b6108e6565b610885565b610821565b6107a7565b610738565b610657565b6105c1565b61056f565b6104ac565b6103d8565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b63ffffffff60e01b1690565b61037981610364565b0361038057565b5f80fd5b9050359061039182610370565b565b906020828203126103ac576103a9915f01610384565b90565b61035c565b151590565b6103bf906103b1565b9052565b91906103d6905f602085019401906103b6565b565b34610408576104046103f36103ee366004610393565b611767565b6103fb610352565b918291826103c3565b0390f35b610358565b90565b6104198161040d565b0361042057565b5f80fd5b9050359061043182610410565b565b60018060a01b031690565b61044790610433565b90565b6104538161043e565b0361045a57565b5f80fd5b9050359061046b8261044a565b565b90916060828403126104a25761049f610488845f8501610424565b93610496816020860161045e565b9360400161045e565b90565b61035c565b5f0190565b346104db576104c56104bf36600461046d565b91613986565b6104cd610352565b806104d7816104a7565b0390f35b610358565b6104e99061043e565b90565b6104f5816104e0565b036104fc57565b5f80fd5b9050359061050d826104ec565b565b90565b61051b8161050f565b0361052257565b5f80fd5b9050359061053382610512565b565b909160608284031261056a57610567610550845f8501610500565b9361055e816020860161045e565b93604001610526565b90565b61035c565b3461059e57610588610582366004610535565b916159be565b610590610352565b8061059a816104a7565b0390f35b610358565b906020828203126105bc576105b9915f01610424565b90565b61035c565b346105ef576105d96105d43660046105a3565b6123e3565b6105e1610352565b806105eb816104a7565b0390f35b610358565b6105fd8161040d565b0361060457565b5f80fd5b90503590610615826105f4565b565b906020828203126106305761062d915f01610608565b90565b61035c565b61063e9061040d565b9052565b9190610655905f60208501940190610635565b565b346106875761068361067261066d366004610617565b61185c565b61067a610352565b91829182610642565b0390f35b610358565b5f91031261069657565b61035c565b1c90565b60018060a01b031690565b6106ba9060086106bf930261069b565b61069f565b90565b906106cd91546106aa565b90565b6106dc60015f906106c2565b90565b90565b6106f66106f16106fb92610433565b6106df565b610433565b90565b610707906106e2565b90565b610713906106fe565b90565b61071f9061070a565b9052565b9190610736905f60208501940190610716565b565b346107685761074836600461068c565b6107646107536106d0565b61075b610352565b91829182610723565b0390f35b610358565b90916060828403126107a25761079f610788845f8501610424565b93610796816020860161045e565b93604001610526565b90565b61035c565b346107d6576107c06107ba36600461076d565b91612491565b6107c8610352565b806107d2816104a7565b0390f35b610358565b60808183031261081c576107f1825f8301610424565b926108196108028460208501610424565b936108108160408601610526565b9360600161045e565b90565b61035c565b346108535761083d6108343660046107db565b929190916126fe565b610845610352565b8061084f816104a7565b0390f35b610358565b9190604083820312610880578061087461087d925f8601610424565b93602001610526565b90565b61035c565b346108b45761089e610898366004610858565b906122ee565b6108a6610352565b806108b0816104a7565b0390f35b610358565b91906040838203126108e157806108d56108de925f8601610608565b9360200161045e565b90565b61035c565b34610915576108ff6108f93660046108b9565b906118a7565b610907610352565b80610911816104a7565b0390f35b610358565b5f80fd5b5f80fd5b5f80fd5b909182601f830112156109605781359167ffffffffffffffff831161095b57602001926001830284011161095657565b610922565b61091e565b61091a565b9190916040818403126109a65761097e835f8301610526565b92602082013567ffffffffffffffff81116109a15761099d9201610926565b9091565b610360565b61035c565b346109da576109c46109be366004610965565b916131dc565b6109cc610352565b806109d6816104a7565b0390f35b610358565b9190604083820312610a0757806109fb610a04925f8601610424565b9360200161045e565b90565b61035c565b610a159061050f565b9052565b9190610a2c905f60208501940190610a0c565b565b34610a5f57610a5b610a4a610a443660046109df565b90613c68565b610a52610352565b91829182610a19565b0390f35b610358565b34610a9357610a7d610a773660046108b9565b9061196f565b610a85610352565b80610a8f816104a7565b0390f35b610358565b90602082820312610ab157610aae915f01610526565b90565b61035c565b34610ae457610ace610ac9366004610a98565b611d89565b610ad6610352565b80610ae0816104a7565b0390f35b610358565b9190604083820312610b115780610b05610b0e925f860161045e565b93602001610526565b90565b61035c565b34610b4557610b2f610b29366004610ae9565b90615ae9565b610b37610352565b80610b41816104a7565b0390f35b610358565b34610b7957610b63610b5d366004610858565b9061241a565b610b6b610352565b80610b75816104a7565b0390f35b610358565b7f000000000000000000000000000000000000000000000000000000000000000090565b610bab906106fe565b90565b610bb790610ba2565b9052565b9190610bce905f60208501940190610bae565b565b34610c0057610be036600461068c565b610bfc610beb610b7e565b610bf3610352565b91829182610bbb565b0390f35b610358565b34610c3357610c1d610c18366004610a98565b611ce7565b610c25610352565b80610c2f816104a7565b0390f35b610358565b608081830312610c7957610c4e825f8301610424565b92610c76610c5f8460208501610526565b93610c6d816040860161045e565b9360600161045e565b90565b61035c565b34610cb057610c9a610c91366004610c38565b9291909161362e565b610ca2610352565b80610cac816104a7565b0390f35b610358565b608081830312610cf657610ccb825f8301610424565b92610cf3610cdc8460208501610526565b93610cea8160408601610526565b9360600161045e565b90565b61035c565b34610d2d57610d17610d0e366004610cb5565b929190916122ab565b610d1f610352565b80610d29816104a7565b0390f35b610358565b919060a083820312610d8357610d4a815f8501610424565b92610d588260208301610424565b92610d80610d698460408501610526565b93610d778160608601610526565b9360800161045e565b90565b61035c565b34610dba57610da4610d9b366004610d32565b93929092612e4a565b610dac610352565b80610db6816104a7565b0390f35b610358565b34610ded57610dd7610dd2366004610a98565b613b80565b610ddf610352565b80610de9816104a7565b0390f35b610358565b34610e2457610e0e610e05366004610cb5565b929190916123a4565b610e16610352565b80610e20816104a7565b0390f35b610358565b34610e5b57610e45610e3c3660046107db565b92919091612509565b610e4d610352565b80610e57816104a7565b0390f35b610358565b7f000000000000000000000000000000000000000000000000000000000000000090565b610e8d906106fe565b90565b610e9990610e84565b9052565b9190610eb0905f60208501940190610e90565b565b34610ee257610ec236600461068c565b610ede610ecd610e60565b610ed5610352565b91829182610e9d565b0390f35b610358565b34610f1657610f00610efa366004610858565b906121f5565b610f08610352565b80610f12816104a7565b0390f35b610358565b9091606082840312610f5057610f4d610f36845f8501610424565b93610f448160208601610526565b9360400161045e565b90565b61035c565b34610f8457610f6e610f68366004610f1b565b91612368565b610f76610352565b80610f80816104a7565b0390f35b610358565b90565b610f9c906008610fa1930261069b565b610f89565b90565b90610faf9154610f8c565b90565b610fbe60045f90610fa4565b90565b34610ff157610fd136600461068c565b610fed610fdc610fb2565b610fe4610352565b91829182610a19565b0390f35b610358565b7f73f9a0f79d0de650ebb1c7d68b67125ab5d93ce97641ba33e5e1e4b5f481921c90565b611022610ff6565b90565b346110555761103536600461068c565b61105161104061101a565b611048610352565b91829182610642565b0390f35b610358565b3461108b576110876110766110703660046108b9565b9061180b565b61107e610352565b918291826103c3565b0390f35b610358565b346110be576110a86110a33660046105a3565b6121b5565b6110b0610352565b806110ba816104a7565b0390f35b610358565b6110cc9061043e565b90565b6110d8816110c3565b036110df57565b5f80fd5b905035906110f0826110cf565b565b9060208282031261110b57611108915f016110e3565b90565b61035c565b3461113e576111286111233660046110f2565b611c04565b611130610352565b8061113a816104a7565b0390f35b610358565b346111715761115b611156366004610a98565b613a84565b611163610352565b8061116d816104a7565b0390f35b610358565b90565b5f1b90565b61119261118d61119792611176565b611179565b61040d565b90565b6111a35f61117e565b90565b6111ae61119a565b90565b346111e1576111c136600461068c565b6111dd6111cc6111a6565b6111d4610352565b91829182610642565b0390f35b610358565b34611214576111fe6111f93660046105a3565b611f04565b611206610352565b80611210816104a7565b0390f35b610358565b3461124b5761123561122c366004610c38565b9291909161376a565b61123d610352565b80611247816104a7565b0390f35b610358565b346112805761127c61126b611266366004610a98565b613daa565b611273610352565b91829182610a19565b0390f35b610358565b346112b45761129e611298366004610965565b9161358c565b6112a6610352565b806112b0816104a7565b0390f35b610358565b634e487b7160e01b5f52603260045260245ffd5b5490565b5f5260205f2090565b6112e3816112cd565b8210156112fd576112f56001916112d1565b910201905f90565b6112b9565b90565b61131590600861131a930261069b565b611302565b90565b906113289154611305565b90565b6002611336816112cd565b821015611353576113509161134a916112da565b9061131d565b90565b5f80fd5b6113609061040d565b90565b61136c90611357565b9052565b9190611383905f60208501940190611363565b565b346113b5576113b16113a061139b366004610a98565b61132b565b6113a8610352565b91829182611370565b0390f35b610358565b90916060828403126113ef576113ec6113d5845f8501610424565b936113e38160208601610526565b93604001610526565b90565b61035c565b346114235761140d6114073660046113ba565b91612327565b611415610352565b8061141f816104a7565b0390f35b610358565b346114575761144161143b3660046109df565b90612459565b611449610352565b80611453816104a7565b0390f35b610358565b3461148b5761147561146f366004610f1b565b9161226f565b61147d610352565b80611487816104a7565b0390f35b610358565b346114bf576114a96114a33660046113ba565b9161222e565b6114b1610352565b806114bb816104a7565b0390f35b610358565b346114f3576114dd6114d73660046108b9565b90611963565b6114e5610352565b806114ef816104a7565b0390f35b610358565b7f000000000000000000000000000000000000000000000000000000000000000090565b611525906106fe565b90565b6115319061151c565b9052565b9190611548905f60208501940190611528565b565b3461157a5761155a36600461068c565b6115766115656114f8565b61156d610352565b91829182611535565b0390f35b610358565b7f000000000000000000000000000000000000000000000000000000000000000090565b6115ac906106fe565b90565b6115b8906115a3565b9052565b91906115cf905f602085019401906115af565b565b34611601576115e136600461068c565b6115fd6115ec61157f565b6115f4610352565b918291826115bc565b0390f35b610358565b7f000000000000000000000000000000000000000000000000000000000000000090565b3461165a5761163a36600461068c565b611656611645611606565b61164d610352565b91829182611535565b0390f35b610358565b3461168e57611678611672366004610f1b565b916136f7565b611680610352565b8061168a816104a7565b0390f35b610358565b346116c2576116ac6116a6366004610f1b565b916136b5565b6116b4610352565b806116be816104a7565b0390f35b610358565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990565b6116f36116c7565b90565b346117265761170636600461068c565b6117226117116116eb565b611719610352565b91829182610642565b0390f35b610358565b3461175a5761174461173e366004610f1b565b91613672565b61174c610352565b80611756816104a7565b0390f35b610358565b5f80fd5b5f90565b61176f611763565b508061178a611784637965db0b60e01b610364565b91610364565b14908115611797575b5090565b6117a19150611b60565b5f611793565b906117b190611357565b5f5260205260405f2090565b6117c6906106fe565b90565b906117d3906117bd565b5f5260205260405f2090565b5f1c90565b60ff1690565b6117f66117fb916117df565b6117e4565b90565b61180890546117ea565b90565b611831915f61182661182c9361181f611763565b50826117a7565b016117c9565b6117fe565b90565b5f90565b90565b61184761184c916117df565b611838565b90565b611859905461183b565b90565b600161187461187a9261186d611834565b505f6117a7565b0161184f565b90565b906118989161189361188e8261185c565b6118b3565b61189a565b565b906118a491611a03565b50565b906118b19161187d565b565b6118c5906118bf611b53565b906118f7565b565b6118d09061043e565b9052565b9160206118f59294936118ee60408201965f8301906118c7565b0190610635565b565b9061190c61190683839061180b565b156103b1565b611914575050565b61193561191f610352565b92839263e2517d3f60e01b8452600484016118d4565b0390fd5b906119549161194f61194a8261185c565b6118b3565b611956565b565b9061196091611aae565b50565b9061196d91611939565b565b908061198a61198461197f611b53565b61043e565b9161043e565b0361199b5761199891611aae565b50565b6119a3610352565b63334bd91960e11b8152806119ba600482016104a7565b0390fd5b906119ca60ff91611179565b9181191691161790565b6119dd906103b1565b90565b90565b906119f86119f36119ff926119d4565b6119e0565b82546119be565b9055565b611a0b611763565b50611a20611a1a82849061180b565b156103b1565b5f14611aa857611a476001611a425f611a3a8186906117a7565b0185906117c9565b6119e3565b90611a50611b53565b90611a8d611a87611a817f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d95611357565b926117bd565b926117bd565b92611a96610352565b80611aa0816104a7565b0390a4600190565b50505f90565b611ab6611763565b50611ac281839061180b565b5f14611b4957611ae85f611ae35f611adb8186906117a7565b0185906117c9565b6119e3565b90611af1611b53565b90611b2e611b28611b227ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b95611357565b926117bd565b926117bd565b92611b37610352565b80611b41816104a7565b0390a4600190565b50505f90565b5f90565b611b5b611b4f565b503390565b611b68611763565b50611b82611b7c6301ffc9a760e01b610364565b91610364565b1490565b611b9f90611b9a611b9561119a565b6118b3565b611bf7565b565b90611bb260018060a01b0391611179565b9181191691161790565b611bc5906106e2565b90565b611bd190611bbc565b90565b90565b90611bec611be7611bf392611bc8565b611bd4565b8254611ba1565b9055565b611c02906001611bd7565b565b611c0d90611b86565b565b611c2890611c23611c1e6116c7565b6118b3565b611c9e565b565b90565b611c41611c3c611c4692611c2a565b6106df565b61050f565b90565b90611c555f1991611179565b9181191691161790565b611c73611c6e611c789261050f565b6106df565b61050f565b90565b90565b90611c93611c8e611c9a92611c5f565b611c7b565b8254611c49565b9055565b80611cb2611cac6005611c2d565b9161050f565b11611cc457611cc2906004611c7e565b565b611ccc610352565b634a6d99c960e11b815280611ce3600482016104a7565b0390fd5b611cf090611c0f565b565b611d0b90611d06611d0161119a565b6118b3565b611d3a565b565b90565b611d24611d1f611d2992611d0d565b6106df565b61050f565b90565b611d37612710611d10565b90565b80611d54611d4e611d49611d2c565b61050f565b9161050f565b11611d6657611d64906004611c7e565b565b611d6e610352565b630464185560e31b815280611d85600482016104a7565b0390fd5b611d9290611cf2565b565b611dad90611da8611da361119a565b6118b3565b611e9d565b565b90611db990611357565b5f5260205260405f2090565b90565b634e487b7160e01b5f52604160045260245ffd5b5f5260205f2090565b5490565b611df281611de5565b821015611e0c57611e04600191611ddc565b910201905f90565b6112b9565b1b90565b91906008611e30910291611e2a5f1984611e11565b92611e11565b9181191691161790565b611e43906117df565b90565b9190611e5c611e57611e6493611357565b611e3a565b908354611e15565b9055565b9081549168010000000000000000831015611e985782611e90916001611e9695018155611de9565b90611e46565b565b611dc8565b611eb1611eac60038390611daf565b6117fe565b611ee157611edf90611ecd611ec66002611dc5565b8290611e68565b611eda6001916003611daf565b6119e3565b565b611ee9610352565b638e3e108160e01b815280611f00600482016104a7565b0390fd5b611f0d90611d94565b565b611f2890611f23611f1e61119a565b6118b3565b612070565b565b611f3e611f39611f4392611176565b6106df565b61050f565b90565b634e487b7160e01b5f52601160045260245ffd5b611f639061050f565b5f198114611f715760010190565b611f46565b90565b611f8d611f88611f9292611f76565b6106df565b61050f565b90565b611fa4611faa9193929361050f565b9261050f565b8203918211611fb557565b611f46565b634e487b7160e01b5f52603160045260245ffd5b5f90565b611fe491611fde611fce565b91611e46565b565b611fef81611de5565b801561201057600190039061200d6120078383611de9565b90611fd2565b55565b611fba565b9190600861203091029161202a60ff84611e11565b92611e11565b9181191691161790565b919061205061204b612058936119d4565b6119e0565b908354612015565b9055565b61206e91612068611763565b9161203a565b565b61208d61208761208260038490611daf565b6117fe565b156103b1565b6121925761209b60026112cd565b906120a55f611f2a565b5b806120b96120b38561050f565b9161050f565b101561216f576120dc6120d76120d1600284906112da565b9061131d565b611357565b6120f66120f06120eb85611357565b61040d565b9161040d565b146121095761210490611f5a565b6120a6565b5f9161214f6121689261214961214161213b61216d9861213560029161212f6001611f79565b90611f95565b906112da565b9061131d565b9160026112da565b90611e46565b61216161215c6002611dc5565b611fe6565b6003611daf565b61205c565b565b612177610352565b633993c11360e11b81528061218e600482016104a7565b0390fd5b61219a610352565b633993c11360e11b8152806121b1600482016104a7565b0390fd5b6121be90611f0f565b565b906121da916121d56121d06116c7565b6118b3565b6121dc565b565b906121f3919033906121ed5f611f2a565b92613f11565b565b906121ff916121c0565b565b9061221c92916122176122126116c7565b6118b3565b61221e565b565b9161222c9291339192613f11565b565b906122399291612201565b565b90612256929161225161224c6116c7565b6118b3565b612258565b565b9161226d92916122675f611f2a565b92613f11565b565b9061227a929161223b565b565b9061229893929161229361228e6116c7565b6118b3565b61229a565b565b926122a9939291909192613f11565b565b906122b793929161227c565b565b906122d3916122ce6122c96116c7565b6118b3565b6122d5565b565b906122ec919033906122e65f611f2a565b9261406e565b565b906122f8916122b9565b565b90612315929161231061230b6116c7565b6118b3565b612317565b565b91612325929133919261406e565b565b9061233292916122fa565b565b9061234f929161234a6123456116c7565b6118b3565b612351565b565b9161236692916123605f611f2a565b9261406e565b565b906123739291612334565b565b9061239193929161238c6123876116c7565b6118b3565b612393565b565b926123a293929190919261406e565b565b906123b0939291612375565b565b6123cb906123c66123c16116c7565b6118b3565b6123cd565b565b6123e190336123db5f611f2a565b916141e3565b565b6123ec906123b2565b565b90612408916124036123fe6116c7565b6118b3565b61240a565b565b9061241891903390916141e3565b565b90612424916123ee565b565b906124409161243b6124366116c7565b6118b3565b612442565b565b9061245791906124515f611f2a565b916141e3565b565b9061246391612426565b565b90612480929161247b6124766116c7565b6118b3565b612482565b565b9161248f929190916141e3565b565b9061249c9291612465565b565b906124ba9392916124b56124b06116c7565b6118b3565b6124c8565b565b6124c5906106fe565b90565b906124fd6124ea612506956124dc85615743565b6124e584615743565b6157be565b928484906124f7306124bc565b926152b5565b5091909161503a565b50565b9061251593929161249e565b565b9061253393929161252e6125296116c7565b6118b3565b6125c4565b565b5f80fd5b601f801991011690565b9061254d90612539565b810190811067ffffffffffffffff82111761256757604052565b611dc8565b60e01b90565b9050519061257f82610512565b565b9060208282031261259a57612597915f01612572565b90565b61035c565b91906125b2905f602085019401906118c7565b565b6125bc610352565b3d5f823e3d90fd5b92906125fb6125e861260494936125da87615743565b6125e384615743565b6157be565b948386906125f5306124bc565b926143a7565b509083916145eb565b505061266660206126347f000000000000000000000000000000000000000000000000000000000000000061151c565b6370a082319061265b612646306124bc565b9261264f610352565b9586948593849361256c565b83526004830161259f565b03915afa9081156126f9575f916126cb575b50908161268d6126875f611f2a565b9161050f565b11612697575b5050565b6126c4917f0000000000000000000000000000000000000000000000000000000000000000919091612754565b5f80612693565b6126ec915060203d81116126f2575b6126e48183612543565b810190612581565b5f612678565b503d6126da565b6125b4565b9061270a939291612517565b565b63ffffffff1690565b61272961272461272e9261270c565b61256c565b610364565b90565b91602061275292949361274b60408201965f8301906118c7565b0190610a0c565b565b9061279b6127a09361278c6004949361277363a9059cbb919391612715565b9261277c610352565b9687946020860190815201612731565b60208201810382520383612543565b6127e7565b565b5190565b6127af816103b1565b036127b657565b5f80fd5b905051906127c7826127a6565b565b906020828203126127e2576127df915f016127ba565b90565b61035c565b906127fa906127f58361151c565b612884565b612803816127a2565b61281561280f5f611f2a565b9161050f565b14159081612854575b506128265750565b6128326128509161151c565b61283a610352565b918291635274afe760e01b83526004830161259f565b0390fd5b6128799150612873906020612868826127a2565b8183010191016127c9565b156103b1565b5f61281e565b606090565b906128a29161289161287f565b509061289c5f611f2a565b91612929565b90565b6128ae906106fe565b90565b906128c46128bd610352565b9283612543565b565b67ffffffffffffffff81116128e4576128e0602091612539565b0190565b611dc8565b906128fb6128f6836128c6565b6128b1565b918252565b3d5f1461291b576129103d6128e9565b903d5f602084013e5b565b61292361287f565b90612919565b909161293361287f565b5061293d306128a5565b3161295061294a8361050f565b9161050f565b1061297c575f8091612979948491602082019151925af190612970612900565b909190916129aa565b90565b6129a6612988306128a5565b612990610352565b91829163cd78605960e01b83526004830161259f565b0390fd5b906129be906129b761287f565b50156103b1565b5f146129ca5750612a35565b6129d3826127a2565b6129e56129df5f611f2a565b9161050f565b1480612a1a575b6129f4575090565b612a1690612a00610352565b918291639996b31560e01b83526004830161259f565b0390fd5b50803b612a2f612a295f611f2a565b9161050f565b146129ec565b612a3e816127a2565b612a50612a4a5f611f2a565b9161050f565b115f14612a5f57805190602001fd5b612a67610352565b630a12f52160e11b815280612a7e600482016104a7565b0390fd5b90612a9f94939291612a9a612a956116c7565b6118b3565b612ca9565b565b5f80fd5b90505190612ab28261044a565b565b919060a083820312612b2457612b1d90612ace60a06128b1565b93612adb825f8301612aa5565b5f860152612aec8260208301612aa5565b6020860152612afe8260408301612aa5565b6040860152612b108260608301612aa5565b6060860152608001612572565b6080830152565b612aa1565b9060a082820312612b4257612b3f915f01612ab4565b90565b61035c565b612b7c612b8394612b72606094989795612b68608086019a5f870190611363565b6020850190611363565b6040830190610a0c565b01906118c7565b565b5f910312612b8f57565b61035c565b612b9d9061043e565b9052565b612baa9061050f565b9052565b90608080612c0693612bc65f8201515f860190612b94565b612bd860208201516020860190612b94565b612bea60408201516040860190612b94565b612bfc60608201516060860190612b94565b0151910190612ba1565b565b60209181520190565b5f5b838110612c23575050905f910152565b806020918301518185015201612c13565b612c53612c5c602093612c6193612c4a816127a2565b93848093612c08565b95869101612c11565b612539565b0190565b9092612c9990612c8f612ca69694612c856101008601975f870190612bae565b60a0850190610a0c565b60c08301906118c7565b60e0818403910152612c34565b90565b612cc9612d4f939495612cbb83615743565b612cc484615743565b6157be565b94612cf37f00000000000000000000000000000000000000000000000000000000000000006115a3565b9263238d65799560a0612d257f00000000000000000000000000000000000000000000000000000000000000006115a3565b632c3c915790612d448592612d38610352565b9a8b948593849361256c565b835260048301611370565b03915afa958615612e45575f96612e0b575b5090612d83612d92929880959294612d77610352565b95869460208601612b47565b60208201810382520382612543565b823b15612e06575f94612dc38692612db894612dac610352565b998a988997889661256c565b865260048601612c65565b03925af18015612e0157612dd5575b50565b612df4905f3d8111612dfa575b612dec8183612543565b810190612b85565b5f612dd2565b503d612de2565b6125b4565b612535565b612d9292919650612e35612d839160a03d8111612e3e575b612e2d8183612543565b810190612b29565b96919250612d61565b503d612e23565b6125b4565b90612e5794939291612a82565b565b90612e749291612e6f612e6a610ff6565b6118b3565b612f1d565b565b612e7f90610433565b90565b612e8b81612e76565b03612e9257565b5f80fd5b90503590612ea382612e82565b565b90503590612eb2826127a6565b565b9091606082840312612ee957612ee6612ecf845f8501610424565b93612edd8160208601612e96565b93604001612ea5565b90565b61035c565b612ef7906106fe565b90565b916020612f1b929493612f1460408201965f830190610a0c565b0190610a0c565b565b90612f3692612f2f9190810190612eb4565b9390612eee565b925f1461301057612f52612f49836155eb565b8290859161503a565b92612fbf612f6c83858490612f66306124bc565b926143a7565b937f000000000000000000000000000000000000000000000000000000000000000090612fb87f00000000000000000000000000000000000000000000000000000000000000006115a3565b9091613219565b909192612ff5612fef7f9321acd3b5d7c696c38e588e0fa03bd89bfc1284b525de1be76ad16c8d4f9f88936117bd565b93611357565b9361300a613001610352565b92839283612efa565b0390a35b565b61302761301e839493615493565b82908491614b5e565b50916130956130428386849061303c306124bc565b926152b5565b947f00000000000000000000000000000000000000000000000000000000000000009061308e7f00000000000000000000000000000000000000000000000000000000000000006115a3565b9091613219565b6130f560206130c37f000000000000000000000000000000000000000000000000000000000000000061151c565b6370a08231906130ea6130d5306124bc565b926130de610352565b9586948593849361256c565b83526004830161259f565b03915afa9081156131d7575f916131a9575b508061311b6131155f611f2a565b9161050f565b11613175575b509091926131586131527f11c6dc0f78517109e3cf01f3002577a2c7b58dd75760ad2abeb77e97072b613b936117bd565b93611357565b9361316d613164610352565b92839283612efa565b0390a361300e565b6131a3907f000000000000000000000000000000000000000000000000000000000000000090839091612754565b5f613121565b6131ca915060203d81116131d0575b6131c28183612543565b810190612581565b5f613107565b503d6131b8565b6125b4565b906131e79291612e59565b565b6131f290611f2a565b9052565b91602061321792949361321060408201965f8301906118c7565b01906131e9565b565b909161325c60049161324d63095ea7b3613234879391612715565b9261323d610352565b9586946020860190815201612731565b60208201810382520382612543565b9061327161326b8284906132d5565b156103b1565b61327b575b505050565b6132c860046132cd946132c384916132b463095ea7b361329b5f91612715565b926132a4610352565b96879460208601908152016131f6565b60208201810382520383612543565b6127e7565b6127e7565b5f8080613276565b905f80916132e1611763565b506132eb8461151c565b9082602082019151925af16132fe612900565b81613334575b509081613310575b5090565b61331a915061151c565b3b61332d6133275f611f2a565b9161050f565b115f61330c565b905061333f816127a2565b61335161334b5f611f2a565b9161050f565b14908115613361575b505f613304565b61337c91506020613371826127a2565b8183010191016127c9565b5f61335a565b9061339d9291613398613393610ff6565b6118b3565b6133e5565b565b6080818303126133e0576133b5825f8301610424565b926133dd6133c68460208501610424565b936133d48160408601610526565b93606001612e96565b90565b61035c565b61344161341061342d61340261342396613494969081019061339f565b929891949098949892612eee565b9782899061341d306124bc565b926143a7565b50829087916145eb565b505082859061343b306124bc565b926152b5565b507f00000000000000000000000000000000000000000000000000000000000000009061348d7f00000000000000000000000000000000000000000000000000000000000000006115a3565b9091613219565b6134f460206134c27f000000000000000000000000000000000000000000000000000000000000000061151c565b6370a08231906134e96134d4306124bc565b926134dd610352565b9586948593849361256c565b83526004830161259f565b03915afa908115613587575f91613559575b50908161351b6135155f611f2a565b9161050f565b11613525575b5050565b613552917f0000000000000000000000000000000000000000000000000000000000000000919091612754565b5f80613521565b61357a915060203d8111613580575b6135728183612543565b810190612581565b5f613506565b503d613568565b6125b4565b906135979291613382565b565b906135b59392916135b06135ab6116c7565b6118b3565b6135df565b565b6135cb6135c66135d092611176565b6106df565b610433565b90565b6135dc906135b7565b90565b92613624939291906135f0836157be565b928161360c6136066136015f6135d3565b61043e565b9161043e565b145f146136275761361d91506157be565b925b6143a7565b50565b509261361f565b9061363a939291613599565b565b90613657929161365261364d6116c7565b6118b3565b613659565b565b9161366861366e9392916157be565b916145eb565b5050565b9061367d929161363c565b565b9061369a92916136956136906116c7565b6118b3565b61369c565b565b916136ab6136b19392916157be565b9161489d565b5050565b906136c0929161367f565b565b906136dd92916136d86136d36116c7565b6118b3565b6136df565b565b916136ee6136f49392916157be565b9161503a565b50565b9061370292916136c2565b565b9061372093929161371b6137166116c7565b6118b3565b613722565b565b61373061375f9492936157be565b90929080928061375061374a6137455f6135d3565b61043e565b9161043e565b145f146137625750925b6152b5565b50565b90509261375a565b90613776939291613704565b565b90613793929161378e6137896116c7565b6118b3565b613888565b565b6fffffffffffffffffffffffffffffffff1690565b6137b381613795565b036137ba57565b5f80fd5b905051906137cb826137aa565b565b919060608382031261381957613812906137e760606128b1565b936137f4825f8301612572565b5f86015261380582602083016137be565b60208601526040016137be565b6040830152565b612aa1565b9060608282031261383757613834915f016137cd565b90565b61035c565b91602061385d92949361385660408201965f830190611363565b01906118c7565b565b6138699051613795565b90565b61388061387b61388592613795565b6106df565b61050f565b90565b9190613893906157be565b906138bd7f00000000000000000000000000000000000000000000000000000000000000006115a3565b9260606393c520629482906138e486976138ef6138d8610352565b998a958694859461256c565b84526004840161383c565b03915afa93841561398157613915604061394896613942935f91613953575b500161385f565b9380938061393361392d6139285f6135d3565b61043e565b9161043e565b145f1461394b5750935b61386c565b906152b5565b50565b90509361393d565b613974915060603d811161397a575b61396c8183612543565b81019061381e565b5f61390e565b503d613962565b6125b4565b906139919291613778565b565b6139ac906139a76139a26116c7565b6118b3565b6139ae565b565b806139c16139bb5f611f2a565b9161050f565b146139d3575b6139d090615493565b50565b50613a346020613a027f000000000000000000000000000000000000000000000000000000000000000061151c565b6370a0823190613a29613a14306124bc565b92613a1d610352565b9586948593849361256c565b83526004830161259f565b03915afa8015613a7f576139d0915f91613a51575b5090506139c7565b613a72915060203d8111613a78575b613a6a8183612543565b810190612581565b5f613a49565b503d613a60565b6125b4565b613a8d90613993565b565b613aa890613aa3613a9e6116c7565b6118b3565b613aaa565b565b80613abd613ab75f611f2a565b9161050f565b14613acf575b613acc906155eb565b50565b50613b306020613afe7f000000000000000000000000000000000000000000000000000000000000000061151c565b6370a0823190613b25613b10306124bc565b92613b19610352565b9586948593849361256c565b83526004830161259f565b03915afa8015613b7b57613acc915f91613b4d575b509050613ac3565b613b6e915060203d8111613b74575b613b668183612543565b810190612581565b5f613b45565b503d613b5c565b6125b4565b613b8990613a8f565b565b5f90565b919061010083820312613c3757613c3090613bab6101006128b1565b93613bb8825f8301612572565b5f860152613bc98260208301612572565b6020860152613bdb8260408301612572565b6040860152613bed8260608301612572565b6060860152613bff8260808301612572565b6080860152613c118260a08301612572565b60a0860152613c238260c08301612572565b60c086015260e001612572565b60e0830152565b612aa1565b9061010082820312613c5657613c53915f01613b8f565b90565b61035c565b613c65905161050f565b90565b9061010090613c75613b8b565b50613c9f7f0000000000000000000000000000000000000000000000000000000000000000610ba2565b613cc9613cb1635c3888219593615788565b94613cd4613cbd610352565b9687958694859461256c565b84526004840161383c565b03915afa8015613d3a57613d08915f91613d0b575b50613d026060613cfb60a08401613c5b565b9201613c5b565b90611f95565b90565b613d2d91506101003d8111613d33575b613d258183612543565b810190613c3c565b5f613ce9565b503d613d1b565b6125b4565b613d4e613d549193929361050f565b9261050f565b91613d6083820261050f565b928184041490151715613d6f57565b611f46565b634e487b7160e01b5f52601260045260245ffd5b613d94613d9a9161050f565b9161050f565b908115613da5570490565b613d74565b613db2613b8b565b50613df76020613de17f0000000000000000000000000000000000000000000000000000000000000000610e84565b63a035b1fe90613def610352565b93849261256c565b82528180613e07600482016104a7565b03915afa8015613e8057613e4d92613e26925f92613e50575b50613d3f565b7f000000000000000000000000000000000000000000000000000000000000000090613d88565b90565b613e7291925060203d8111613e79575b613e6a8183612543565b810190612581565b905f613e20565b503d613e60565b6125b4565b613e91613e96916117df565b610f89565b90565b613ea39054613e85565b90565b600190565b604090613ed4613edb9496959396613eca60608401985f850190611363565b60208301906118c7565b01906103b6565b565b613f01613f0e949293613ef760608401955f8501906118c7565b6020830190610a0c565b6040818403910152612c34565b90565b9291613f2590613f2085615743565b6157be565b90613f306005613e99565b9280613f44613f3e5f611f2a565b9161050f565b03614059575b50613f747f00000000000000000000000000000000000000000000000000000000000000006115a3565b63e0232b42613fd5613fa57f000000000000000000000000000000000000000000000000000000000000000061151c565b9396613fc6613fb2613ea6565b613fba610352565b97889360208501613eab565b60208201810382520385612543565b813b15614054575f613ffa916140058296613fee610352565b998a978896879561256c565b855260048501613edd565b03925af191821561404f5761402192614023575b506005611c7e565b565b614042905f3d8111614048575b61403a8183612543565b810190612b85565b5f614019565b503d614030565b6125b4565b612535565b614064906005611c7e565b5f613f4a565b5f90565b92916140829061407d85615743565b6157be565b9061408d6005613e99565b92806140a161409b5f611f2a565b9161050f565b036141b6575b506140d17f00000000000000000000000000000000000000000000000000000000000000006115a3565b63e0232b426141326141027f000000000000000000000000000000000000000000000000000000000000000061151c565b939661412361410f61406a565b614117610352565b97889360208501613eab565b60208201810382520385612543565b813b156141b1575f61415791614162829661414b610352565b998a978896879561256c565b855260048501613edd565b03925af19182156141ac5761417e92614180575b506005611c7e565b565b61419f905f3d81116141a5575b6141978183612543565b810190612b85565b5f614176565b503d61418d565b6125b4565b612535565b6141c1906005611c7e565b5f6140a7565b6141db6141d66141e092611176565b6106df565b613795565b90565b906141f0909392936157be565b9261421a7f00000000000000000000000000000000000000000000000000000000000000006115a3565b60606393c52062918490614240889461424b614234610352565b9687958694859461256c565b84526004840161383c565b03915afa908115614326575f916142f8575b509161426b6040840161385f565b61427d6142775f6141c7565b91613795565b14806142d3575b6142ac57936142a261429d60406142aa9697950161385f565b61386c565b90919261406e565b565b84906142cf6142b9610352565b9283926308d261b360e01b84526004840161383c565b0390fd5b506142e06020840161385f565b6142f26142ec5f6141c7565b91613795565b14614284565b614319915060603d811161431f575b6143118183612543565b81019061381e565b5f61425d565b503d614307565b6125b4565b91906040838203126143535780614347614350925f8601612572565b93602001612572565b90565b61035c565b909594926143a59461439461439e9261438a6101009661438061012088019c5f890190612bae565b60a0870190610a0c565b60c08501906131e9565b60e08301906118c7565b01906118c7565b565b91614440926143b4613b8b565b506143be82615845565b6143e77f00000000000000000000000000000000000000000000000000000000000000006115a3565b9160a06350d8cd4b926144197f00000000000000000000000000000000000000000000000000000000000000006115a3565b614435632c3c9157614429610352565b998a948593849361256c565b835260048301611370565b03915afa938415614537576040955f956144f9575b50916144a95f9261449e9498849180918061448061447a6144758a6135d3565b61043e565b9161043e565b1487146144f15750915b614492610352565b9a8b998a98899761256c565b875260048701614358565b03925af19081156144ec575f916144bf575b5090565b6144e0915060403d81116144e5575b6144d88183612543565b81019061432b565b6144bb565b503d6144ce565b6125b4565b90509161448a565b61449e939195505f926145256144a99260a03d8111614530575b61451d8183612543565b810190612b29565b969294509250614455565b503d614513565b6125b4565b67ffffffffffffffff811161455a57614556602091612539565b0190565b611dc8565b9061457161456c8361453c565b6128b1565b918252565b61457f5f61455f565b90565b61458a614576565b90565b614595614582565b90565b91936145d06145e896946145c66145da94976145bc6101208801995f890190612bae565b60a0870190610a0c565b60c08501906131e9565b60e08301906118c7565b610100818403910152612c34565b90565b906145f4613b8b565b506145fd613b8b565b5061460783615845565b8061461a6146145f611f2a565b9161050f565b1461482f576146f9916146777f00000000000000000000000000000000000000000000000000000000000000006146707f00000000000000000000000000000000000000000000000000000000000000006115a3565b8491613219565b6146a07f00000000000000000000000000000000000000000000000000000000000000006115a3565b9060a06320b76e81916146d27f00000000000000000000000000000000000000000000000000000000000000006115a3565b6146ee632c3c91576146e2610352565b9889948593849361256c565b835260048301611370565b03915afa92831561482a576040945f946147ee575b50614738916147435f9297839061472361458d565b9161472c610352565b9a8b998a98899761256c565b875260048701614598565b03925af19081156147e9575f809190926147b9575b5090916147b77f00000000000000000000000000000000000000000000000000000000000000006147a87f00000000000000000000000000000000000000000000000000000000000000006115a3565b6147b15f611f2a565b91613219565b565b90506147dc915060403d81116147e2575b6147d48183612543565b81019061432b565b5f614758565b503d6147ca565b6125b4565b5f919450916147436148196147389460a03d8111614823575b6148118183612543565b810190612b29565b959250509161470e565b503d614807565b6125b4565b5050505f906148476148415f93611f2a565b92611f2a565b90565b919361488261489a969461487861488c949761486e6101208801995f890190612bae565b60a08701906131e9565b60c0850190610a0c565b60e08301906118c7565b610100818403910152612c34565b90565b90916148a7613b8b565b506148b0613b8b565b506148ba81615845565b826148cd6148c75f611f2a565b9161050f565b14614ae3576149ad9161492b7f00000000000000000000000000000000000000000000000000000000000000006149237f00000000000000000000000000000000000000000000000000000000000000006115a3565b5f1991613219565b6149547f00000000000000000000000000000000000000000000000000000000000000006115a3565b9060a06320b76e81916149867f00000000000000000000000000000000000000000000000000000000000000006115a3565b6149a2632c3c9157614996610352565b9889948593849361256c565b835260048301611370565b03915afa928315614ade576040945f94614aa2575b506149ec916149f75f928398906149d761458d565b916149e0610352565b9a8b998a98899761256c565b87526004870161484a565b03925af1908115614a9d575f80919092614a6d575b509091614a6b7f0000000000000000000000000000000000000000000000000000000000000000614a5c7f00000000000000000000000000000000000000000000000000000000000000006115a3565b614a655f611f2a565b91613219565b565b9050614a90915060403d8111614a96575b614a888183612543565b81019061432b565b5f614a0c565b503d614a7e565b6125b4565b5f919450916149f7614acd6149ec9460a03d8111614ad7575b614ac58183612543565b810190612b29565b95925050916149c2565b503d614abb565b6125b4565b5050505f90614afb614af55f93611f2a565b92611f2a565b90565b614b079061386c565b9052565b9193614b43614b5b9694614b39614b4d9497614b2f6101208801995f890190612bae565b60a08701906131e9565b60c0850190614afe565b60e08301906118c7565b610100818403910152612c34565b90565b919290614b69613b8b565b93614b72613b8b565b93614b7c82615845565b614bd460a0614baa7f00000000000000000000000000000000000000000000000000000000000000006115a3565b632c3c915790614bc98592614bbd610352565b9586948593849361256c565b835260048301611370565b03915afa908115615035575f91615007575b5092614c3c7f0000000000000000000000000000000000000000000000000000000000000000614c357f00000000000000000000000000000000000000000000000000000000000000006115a3565b8391613219565b6040614c677f00000000000000000000000000000000000000000000000000000000000000006115a3565b916320b76e8192614c975f889395614ca2828a614c8261458d565b91614c8b610352565b9a8b998a98899761256c565b875260048701614598565b03925af1805f80939092614fd5575b50155f14614fc65750506001614d24575b5050505b614d227f0000000000000000000000000000000000000000000000000000000000000000614d137f00000000000000000000000000000000000000000000000000000000000000006115a3565b614d1c5f611f2a565b91613219565b565b614d807f0000000000000000000000000000000000000000000000000000000000000000614d717f00000000000000000000000000000000000000000000000000000000000000006115a3565b614d7a5f611f2a565b91613219565b6060614dab7f00000000000000000000000000000000000000000000000000000000000000006115a3565b6393c520629290614dce8594614dd9614dc2610352565b9687958694859461256c565b84526004840161383c565b03915afa908115614fc1575f91614f93575b5091614df96020840161385f565b614e0b614e055f6141c7565b91613795565b11614e16575b614cc2565b909193506040929450614e747f0000000000000000000000000000000000000000000000000000000000000000614e6c7f00000000000000000000000000000000000000000000000000000000000000006115a3565b5f1991613219565b614ed75f614ea17f00000000000000000000000000000000000000000000000000000000000000006115a3565b92614ee26320b76e819195614eb96020859a0161385f565b90614ec261458d565b91614ecb610352565b9a8b998a98899761256c565b875260048701614b0b565b03925af1908115614f8e575f80919092614f5e575b509091614f567f0000000000000000000000000000000000000000000000000000000000000000614f477f00000000000000000000000000000000000000000000000000000000000000006115a3565b614f505f611f2a565b91613219565b5f8080614e11565b9050614f81915060403d8111614f87575b614f798183612543565b81019061432b565b5f614ef7565b503d614f6f565b6125b4565b614fb4915060603d8111614fba575b614fac8183612543565b81019061381e565b5f614deb565b503d614fa2565b6125b4565b94955095505050509190614cc6565b909250614ff9915060403d8111615000575b614ff18183612543565b81019061432b565b915f614cb1565b503d614fe7565b615028915060a03d811161502e575b6150208183612543565b810190612b29565b5f614be6565b503d615016565b6125b4565b919091615045613b8b565b5061504f82615845565b8261506261505c5f611f2a565b9161050f565b14615267576150bb7f00000000000000000000000000000000000000000000000000000000000000006150b47f00000000000000000000000000000000000000000000000000000000000000006115a3565b8591613219565b61513f6150e77f00000000000000000000000000000000000000000000000000000000000000006115a3565b60a063238d6579936151187f00000000000000000000000000000000000000000000000000000000000000006115a3565b615134632c3c9157615128610352565b9687948593849361256c565b835260048301611370565b03915afa918215615262575f92615232575b50849361515c61458d565b823b1561522d575f9461518d869261518294615176610352565b998a988997889661256c565b865260048601612c65565b03925af18015615228576151fc575b506151f97f00000000000000000000000000000000000000000000000000000000000000006151ea7f00000000000000000000000000000000000000000000000000000000000000006115a3565b6151f35f611f2a565b91613219565b90565b61521b905f3d8111615221575b6152138183612543565b810190612b85565b5f61519c565b503d615209565b6125b4565b612535565b61525491925060a03d811161525b575b61524c8183612543565b810190612b29565b905f615151565b503d615242565b6125b4565b5050506152735f611f2a565b90565b6152ac6152b3946152a260e09498979561529861010086019a5f870190612bae565b60a0850190610a0c565b60c08301906118c7565b01906118c7565b565b909261534f906152c3613b8b565b506152cd84615845565b6152f67f00000000000000000000000000000000000000000000000000000000000000006115a3565b9060a0638720316d946153287f00000000000000000000000000000000000000000000000000000000000000006115a3565b615344632c3c9157615338610352565b9788948593849361256c565b835260048301611370565b03915afa92831561543b575f9361540b575b50859480918061538161537b6153765f6135d3565b61043e565b9161043e565b145f1461540457505b823b156153ff575f946153bb86926153b0946153a4610352565b998a988997889661256c565b865260048601615276565b03925af180156153fa576153ce575b5090565b6153ed905f3d81116153f3575b6153e58183612543565b810190612b85565b5f6153ca565b503d6153db565b6125b4565b612535565b905061538a565b61542d91935060a03d8111615434575b6154258183612543565b810190612b29565b915f615361565b503d61541b565b6125b4565b61544c615451916117df565b61069f565b90565b61545e9054615440565b90565b60409061548a615491949695939661548060608401985f850190611528565b6020830190611528565b0190610a0c565b565b9061549c613b8b565b506154da7f00000000000000000000000000000000000000000000000000000000000000006154d36154ce6001615454565b61070a565b8491613219565b6154ec6154e76001615454565b61070a565b602063cae270b6917f0000000000000000000000000000000000000000000000000000000000000000906155545f7f00000000000000000000000000000000000000000000000000000000000000009561555f89615548610352565b9889978896879561256c565b855260048501615461565b03925af180156155e65761557b915f916155b8575b5092615c35565b61558e615588849261050f565b9161050f565b1061559557565b61559d610352565b63ba9adc7f60e01b8152806155b4600482016104a7565b0390fd5b6155d9915060203d81116155df575b6155d18183612543565b810190612581565b5f615574565b503d6155c7565b6125b4565b906155f4613b8b565b506156327f000000000000000000000000000000000000000000000000000000000000000061562b6156266001615454565b61070a565b8491613219565b61564461563f6001615454565b61070a565b602063cae270b6917f0000000000000000000000000000000000000000000000000000000000000000906156ac5f7f0000000000000000000000000000000000000000000000000000000000000000956156b7896156a0610352565b9889978896879561256c565b855260048501615461565b03925af1801561573e576156d3915f91615710575b5092615af5565b6156e66156e0849261050f565b9161050f565b106156ed57565b6156f5610352565b63ba9adc7f60e01b81528061570c600482016104a7565b0390fd5b615731915060203d8111615737575b6157298183612543565b810190612581565b5f6156cc565b503d61571f565b6125b4565b61575961575461575f926003611daf565b6117fe565b156103b1565b61576557565b61576d610352565b633993c11360e11b815280615784600482016104a7565b0390fd5b615790611b4f565b50806157ac6157a66157a15f6135d3565b61043e565b9161043e565b145f146157b95750335b90565b6157b6565b6157d0906157ca611b4f565b50615788565b90816157ec6157e66157e15f6135d3565b61043e565b9161043e565b146157fc576157fa82615845565b565b61581e82615808610352565b9182916325abcd9160e11b83526004830161259f565b0390fd5b91602061584392949361583c60408201965f8301906118c7565b01906118c7565b565b8061586061585a6158555f6135d3565b61043e565b9161043e565b1461596c578061588061587a615875306124bc565b61043e565b9161043e565b1415806158b5575b61588f5750565b6158b19061589b610352565b918291633f3779ff60e11b83526004830161259f565b0390fd5b506158df7f00000000000000000000000000000000000000000000000000000000000000006115a3565b60206365e4ad9e91839061590d6158f5306124bc565b94615918615901610352565b9687958694859461256c565b845260048401615822565b03915afa801561596757615934915f91615939575b50156103b1565b615888565b61595a915060203d8111615960575b6159528183612543565b8101906127c9565b5f61592d565b503d615948565b6125b4565b61598e90615978610352565b9182916325abcd9160e11b83526004830161259f565b0390fd5b906159ad92916159a86159a361119a565b6118b3565b6159af565b565b916159bc92919091612754565b565b906159c99291615992565b565b906159e5916159e06159db61119a565b6118b3565b615aaa565b565b6159f0906106e2565b90565b6159fc906159e7565b90565b905090565b615a0f5f80926159ff565b0190565b615a1c90615a04565b90565b60209181520190565b5f7f657468207472616e73666572206661696c656400000000000000000000000000910152565b615a5c6013602092615a1f565b615a6581615a28565b0190565b615a7e9060208101905f818303910152615a4f565b90565b15615a8857565b615a90610352565b62461bcd60e51b815280615aa660048201615a69565b0390fd5b5f615ae792615ac1615abc83946159f3565b612eee565b90615aca610352565b9081615ad581615a13565b03925af1615ae1612900565b50615a81565b565b90615af3916159cb565b565b615afd613b8b565b50615b086005613e99565b615b1a615b145f611f2a565b9161050f565b11615c2757615b71615b50615bb2927f000000000000000000000000000000000000000000000000000000000000000090613d3f565b615b6b615b5b611d2c565b615b656004613e99565b90611f95565b90613d3f565b6020615b9c7f0000000000000000000000000000000000000000000000000000000000000000610e84565b63a035b1fe90615baa610352565b94859261256c565b82528180615bc2600482016104a7565b03915afa918215615c2257615bf192615beb915f91615bf4575b50615be5611d2c565b90613d3f565b90613d88565b90565b615c15915060203d8111615c1b575b615c0d8183612543565b810190612581565b5f615bdc565b503d615c03565b6125b4565b50615c326005613e99565b90565b615c3d613b8b565b50615c486005613e99565b615c5a615c545f611f2a565b9161050f565b11615d6957615ca4906020615c8e7f0000000000000000000000000000000000000000000000000000000000000000610e84565b63a035b1fe90615c9c610352565b94859261256c565b82528180615cb4600482016104a7565b03915afa918215615d6457615d3192615cf992615cd8925f92615d34575b50613d3f565b615cf3615ce3611d2c565b615ced6004613e99565b90611f95565b90613d3f565b615d2b7f0000000000000000000000000000000000000000000000000000000000000000615d25611d2c565b90613d3f565b90613d88565b90565b615d5691925060203d8111615d5d575b615d4e8183612543565b810190612581565b905f615cd2565b503d615d44565b6125b4565b50615d746005613e99565b9056fea264697066735822122008330dca6d4b772e9f0921c6e98bc4862813a2ddd0782283d224dd7e1db37e7e64736f6c6343000815003300000000000000000000000044ac1031d245d965fe5f016da9ba643cd79f95f3000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd0000000000000000000000000c426d174fc88b7a25d59945ab2f7274bf7b4c79000000000000000000000000cd0066ec3f96afe3f6015539d16def2ce648ab770000000000000000000000002fa62f205d6c33071d52c95252630d8b1927edef