0 txs
1 call
constructor
constructor()
functions
approvalNeeded
viewfunction approvalNeeded(uint32 routeId) view returns (address token, address who, uint256 amount)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
previewSell
viewfunction previewSell(uint32 routeId, uint256 amountIn) view returns (uint256)
PSM
viewfunction PSM() view returns (address)
routesCount
viewfunction routesCount() view returns (uint32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
sUSDS_TO_USDS
viewfunction sUSDS_TO_USDS() view returns (uint32)
sUSDS
viewfunction sUSDS() view returns (address)
USDC_TO_USDS
viewfunction USDC_TO_USDS() view returns (uint32)
USDC
viewfunction USDC() view returns (address)
USDS_TO_sUSDS
viewfunction USDS_TO_sUSDS() view returns (uint32)
USDS_TO_USDC
viewfunction USDS_TO_USDC() view returns (uint32)
USDS
viewfunction USDS() view returns (address)
approve
nonpayablefunction approve(address token, address where, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
recover
nonpayablefunction recover(address token, address where, uint256 amount)
recover
nonpayablefunction recover(address token, address where)
recoverETH
nonpayablefunction recoverETH(address where, uint256 amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sell
nonpayablefunction sell(uint32 routeId) returns (uint256)
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)
RouteAdded
event RouteAdded(uint32 routeId, address tokenFrom, address tokenTo)
Swap
event Swap(uint32 routeId, address tokenFrom, address tokenTo, uint256 amountIn, uint256 amountOut)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
RouteNotFound
error RouteNotFound()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnsufficientBalance
error UnsufficientBalance()
UnsupportedChain
error UnsupportedChain()
creation bytecode
0x61014060405234620000a65762000015620005ec565b6200001f620000ac565b611feb62001321823960805181505060a05181505060c05181818161076c015281816119600152611e5a015260e05181818161085401528181611c1a0152611d1a01526101005181818161095301528181611bd201528181611c6201528181611d620152611e1101526101205181818161066701528181611cc90152611daa0152611feb90f35b620000b2565b60405190565b5f80fd5b5f1b90565b90620000cc63ffffffff91620000b6565b9181191691161790565b90565b63ffffffff1690565b90565b620000fe620000f86200010492620000d6565b620000e2565b620000d9565b90565b90565b90620001246200011e6200012c92620000e5565b62000107565b8254620000bb565b9055565b60201b90565b906200014b67ffffffff000000009162000130565b9181191691161790565b90565b620001716200016b620001779262000155565b620000e2565b620000d9565b90565b90620001946200018e6200019c9262000158565b62000107565b825462000136565b9055565b60401b90565b90620001bf6bffffffff000000000000000091620001a0565b9181191691161790565b90565b620001e5620001df620001eb92620001c9565b620000e2565b620000d9565b90565b9062000208620002026200021092620001cc565b62000107565b8254620001a6565b9055565b60601b90565b90620002376fffffffff0000000000000000000000009162000214565b9181191691161790565b90565b6200025d62000257620002639262000241565b620000e2565b620000d9565b90565b90620002806200027a620002889262000244565b62000107565b82546200021a565b9055565b60801b90565b90620002a663ffffffff60801b916200028c565b9181191691161790565b90620002ca620002c4620002d292620000e5565b62000107565b825462000292565b9055565b90565b90565b620002f5620002ef620002fb92620002d9565b620000e2565b620002d6565b90565b5f0190565b60018060a01b031690565b62000327620003216200032d9262000303565b620000e2565b62000303565b90565b6200033b906200030e565b90565b620003499062000330565b90565b620003579062000303565b90565b62000365906200034c565b90565b6200037490516200035a565b90565b62000382906200030e565b90565b620003909062000377565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b90620003bd9062000393565b810190811060018060401b03821117620003d657604052565b6200039d565b60e01b90565b5f80fd5b620003f1906200034c565b90565b620003ff81620003e6565b036200040757565b5f80fd5b905051906200041a82620003f4565b565b90602082820312620004385762000435915f016200040b565b90565b620003e2565b62000448620000ac565b3d5f823e3d90fd5b6200045c9051620003e6565b90565b5f1c90565b63ffffffff1690565b6200047c62000482916200045f565b62000464565b90565b6200049190546200046d565b90565b6200049f90620000d9565b9052565b620004ae9062000377565b90565b620004bc90620004a3565b9052565b604090620004ee620004f69496959396620004e360608401985f85019062000494565b6020830190620004b1565b0190620004b1565b565b60201c90565b6200050d6200051391620004f8565b62000464565b90565b620005229054620004fe565b90565b60401c90565b6200053a620005409162000525565b62000464565b90565b6200054f90546200052b565b90565b60601c90565b620005676200056d9162000552565b62000464565b90565b6200057c905462000558565b90565b90565b6200059b62000595620005a1926200057f565b620000e2565b620000d9565b90565b620005bd620005b7620005c392620000d9565b620000e2565b620000d9565b90565b90620005e0620005da620005e892620005a4565b62000107565b825462000292565b9055565b620005f662000aec565b620006035f60016200010a565b620006106001806200017a565b6200061e60026001620001ee565b6200062c6003600162000266565b620006395f6001620002b0565b46620006526200064b612105620002dc565b91620002d6565b145f1462000a835762000679731601843c5e9bc251a3272907010afa41fa18347e6200033e565b60c052620006b16020620006986200069260c062000368565b62000385565b633e413bee90620006a8620000ac565b938492620003dc565b82528180620006c360048201620002fe565b03915afa90811562000a7d575f9162000a48575b5060e052620007106020620006f7620006f160c062000368565b62000385565b634cf282fb9062000707620000ac565b938492620003dc565b825281806200072260048201620002fe565b03915afa90811562000a42575f9162000a0d575b5061010052620007706020620007576200075160c062000368565b62000385565b6358b8f19c9062000767620000ac565b938492620003dc565b825281806200078260048201620002fe565b03915afa90811562000a07575f91620009d2575b5061012052620007ca620007ab60e062000450565b620007c1620007bb60c062000368565b62000385565b5f199162000e08565b620007fa620007db61010062000450565b620007f1620007eb60c062000368565b62000385565b5f199162000e08565b6200082a6200080b61012062000450565b620008216200081b60c062000368565b62000385565b5f199162000e08565b62000836600162000485565b6200084361010062000450565b6200084f60e062000450565b916200088a7fceebf4e94b032a276abd2b3a01a3a1eece4987d33f23094409f9c99aad5e843f9362000880620000ac565b93849384620004c0565b0390a162000899600162000516565b620008a560e062000450565b620008b261010062000450565b91620008ed7fceebf4e94b032a276abd2b3a01a3a1eece4987d33f23094409f9c99aad5e843f93620008e3620000ac565b93849384620004c0565b0390a1620008fc600162000543565b6200090961010062000450565b6200091661012062000450565b91620009517fceebf4e94b032a276abd2b3a01a3a1eece4987d33f23094409f9c99aad5e843f9362000947620000ac565b93849384620004c0565b0390a162000960600162000570565b6200096d61012062000450565b6200097a61010062000450565b91620009b57fceebf4e94b032a276abd2b3a01a3a1eece4987d33f23094409f9c99aad5e843f93620009ab620000ac565b93849384620004c0565b0390a1620009d0620009c8600462000582565b6001620005c6565b565b620009f8915060203d8111620009ff575b620009ef8183620003b1565b8101906200041c565b5f62000796565b503d620009e3565b6200043e565b62000a33915060203d811162000a3a575b62000a2a8183620003b1565b8101906200041c565b5f62000736565b503d62000a1e565b6200043e565b62000a6e915060203d811162000a75575b62000a658183620003b1565b8101906200041c565b5f620006d7565b503d62000a59565b6200043e565b62000a8d620000ac565b63d21eab3760e01b81528062000aa660048201620002fe565b0390fd5b90565b62000ac662000ac062000acc92620000d6565b620000b6565b62000aaa565b90565b62000ada5f62000aad565b90565b62000ae990516200034c565b90565b730d61c8b6ca9669a36f351de3ae335e9689dd9c5b60805271aeb716a0df7a9a1aad119b772644bc089da860a05262000b3b62000b2862000acf565b62000b34608062000add565b9062000c1b565b5062000b5d62000b4a62000acf565b62000b5660a062000add565b9062000c1b565b5062000b7462000b6c62000acf565b339062000c1b565b50565b5f90565b151590565b62000b8b9062000aaa565b90565b9062000b9a9062000b80565b5f5260205260405f2090565b62000bb19062000377565b90565b9062000bc09062000ba6565b5f5260205260405f2090565b9062000bda60ff91620000b6565b9181191691161790565b62000bef9062000b7b565b90565b90565b9062000c0f62000c0962000c179262000be4565b62000bf2565b825462000bcc565b9055565b62000c2562000b77565b5062000c3e62000c3782849062000d0c565b1562000b7b565b5f1462000cd95762000c6c600162000c665f62000c5d81869062000b8e565b01859062000bb4565b62000bf5565b9062000c7762001311565b9062000cba62000cb362000cac7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9562000b80565b9262000ba6565b9262000ba6565b9262000cc5620000ac565b8062000cd181620002fe565b0390a4600190565b50505f90565b60ff1690565b62000cf462000cfa916200045f565b62000cdf565b90565b62000d09905462000ce5565b90565b62000d3a915f62000d2d62000d349362000d2562000b77565b508262000b8e565b0162000bb4565b62000cfd565b90565b63ffffffff60e01b1690565b62000d6262000d5c62000d6892620000d9565b620003dc565b62000d3d565b90565b62000d76906200034c565b9052565b62000d8590620002d6565b9052565b91602062000dae92949362000da660408201965f83019062000d6b565b019062000d7a565b565b62000dc962000dc362000dcf92620000d6565b620000e2565b620002d6565b90565b62000ddd9062000db0565b9052565b91602062000e0692949362000dfe60408201965f83019062000d6b565b019062000dd2565b565b909162000e5360049162000e4363095ea7b362000e2787939162000d49565b9262000e32620000ac565b958694602086019081520162000d89565b60208201810382520382620003b1565b9062000e6c62000e6582849062001081565b1562000b7b565b62000e77575b505050565b62000ecf600462000ed59462000ec9849162000eb963095ea7b362000e9d5f9162000d49565b9262000ea8620000ac565b968794602086019081520162000de1565b60208201810382520383620003b1565b62000f43565b62000f43565b5f808062000e72565b5190565b62000eed8162000b7b565b0362000ef557565b5f80fd5b9050519062000f088262000ee2565b565b9060208282031262000f265762000f23915f0162000ef9565b90565b620003e2565b919062000f41905f6020850194019062000d6b565b565b9062000f5a9062000f5483620004a3565b6200114a565b62000f658162000ede565b62000f7b62000f745f62000db0565b91620002d6565b1415908162000fc2575b5062000f8e5750565b62000f9d62000fbe91620004a3565b62000fa7620000ac565b918291635274afe760e01b83526004830162000f2c565b0390fd5b62000fed915062000fe690602062000fda8262000ede565b81830101910162000f0a565b1562000b7b565b5f62000f85565b906200100b62001003620000ac565b9283620003b1565b565b60018060401b0381116200102c576200102860209162000393565b0190565b6200039d565b906200104862001042836200100d565b62000ff4565b918252565b606090565b3d5f146200107057620010653d62001032565b903d5f602084013e5b565b6200107a6200104d565b906200106e565b905f80916200108f62000b77565b506200109b84620004a3565b9082602082019151925af1620010b062001052565b81620010ef575b509081620010c4575b5090565b620010d09150620004a3565b3b620010e7620010e05f62000db0565b91620002d6565b115f620010c0565b9050620010fc8162000ede565b620011126200110b5f62000db0565b91620002d6565b1490811562001124575b505f620010b7565b6200114391506020620011378262000ede565b81830101910162000f0a565b5f6200111c565b906200116e916200115a6200104d565b5090620011675f62000db0565b916200117f565b90565b6200117c9062000377565b90565b90916200118b6200104d565b50620011973062001171565b31620011ae620011a783620002d6565b91620002d6565b10620011df575f8091620011dc948491602082019151925af190620011d262001052565b9091909162001213565b90565b6200120f620011ee3062001171565b620011f8620000ac565b91829163cd78605960e01b83526004830162000f2c565b0390fd5b906200122b90620012236200104d565b501562000b7b565b5f14620012395750620012b5565b620012448262000ede565b6200125a620012535f62000db0565b91620002d6565b148062001295575b6200126b575090565b62001291906200127a620000ac565b918291639996b31560e01b83526004830162000f2c565b0390fd5b50803b620012ae620012a75f62000db0565b91620002d6565b1462001262565b620012c08162000ede565b620012d6620012cf5f62000db0565b91620002d6565b115f14620012e657805190602001fd5b620012f0620000ac565b630a12f52160e11b8152806200130960048201620002fe565b0390fd5b5f90565b6200131b6200130d565b50339056fe60806040526004361015610013575b610b9c565b61001d5f3561018c565b806301ffc9a7146101875780630cfe7258146101825780631ec82cb81461017d578063248a9ca3146101785780632a9f8a91146101735780632f2ff15d1461016e57806336568abe146101695780633e0c0629146101645780634f5a19df1461015f5780634ffd23a71461015a5780635dac9ed714610155578063648bf7741461015057806389a302711461014b57806391d1485414610146578063a217fddf14610141578063c8ef95ae1461013c578063cd33f1f514610137578063d2a22aca14610132578063d547741f1461012d578063e1f21c6714610128578063ec6b635614610123578063fd3269211461011e5763fe050a030361000e57610b67565b610b23565b610adb565b610a68565b610a34565b6109ff565b6109ba565b610975565b61091c565b6108ab565b610876565b61081e565b6107bc565b610735565b6106e2565b610631565b6105a1565b61056d565b61050b565b610462565b6103c8565b6102ea565b610214565b60e01c90565b60405190565b5f80fd5b5f80fd5b63ffffffff60e01b1690565b6101b5816101a0565b036101bc57565b5f80fd5b905035906101cd826101ac565b565b906020828203126101e8576101e5915f016101c0565b90565b61019c565b151590565b6101fb906101ed565b9052565b9190610212905f602085019401906101f2565b565b346102445761024061022f61022a3660046101cf565b610ba4565b610237610192565b918291826101ff565b0390f35b610198565b63ffffffff1690565b61025b81610249565b0361026257565b5f80fd5b9050359061027382610252565b565b90565b61028181610275565b0361028857565b5f80fd5b9050359061029982610278565b565b91906040838203126102c357806102b76102c0925f8601610266565b9360200161028c565b90565b61019c565b6102d190610275565b9052565b91906102e8905f602085019401906102c8565b565b3461031b5761031761030661030036600461029b565b90611e33565b61030e610192565b918291826102d5565b0390f35b610198565b60018060a01b031690565b61033490610320565b90565b6103409061032b565b90565b61034c81610337565b0361035357565b5f80fd5b9050359061036482610343565b565b61036f8161032b565b0361037657565b5f80fd5b9050359061038782610366565b565b90916060828403126103be576103bb6103a4845f8501610357565b936103b2816020860161037a565b9360400161028c565b90565b61019c565b5f0190565b346103f7576103e16103db366004610389565b9161115b565b6103e9610192565b806103f3816103c3565b0390f35b610198565b90565b610408816103fc565b0361040f57565b5f80fd5b90503590610420826103ff565b565b9060208282031261043b57610438915f01610413565b90565b61019c565b610449906103fc565b9052565b9190610460905f60208501940190610440565b565b346104925761048e61047d610478366004610422565b610ca5565b610485610192565b9182918261044d565b0390f35b610198565b5f9103126104a157565b61019c565b1c90565b63ffffffff1690565b6104c39060086104c893026104a6565b6104aa565b90565b906104d691546104b3565b90565b6104e66001600c906104cb565b90565b6104f290610249565b9052565b9190610509905f602085019401906104e9565b565b3461053b5761051b366004610497565b6105376105266104d9565b61052e610192565b918291826104f6565b0390f35b610198565b9190604083820312610568578061055c610565925f8601610413565b9360200161037a565b90565b61019c565b3461059c57610586610580366004610540565b90610cf0565b61058e610192565b80610598816103c3565b0390f35b610198565b346105d0576105ba6105b4366004610540565b90610dab565b6105c2610192565b806105cc816103c3565b0390f35b610198565b6105de90610320565b90565b6105ea816105d5565b036105f157565b5f80fd5b90503590610602826105e1565b565b919060408382031261062c5780610620610629925f86016105f5565b9360200161028c565b90565b61019c565b346106605761064a610644366004610604565b90611648565b610652610192565b8061065c816103c3565b0390f35b610198565b7f000000000000000000000000000000000000000000000000000000000000000090565b90565b6106a061069b6106a592610320565b610689565b610320565b90565b6106b19061068c565b90565b6106bd906106a8565b90565b6106c9906106b4565b9052565b91906106e0905f602085019401906106c0565b565b34610712576106f2366004610497565b61070e6106fd610665565b610705610192565b918291826106cd565b0390f35b610198565b906020828203126107305761072d915f01610266565b90565b61019c565b346107655761076161075061074b366004610717565b6118de565b610758610192565b918291826102d5565b0390f35b610198565b7f000000000000000000000000000000000000000000000000000000000000000090565b610797906106a8565b90565b6107a39061078e565b9052565b91906107ba905f6020850194019061079a565b565b346107ec576107cc366004610497565b6107e86107d761076a565b6107df610192565b918291826107a7565b0390f35b610198565b9190604083820312610819578061080d610816925f8601610357565b9360200161037a565b90565b61019c565b3461084d576108376108313660046107f1565b906115a4565b61083f610192565b80610849816103c3565b0390f35b610198565b7f000000000000000000000000000000000000000000000000000000000000000090565b346108a657610886366004610497565b6108a2610891610852565b610899610192565b918291826106cd565b0390f35b610198565b346108dc576108d86108c76108c1366004610540565b90610c54565b6108cf610192565b918291826101ff565b0390f35b610198565b90565b5f1b90565b6108fd6108f8610902926108e1565b6108e4565b6103fc565b90565b61090e5f6108e9565b90565b610919610905565b90565b3461094c5761092c366004610497565b610948610937610911565b61093f610192565b9182918261044d565b0390f35b610198565b7f000000000000000000000000000000000000000000000000000000000000000090565b346109a557610985366004610497565b6109a1610990610951565b610998610192565b918291826106cd565b0390f35b610198565b6109b760016008906104cb565b90565b346109ea576109ca366004610497565b6109e66109d56109aa565b6109dd610192565b918291826104f6565b0390f35b610198565b6109fc60016004906104cb565b90565b34610a2f57610a0f366004610497565b610a2b610a1a6109ef565b610a22610192565b918291826104f6565b0390f35b610198565b34610a6357610a4d610a47366004610540565b90610d9f565b610a55610192565b80610a5f816103c3565b0390f35b610198565b34610a9757610a81610a7b366004610389565b91611680565b610a89610192565b80610a93816103c3565b0390f35b610198565b610aa59061032b565b9052565b604090610ad2610ad99496959396610ac860608401985f8501906106c0565b6020830190610a9c565b01906102c8565b565b34610b0e57610b0a610af6610af1366004610717565b611f01565b610b01939193610192565b93849384610aa9565b0390f35b610198565b610b2060016010906104cb565b90565b34610b5357610b33366004610497565b610b4f610b3e610b13565b610b46610192565b918291826104f6565b0390f35b610198565b610b6460015f906104cb565b90565b34610b9757610b77366004610497565b610b93610b82610b58565b610b8a610192565b918291826104f6565b0390f35b610198565b5f80fd5b5f90565b610bac610ba0565b5080610bc7610bc1637965db0b60e01b6101a0565b916101a0565b14908115610bd4575b5090565b610bde9150610f9c565b5f610bd0565b610bed906103fc565b90565b90610bfa90610be4565b5f5260205260405f2090565b610c0f906106a8565b90565b90610c1c90610c06565b5f5260205260405f2090565b5f1c90565b60ff1690565b610c3f610c4491610c28565b610c2d565b90565b610c519054610c33565b90565b610c7a915f610c6f610c7593610c68610ba0565b5082610bf0565b01610c12565b610c47565b90565b5f90565b90565b610c90610c9591610c28565b610c81565b90565b610ca29054610c84565b90565b6001610cbd610cc392610cb6610c7d565b505f610bf0565b01610c98565b90565b90610ce191610cdc610cd782610ca5565b610cfc565b610ce3565b565b90610ced91610e3f565b50565b90610cfa91610cc6565b565b610d0e90610d08610f8f565b90610d33565b565b916020610d31929493610d2a60408201965f830190610a9c565b0190610440565b565b90610d48610d42838390610c54565b156101ed565b610d50575050565b610d71610d5b610192565b92839263e2517d3f60e01b845260048401610d10565b0390fd5b90610d9091610d8b610d8682610ca5565b610cfc565b610d92565b565b90610d9c91610eea565b50565b90610da991610d75565b565b9080610dc6610dc0610dbb610f8f565b61032b565b9161032b565b03610dd757610dd491610eea565b50565b610ddf610192565b63334bd91960e11b815280610df6600482016103c3565b0390fd5b90610e0660ff916108e4565b9181191691161790565b610e19906101ed565b90565b90565b90610e34610e2f610e3b92610e10565b610e1c565b8254610dfa565b9055565b610e47610ba0565b50610e5c610e56828490610c54565b156101ed565b5f14610ee457610e836001610e7e5f610e76818690610bf0565b018590610c12565b610e1f565b90610e8c610f8f565b90610ec9610ec3610ebd7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d95610be4565b92610c06565b92610c06565b92610ed2610192565b80610edc816103c3565b0390a4600190565b50505f90565b610ef2610ba0565b50610efe818390610c54565b5f14610f8557610f245f610f1f5f610f17818690610bf0565b018590610c12565b610e1f565b90610f2d610f8f565b90610f6a610f64610f5e7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b95610be4565b92610c06565b92610c06565b92610f73610192565b80610f7d816103c3565b0390a4600190565b50505f90565b5f90565b610f97610f8b565b503390565b610fa4610ba0565b50610fbe610fb86301ffc9a760e01b6101a0565b916101a0565b1490565b90610fdd9291610fd8610fd3610905565b610cfc565b61108a565b565b610fe8906106a8565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9061101390610feb565b810190811067ffffffffffffffff82111761102d57604052565b610ff5565b60e01b90565b9050519061104582610278565b565b906020828203126110605761105d915f01611038565b90565b61019c565b9190611078905f60208501940190610a9c565b565b611082610192565b3d5f823e3d90fd5b91806110cc602061109a866106b4565b6370a08231906110c16110ac30610fdf565b926110b5610192565b95869485938493611032565b835260048301611065565b03915afa908115611156576110f2916110ec915f91611128575b50610275565b91610275565b1161110557611103929190916111a7565b565b61110d610192565b639a5ce56160e01b815280611124600482016103c3565b0390fd5b611149915060203d811161114f575b6111418183611009565b810190611047565b5f6110e6565b503d611137565b61107a565b906111669291610fc2565b565b61117c61117761118192610249565b611032565b6101a0565b90565b9160206111a592949361119e60408201965f830190610a9c565b01906102c8565b565b906111ee6111f3936111df600494936111c663a9059cbb919391611168565b926111cf610192565b9687946020860190815201611184565b60208201810382520383611009565b611256565b565b5190565b61120d611208611212926108e1565b610689565b610275565b90565b61121e816101ed565b0361122557565b5f80fd5b9050519061123682611215565b565b906020828203126112515761124e915f01611229565b90565b61019c565b9061126990611264836106b4565b6112f3565b611272816111f5565b61128461127e5f6111f9565b91610275565b141590816112c3575b506112955750565b6112a16112bf916106b4565b6112a9610192565b918291635274afe760e01b835260048301611065565b0390fd5b6112e891506112e29060206112d7826111f5565b818301019101611238565b156101ed565b5f61128d565b606090565b90611311916113006112ee565b509061130b5f6111f9565b91611398565b90565b61131d906106a8565b90565b9061133361132c610192565b9283611009565b565b67ffffffffffffffff81116113535761134f602091610feb565b0190565b610ff5565b9061136a61136583611335565b611320565b918252565b3d5f1461138a5761137f3d611358565b903d5f602084013e5b565b6113926112ee565b90611388565b90916113a26112ee565b506113ac30611314565b316113bf6113b983610275565b91610275565b106113eb575f80916113e8948491602082019151925af1906113df61136f565b90919091611419565b90565b6114156113f730611314565b6113ff610192565b91829163cd78605960e01b835260048301611065565b0390fd5b9061142d906114266112ee565b50156101ed565b5f1461143957506114a4565b611442826111f5565b61145461144e5f6111f9565b91610275565b1480611489575b611463575090565b6114859061146f610192565b918291639996b31560e01b835260048301611065565b0390fd5b50803b61149e6114985f6111f9565b91610275565b1461145b565b6114ad816111f5565b6114bf6114b95f6111f9565b91610275565b115f146114ce57805190602001fd5b6114d6610192565b630a12f52160e11b8152806114ed600482016103c3565b0390fd5b9061150b91611506611501610905565b610cfc565b61150d565b565b9061155191602061151f8293926106b4565b6370a082319061154661153130610fdf565b9261153a610192565b97889485938493611032565b835260048301611065565b03915afa91821561159f5761156d935f9361156f575b506111a7565b565b61159191935060203d8111611598575b6115898183611009565b810190611047565b915f611567565b503d61157f565b61107a565b906115ae916114f1565b565b906115ca916115c56115c0610905565b610cfc565b6115d8565b565b6115d5906106a8565b90565b816115f46115ee6115e830610fdf565b31610275565b91610275565b11611625575f80809361160782946115cc565b82821561161c575bf11561161757565b61107a565b506108fc61160f565b61162d610192565b639a5ce56160e01b815280611644600482016103c3565b0390fd5b90611652916115b0565b565b9061166f929161166a611665610905565b610cfc565b611671565b565b9161167e929190916116bd565b565b9061168b9291611654565b565b611696906111f9565b9052565b9160206116bb9294936116b460408201965f830190610a9c565b019061168d565b565b90916117006004916116f163095ea7b36116d8879391611168565b926116e1610192565b9586946020860190815201611184565b60208201810382520382611009565b9061171561170f828490611779565b156101ed565b61171f575b505050565b61176c600461177194611767849161175863095ea7b361173f5f91611168565b92611748610192565b968794602086019081520161169a565b60208201810382520383611009565b611256565b611256565b5f808061171a565b905f8091611785610ba0565b5061178f846106b4565b9082602082019151925af16117a261136f565b816117d8575b5090816117b4575b5090565b6117be91506106b4565b3b6117d16117cb5f6111f9565b91610275565b115f6117b0565b90506117e3816111f5565b6117f56117ef5f6111f9565b91610275565b14908115611805575b505f6117a8565b61182091506020611815826111f5565b818301019101611238565b5f6117fe565b5f90565b611833906106a8565b90565b919461187e6118889298979561187460a09661186a61188f9a61186060c08a019e5f8b0190610a9c565b6020890190610a9c565b60408701906102c8565b606085019061168d565b6080830190610a9c565b019061168d565b565b909594926118dc946118cb6118d5926118c16080966118b760a088019c5f8901906104e9565b60208701906106c0565b60408501906106c0565b60608301906102c8565b01906102c8565b565b6118e6611826565b506118f081611ba3565b6118f982611ceb565b6119316020611907846106b4565b6370a0823190611926339261191a610192565b95869485938493611032565b835260048301611065565b03915afa908115611a82575f91611a54575b509161195b81336119533061182a565b908692611ab9565b6119847f000000000000000000000000000000000000000000000000000000000000000061078e565b6020631a019e3791611995846106b4565b906119c15f6119a3886106b4565b956119cc8a83339085926119b5610192565b9b8c9a8b998a98611032565b885260048801611836565b03925af18015611a4f57611a1b915f91611a21575b509491929385907f55bfd5d942d6bf4625e4e4a0668cba8a92ce13b708a53200adc8e2ba91954ecb95611a12610192565b95869586611891565b0390a190565b611a42915060203d8111611a48575b611a3a8183611009565b810190611047565b5f6119e1565b503d611a30565b61107a565b611a75915060203d8111611a7b575b611a6d8183611009565b810190611047565b5f611943565b503d611a63565b61107a565b604090611ab0611ab79496959396611aa660608401985f850190610a9c565b6020830190610a9c565b01906102c8565b565b600492611af3611b079593611b029394611ada6323b872dd92949192611168565b93611ae3610192565b9788956020870190815201611a87565b60208201810382520383611009565b611256565b565b5f90565b611b19611b1e91610c28565b6104aa565b90565b611b2b9054611b0d565b90565b60201c90565b611b40611b4591611b2e565b6104aa565b90565b611b529054611b34565b90565b60401c90565b611b67611b6c91611b55565b6104aa565b90565b611b799054611b5b565b90565b60601c90565b611b8e611b9391611b7c565b6104aa565b90565b611ba09054611b82565b90565b611bab611b09565b5080611bc8611bc2611bbd6001611b21565b610249565b91610249565b145f14611bf457507f000000000000000000000000000000000000000000000000000000000000000090565b80611c10611c0a611c056001611b48565b610249565b91610249565b145f14611c3c57507f000000000000000000000000000000000000000000000000000000000000000090565b80611c58611c52611c4d6001611b6f565b610249565b91610249565b145f14611c8457507f000000000000000000000000000000000000000000000000000000000000000090565b611c9f611c99611c946001611b96565b610249565b91610249565b14611cc757611cac610192565b6302d703d160e61b815280611cc3600482016103c3565b0390fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b611cf3611b09565b5080611d10611d0a611d056001611b21565b610249565b91610249565b145f14611d3c57507f000000000000000000000000000000000000000000000000000000000000000090565b80611d58611d52611d4d6001611b48565b610249565b91610249565b145f14611d8457507f000000000000000000000000000000000000000000000000000000000000000090565b80611da0611d9a611d956001611b6f565b610249565b91610249565b145f14611dcc57507f000000000000000000000000000000000000000000000000000000000000000090565b611de7611de1611ddc6001611b96565b610249565b91610249565b14611e0f57611df4610192565b6302d703d160e61b815280611e0b600482016103c3565b0390fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b602090611e3e611826565b50611e51611e4b82611ba3565b91611ceb565b90611ead611e7e7f000000000000000000000000000000000000000000000000000000000000000061078e565b91611eb8611e98611e9262d8088a936106b4565b956106b4565b96611ea1610192565b97889687958695611032565b855260048501611a87565b03915afa908115611efc575f91611ece575b5090565b611eef915060203d8111611ef5575b611ee78183611009565b810190611047565b5f611eca565b503d611edd565b61107a565b611f2590611f0d611b09565b50611f16610f8b565b50611f1f611826565b50611ba3565b908190611f696020611f3f611f393061182a565b956106b4565b6370a0823190611f5e3392611f52610192565b95869485938493611032565b835260048301611065565b03915afa908115611fb0575f91611f82575b5091929190565b611fa3915060203d8111611fa9575b611f9b8183611009565b810190611047565b5f611f7b565b503d611f91565b61107a56fea2646970667358221220e58e1a0d85967194647d68e6a9bfe8f630c4dbaeea3dcdb40b5e47edfc66441064736f6c63430008150033