From 48a642537b66fea2e5222086d72d65635d7fecc9 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Fri, 1 Mar 2024 22:58:46 +0530 Subject: [PATCH 01/31] add:starkgate contracts --- .idea/.gitignore | 8 + .idea/modules.xml | 8 + .idea/vcs.xml | 10 + .idea/zaun.iml | 13 + crates/sandbox/artifacts/Dai.json | 275 +++ .../sandbox/artifacts/StarkgateManager.json | 643 ++++++ .../sandbox/artifacts/StarkgateRegistry.json | 630 ++++++ .../sandbox/artifacts/StarknetEthBridge.json | 1858 +++++++++++++++++ .../artifacts/StarknetTokenBridge.json | 1301 ++++++++++++ crates/sandbox/src/unsafe_proxy.rs | 72 +- .../src/clients/eth_bridge.rs | 35 + .../src/clients/mod.rs | 4 + .../src/clients/token_bridge.rs | 61 + .../src/interfaces/dai.rs | 8 + .../src/interfaces/eth_bridge.rs | 49 + .../src/interfaces/governance.rs | 14 +- .../src/interfaces/manager.rs | 97 + .../src/interfaces/mod.rs | 10 + .../src/interfaces/registry.rs | 85 + .../src/interfaces/token_bridge.rs | 199 ++ 20 files changed, 5364 insertions(+), 16 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/zaun.iml create mode 100644 crates/sandbox/artifacts/Dai.json create mode 100644 crates/sandbox/artifacts/StarkgateManager.json create mode 100644 crates/sandbox/artifacts/StarkgateRegistry.json create mode 100644 crates/sandbox/artifacts/StarknetEthBridge.json create mode 100644 crates/sandbox/artifacts/StarknetTokenBridge.json create mode 100644 crates/starknet-core-contract-client/src/clients/eth_bridge.rs create mode 100644 crates/starknet-core-contract-client/src/clients/token_bridge.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/dai.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/manager.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/registry.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/token_bridge.rs diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f837c17 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..bc51efb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/zaun.iml b/.idea/zaun.iml new file mode 100644 index 0000000..556bb8c --- /dev/null +++ b/.idea/zaun.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/crates/sandbox/artifacts/Dai.json b/crates/sandbox/artifacts/Dai.json new file mode 100644 index 0000000..72e50e7 --- /dev/null +++ b/crates/sandbox/artifacts/Dai.json @@ -0,0 +1,275 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": null +} \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarkgateManager.json b/crates/sandbox/artifacts/StarkgateManager.json new file mode 100644 index 0000000..ff0af6e --- /dev/null +++ b/crates/sandbox/artifacts/StarkgateManager.json @@ -0,0 +1,643 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "bridge", + "type": "address" + } + ], + "name": "ExistingBridgeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "TokenBlocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "TokenDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "TokenEnrolled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "bridge_", + "type": "address" + } + ], + "name": "addExistingBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "blockToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "deactivateToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "enrollTokenBridge", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppRoleAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isGovernanceAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAgent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isTokenAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isUpgradeGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" +} \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarkgateRegistry.json b/crates/sandbox/artifacts/StarkgateRegistry.json new file mode 100644 index 0000000..c38b4b9 --- /dev/null +++ b/crates/sandbox/artifacts/StarkgateRegistry.json @@ -0,0 +1,630 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "bridge", + "type": "address" + } + ], + "name": "TokenEnlisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "bridge", + "type": "address" + } + ], + "name": "TokenSelfRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "TokenStatusBlocked", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "blockToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "bridge", + "type": "address" + } + ], + "name": "enlistToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getBridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getWithdrawalBridges", + "outputs": [ + { + "internalType": "address[]", + "name": "bridges", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppRoleAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isGovernanceAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAgent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isTokenAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isUpgradeGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "selfRemove", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" +} \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarknetEthBridge.json b/crates/sandbox/artifacts/StarknetEthBridge.json new file mode 100644 index 0000000..eb15e5c --- /dev/null +++ b/crates/sandbox/artifacts/StarknetEthBridge.json @@ -0,0 +1,1858 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "LogBridgeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "LogDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "LogDepositCancelRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "LogDepositReclaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "acceptedGovernor", + "type": "address" + } + ], + "name": "LogNewGovernorAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "nominatedGovernor", + "type": "address" + } + ], + "name": "LogNominatedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogNominationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "removedGovernor", + "type": "address" + } + ], + "name": "LogRemovedGovernor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetL2TokenBridge", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "LogSetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "LogWithdrawal", + "type": "event" + }, + { + "inputs": [], + "name": "acceptGovernance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancelNomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositCancelRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositReclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isActive", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTotalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "name": "nominateNewGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "name": "removeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenBridge_", + "type": "uint256" + } + ], + "name": "setL2TokenBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxDeposit_", + "type": "uint256" + } + ], + "name": "setMaxDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"LogBridgeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetL2TokenBridge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxTotalBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTotalBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"nominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"removeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2TokenBridge_\",\"type\":\"uint256\"}],\"name\":\"setL2TokenBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxDeposit_\",\"type\":\"uint256\"}],\"name\":\"setMaxDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTotalBalance_\",\"type\":\"uint256\"}],\"name\":\"setMaxTotalBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"identify()\":{\"notice\":\"Returns a string that identifies the contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":\"StarknetEthBridge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Addresses.sol\":{\"keccak256\":\"0x56bef89f8ea31235d57f914df9ff4b3a6bc1d53b30bf115c5fca1819b81547dc\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f82719c1528743d5628a680f4d4100fc87911172c2652acb3fff168030af3311\",\"dweb:/ipfs/QmdWKKQio8GKTjDwcCBjAJV55k3yzqkjTjVku4pxXAKdb2\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/BlockDirectCall.sol\":{\"keccak256\":\"0x8085363ea620123229c197af4927c2652c95b5eca5faa4a60f3a92ad8a088766\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://769a98556532f84b9b6b8dab46d7ea828d643ada2330c07e990832fcb465fb6e\",\"dweb:/ipfs/QmYpqmuZPcRFzB23sMRrqYTPTy4pHabNU9Rk6S1ikrvfRj\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/CairoConstants.sol\":{\"keccak256\":\"0x86600572702f4e5ace6de96d2945c80d1a788e93fccb7cd11a8d253fc335a9d6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1329f4f98cd64d0ebe38f04889174318e991b0db9a7369af07b6f26a938eedd8\",\"dweb:/ipfs/QmTtpFXF3TLFuDpzR9YhNFGysAzH625ffCXgmJNgawCEuL\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ContractInitializer.sol\":{\"keccak256\":\"0xe46eaaf290e13b86cc602a44cd9850001b8e29b57bb36b8666764b3afe8a2d22\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://a52dac66b9b861a7fbfe8437bd37b2c4c99014e197c5f3148286276c35572c8a\",\"dweb:/ipfs/QmXGY6Prs8dTM7qEUFYz57p5YaD1ZUJP5UA5Adtr1rufHz\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/GenericGovernance.sol\":{\"keccak256\":\"0x9e12b5127f8633966fe28226eb7a21298913c5b2d60e1b56e69427a5080afa76\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cfac1fc7f8644f9da51415286a7999ec0cf25429380aebaded1cbcf99e914ff5\",\"dweb:/ipfs/QmNZrpmPnLYAdFQ48baa1newh2RzNvcyNZtLKge1zp2DgC\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Governance.sol\":{\"keccak256\":\"0xf93e53aa3e40c1463e5f98be40520726df4a36176eb24f9fc3eaddba7f5c985e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fedbc0a37d778d4994d88fb30141df67fa0af164016209cd9a06925ec5832944\",\"dweb:/ipfs/QmZGUnQ2QwXEnigoxgeY3XTT9Beq25Qqc2JChDZB421Z41\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessaging.sol\":{\"keccak256\":\"0x981baa05e8a64cc2b53da88a9ce344c781a2e9ca0980745aaf6ea51d12f27cf6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1e3c99103ebf2de8b8b2e37a3b2b3a2f2e1e13692a766140c7175526f0bd6e10\",\"dweb:/ipfs/QmWj9ywqb2JGtW5XtX57rqtKVAsgZvGbYxwFR47GujTAQy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0x5a3dda2ef57138250d9010c3aa48cb35e43418a2e843d681bbde4cd0917ed893\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://550432d6508c24688eb3ac2be8c716ba8a05a007f4b97e820104fabb67bba549\",\"dweb:/ipfs/QmPD6y5qSjf6iawxhUwF6r7D3BKtAtkSD8YcuSzi9ytVnt\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Identity.sol\":{\"keccak256\":\"0x4a9033b559baed9f8910ddd48d967ef68f01de5bf4ffa07125fb86aa1af2c28f\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://8b70c786ce4c318b685cd6232849fa7a36708ad07f465d406fcae1999fe88f94\",\"dweb:/ipfs/QmY4pA49TFURw1DJyZPWHyCZsrekAGFmPqxEYrUk5gbP8P\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/MGovernance.sol\":{\"keccak256\":\"0x5e1a7cf5656b902b825d3b813d922e8f5c40d0de83b4738ff4d81e783a6bd0f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2e41eef74234d5181c03169e38ec86fb8aa65afb83836869529e730906612303\",\"dweb:/ipfs/QmX41hrgYcbt6zWe8Zwg29SW5zQ8CEhQH22iYuh8RgUMqb\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/NamedStorage.sol\":{\"keccak256\":\"0x3f54ae3a92bad7691776ea029c35fa1cc564cf2de96bba6450be45f7890323f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f2523837a413a8d887b3ce83303dfbe02aa871f2ba8785e5bf591ce512e1d5b6\",\"dweb:/ipfs/Qmb5FMHMQdqFiQ62adiJ2Vjtviwe1WDRgDsVyb95MaXubS\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ProxySupport.sol\":{\"keccak256\":\"0x78588a99a0b092d6cd6a0ece5d81c08633c4de37ad99da365961f5bc2a9850c5\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://ff6a5b336528406297c1c5a8ee0a597ac508ddcd73d7f8d1c3e20671832ce448\",\"dweb:/ipfs/QmY8Xd1GnPjNtRLzaGWwyDtn3L2Q6JcpaRGfV4bru9vBwp\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetBridgeConstants.sol\":{\"keccak256\":\"0x668fb7f7d5b2fedef2a29c0ae14802e50d29442e5cf14e351bae396e56bfcdda\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://53120df95cdd3ca1be40c5e2b650c3a23f7d3ec99e9201b6df0e6f1c5da10e16\",\"dweb:/ipfs/QmUzUUi2sV5jLiwMwDCGYR41w335nMhANt8dmRnFrFyb4W\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":{\"keccak256\":\"0x0e1c10570337f95ec552a59c3986ac5e4039d4a5fda899907f2524c74fd17436\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://98051c44b9cfc161ab8229d8673285da92e54e349d45374be02cf76a0f3af443\",\"dweb:/ipfs/QmaRLYypBCdsHYWPJQEhb6aDvA9oqHAkvXw5iCumDHrUZy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenBridge.sol\":{\"keccak256\":\"0xc64d016372db61e53508c11f37c42042e095b90abde99b40ba36d24b1db2a9f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://052498f1f0782950b0bcc1e4b067be24e557ba8d78565f1949b22f5bea640da5\",\"dweb:/ipfs/QmcJUYH3o8nWGD7FYbDZKcr9ewM9gG6JfHHV1ttHPY6GPw\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenStorage.sol\":{\"keccak256\":\"0x3075caf8bbf51c5fca463d422aadd40133cecd4023779f38b412fac344ad2f91\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f4132da9136a7382fff75c30e135dd0605fe0536e4c5ec2588420742f8f1e77\",\"dweb:/ipfs/QmdetUQQrnNDpfdJnwrTz99DnSYp8aiYDE3DDPPwY73YzN\"]}},\"version\":1}", + "bytecode": "60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f", + "deployedBytecode": "60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033", + "sourceMap": "725:1217:13:-:0;;;;;;;;;;;;;2102:14:14;;;;;;;;;;;;;;;;;902:17:4;885:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;875:46;;;;;;;;848:73;;;;1085:4:1;1069:21;;;;;;875:46:4;;-1:-1:-1;1085:4:1;-1:-1:-1;725:1217:13;;-1:-1:-1;725:1217:13;;-1:-1:-1;;725:1217:13;;;;;", + "deployedSourceMap": "725:1217:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6897:457:14;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6897:457:14;;;;;;-1:-1:-1;;;;;6897:457:14;;:::i;:::-;;1669:73:4;;;;;;;;;;;;;:::i;1859:129:15:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2168:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1590:73:4;;;;;;;;;;;;;:::i;7360:88:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7360:88:14;;:::i;1351:86:11:-;;;;;;;;;;;;;:::i;2059:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2059:1028:11;;-1:-1:-1;2059:1028:11;-1:-1:-1;2059:1028:11;:::i;8126:506:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8126:506:14;;;;;;;;;;;;:::i;1735:118:15:-;;;;;;;;;;;;;:::i;4306:366:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4306:366:14;;:::i;1356:109:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1356:109:4;-1:-1:-1;;;;;1356:109:4;;:::i;4968:182:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4968:182:14;;:::i;8638:468::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8638:468:14;;;;;;;;;;;;:::i;1498:103:13:-;;;;;;;;;;;;;;;;-1:-1:-1;1498:103:13;;:::i;5156:152:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5156:152:14;;:::i;923:507:13:-;;;;;;;;;;;;;;;;-1:-1:-1;923:507:13;;;;;;;:::i;1246:104:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1246:104:4;-1:-1:-1;;;;;1246:104:4;;:::i;1813:127:13:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:113:4;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1471:113:4;-1:-1:-1;;;;;1471:113:4;;:::i;6897:457:14:-;-1:-1:-1;;;;;7030:25:14;;7022:55;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;;;;7221:33;7236:6;7244:9;7221:14;:33::i;:::-;7264:35;7281:6;7289:9;7264:16;:35::i;:::-;7315:32;;;;;;;;-1:-1:-1;;;;;7315:32:14;;;;;;;;;;;;;6897:457;;:::o;1669:73:4:-;1716:19;:17;:19::i;:::-;1669:73::o;1859:129:15:-;1907:7;1933:48;1959:21;;;;;;;;;;;;;;;;;1933:25;:48::i;:::-;1926:55;;1859:129;;:::o;2168:118::-;2209:4;2232:47;2258:20;;;;;;;;;;;;;;;;;2232:25;:47::i;1590:73:4:-;1637:19;:17;:19::i;7360:88:14:-;7413:28;7422:6;7430:10;7413:8;:28::i;:::-;7360:88;:::o;1351:86:11:-;1402:4;1351:86;:::o;2059:1028::-;1150:5:1;-1:-1:-1;;;;;1150:22:1;1167:4;1150:22;;1142:57;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;;;;2137:17:11::1;2162:19;:17;:19::i;:::-;2157:2;:24:::0;;::::1;::::0;-1:-1:-1;2218:14:11;::::1;2250:31:::0;;::::1;;2242:63;;;::::0;;-1:-1:-1;;;2242:63:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2242:63:11;;;;;;;;;;;;;::::1;;2315:18;2347:32;2362:16:::0;2352:9;2347:4;;:32:::1;:::i;:::-;2336:55;;;;;;;::::0;::::1;;-1:-1:-1::0;2336:55:11::1;-1:-1:-1::0;;;;;2336:55:11::1;::::0;-1:-1:-1;2402:35:11::1;;2440:16;2446:9:::0;2402:35;2440:4;;:16:::1;:::i;:::-;2402:54;;;;2467:49;2495:20;;2467:27;:49::i;:::-;2527:23;;2553;:4:::0;2558:16;2553:4;;:23:::1;:::i;:::-;2527:49:::0;;-1:-1:-1;2527:49:11;-1:-1:-1;;;;;;2671:26:11;::::1;::::0;2667:122:::1;;2713:45;2737:10;2749:8;;2713:23;:45::i;:::-;2772:7;;;;;;;;;2667:122;2803:15;:13;:15::i;:::-;2799:282;;;2842:20:::0;;2834:53:::1;;;::::0;;-1:-1:-1;;;2834:53:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2834:53:11;;;;;;;;;;;;;::::1;;2799:282;;;2967:26;2984:8;;2967:16;:26::i;:::-;3007:33;3031:8;;3007:23;:33::i;:::-;3054:16;:14;:16::i;:::-;1209:1:1;;;;;;;;2059:1028:11::0;;:::o;8126:506:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8272:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8289:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8289:50:14::2;;8353:15;:13;:15::i;:::-;795:76:12;8412:42:14;8434:6;8442:11;8412:21;:42::i;:::-;8468:5;8289:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;8562:63:14::2;::::0;;;;;8289:194:::2;8562:63:::0;::::2;::::0;;;;;8606:11;;8586:10:::2;::::0;8562:63:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8126:506:::0;;;:::o;1735:118:15:-;1778:7;1804:42;1830:15;;;;;;;;;;;;;;;;;1804:25;:42::i;4306:366:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4398:15:14::1;:13;:15::i;:::-;4390:52;;;::::0;;-1:-1:-1;;;4390:52:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4460:32;4477:14;4460:16;:32::i;:::-;4452:68;;;::::0;;-1:-1:-1;;;4452:68:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4452:68:14;;;;;;;;;;;;;::::1;;4530:29;4544:14;4530:13;:29::i;:::-;4569:11;:9;:11::i;:::-;4595:35;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;4645:20;::::0;::::1;::::0;;;::::1;4306:366:::0;:::o;1356:109:4:-;1425:33;1446:11;1425:20;:33::i;4968:182:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5061:39:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5110:33;5126:16;5110:15;:33::i;8638:468::-:0;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8778:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8795:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8795:39:14::2;;8848:15;:13;:15::i;:::-;795:76:12;8907:42:14;8929:6;8937:11;8907:21;:42::i;:::-;8963:5;8795:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8989:36:14::2;::::0;-1:-1:-1;9006:6:14;9014:10:::2;8989:16;:36::i;:::-;9040:59;::::0;;;;;::::2;::::0;::::2;::::0;;;;;9080:11;;9060:10:::2;::::0;9040:59:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8638:468:::0;;;:::o;1498:103:13:-;1563:31;1571:9;1582:11;1563:7;:31::i;5156:152:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5239:29:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5278:23;5289:11;5278:10;:23::i;923:507:13:-:0;1118:6;1105:9;:19;;1097:50;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;;;;1171:9;:18;;;1334:17;:15;:17::i;:::-;1327:3;1303:21;:27;:48;;1295:81;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;;;;1386:37;1398:6;1406:11;1419:3;1386:11;:37::i;:::-;923:507;;;:::o;1246:104:4:-;1303:4;1326:17;1338:4;1326:11;:17::i;:::-;1319:24;1246:104;-1:-1:-1;;1246:104:4:o;1813:127:13:-;1865:13;1890:43;;;;;;;;;;;;;;;;;;;1813:127;:::o;1471:113:4:-;1542:35;1558:18;1542:15;:35::i;6479:412:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;6595:16:::1;::::0;;6609:1:::1;6595:16:::0;;;;;::::1;::::0;;;6568:24:::1;::::0;6595:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;6595:16:14::1;6568:43;;919:1:12;6621:7:14;6629:1;6621:10;;;;;;;;;;;;;:35;;;::::0;::::1;6687:9;-1:-1:-1::0;;;;;6679:18:14::1;6666:7;6674:1;6666:10;;;;;;;;;::::0;;::::1;::::0;;;;;:31;6707:10;;-1:-1:-1;;;;;6720:32:14;::::1;::::0;6707:7;;1014:1:12::1;::::0;6707:10:14;::::1;;;;;;;;;;:45;;;::::0;::::1;968:3:12;6775:6:14;:32;;6762:7;6770:1;6762:10;;;;;;;;;;;;;:45;;;::::0;::::1;6818:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6818:40:14::1;;6859:15;:13;:15::i;:::-;6876:7;6818:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;6479:412:14:o;1607:132:13:-;1696:36;-1:-1:-1;;;;;1696:28:13;;1725:6;1696:28;:36::i;2835:280:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;2898:32:5::1;2933:19;:17;:19::i;:::-;2966:21;::::0;::::1;::::0;2898:54;;-1:-1:-1;;;;;;2966:21:5::1;:37:::0;2962:147:::1;;3019:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3019:36:5::1;::::0;;3074:24:::1;::::0;::::1;::::0;3051:3:::1;::::0;3074:24:::1;941:1:9;2835:280:5:o:0;2061:209:10:-;2126:14;2152:12;2194:4;2177:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2177:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2167:33;;;;;;2152:48;;2249:4;2243:11;2233:21;;2219:45;;;;:::o;4233:382:5:-;4362:32;4397:19;:17;:19::i;:::-;4448:21;;;;;;-1:-1:-1;;;;;;4448:21:5;4434:10;:35;4426:71;;;;;-1:-1:-1;;;4426:71:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;4533:29;4551:10;4533:17;:29::i;:::-;4572:21;;:36;;-1:-1:-1;;;;;;4572:36:5;;;4233:382::o;3093:540:11:-;3221:36;:23;-1:-1:-1;;;;;3221:34:11;;:36::i;:::-;3213:67;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;;;;3361:12;3375:23;3402;-1:-1:-1;;;;;3402:36:11;3475:24;;;3501:7;;3452:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3452:57:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3452:57:11;-1:-1:-1;;;;;;3452:57:11;;;;;;;;;3402:117;;;;3452:57;;3402:117;;-1:-1:-1;3402:117:11;;-1:-1:-1;3452:57:11;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;3452:57;3402:117;;;;;;;;;;-1:-1:-1;;3402:117:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:159;;;;3537:7;3553:10;3529:36;;;;;-1:-1:-1;;;3529:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3583:17:11;;:10;;:22;3575:51;;;;-1:-1:-1;;;3575:51:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3093:540;;;;;:::o;2232:286:14:-;2289:4;2310:25;:23;:25::i;:::-;2305:110;;2401:1;2359:19;:17;:19::i;:::-;-1:-1:-1;;;;;2359:44:14;;;2351:53;;;;2305:110;2474:1;2432:19;:17;:19::i;:::-;-1:-1:-1;;;;;2432:44:14;;;2431:80;;;;-1:-1:-1;2508:1:14;2482:14;:12;:14::i;:::-;-1:-1:-1;;;;;2482:28:14;;;2424:87;;2232:286;:::o;2625:564::-;2736:2;2721:17;;2713:47;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;;;;2771:21;2794:26;2835:4;;2824:36;;;;;;;;;;-1:-1:-1;;;;;;2824:36:14;;;;;-1:-1:-1;2824:36:14;;;;;;;-1:-1:-1;2874:25:14;:23;:25::i;:::-;2870:225;;;2923:26;:13;-1:-1:-1;;;;;2923:24:14;;:26::i;:::-;2915:67;;;;;-1:-1:-1;;;2915:67:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;2870:225;;;-1:-1:-1;;;;;3021:27:14;;;3013:71;;;;;-1:-1:-1;;;3013:71:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:31;:18;-1:-1:-1;;;;;3112:29:14;;:31::i;:::-;3104:78;;;;-1:-1:-1;;;3104:78:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:564;;;;:::o;3541:263::-;3624:21;3647:26;3688:4;;3677:36;;;;;;;;;;-1:-1:-1;;;;;;3677:36:14;;;;;-1:-1:-1;3677:36:14;;;;;;;-1:-1:-1;3723:27:14;3677:36;3723:12;:27::i;:::-;3760:37;3778:18;3760:17;:37::i;2249:317:5:-;2294:32;2329:19;:17;:19::i;:::-;2367:15;;;;;;-1:-1:-1;;;;2367:15:5;;;;2366:16;2358:48;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;;;;2434:4;2416:15;;:22;;-1:-1:-1;;;;2416:22:5;-1:-1:-1;;;2416:22:5;;;2530:29;2548:10;2530:17;:29::i;2292:164:15:-;2337:35;2391:58;2425:23;;;;;;;;;;;;;;;;;2391:33;:58::i;1994:168::-;2046:18;2102:52;2131:22;;;;;;;;;;;;;;;;;2102:28;:52::i;1609:120::-;1657:7;1683:39;1709:12;;;;;;;;;;;;;;;;;1683:25;:39::i;5314:364:14:-;5487:16;;;5501:1;5487:16;;;;;;;;;5428;;;;5487;;;;5428;;5487;;;;;-1:-1:-1;5487:16:14;5460:43;;5526:11;5513:7;5521:1;5513:10;;;;;;;;;;;;;;;;;:24;5547:10;;-1:-1:-1;;;;;5560:32:14;;;5547:7;;5590:1;;5547:10;;;;;;;;;;;:45;;;;;968:3:12;5615:6:14;:32;;5602:7;5610:1;5602:10;;;;;;;;;;;;;;;;;:45;5664:7;5314:364;-1:-1:-1;;;5314:364:14:o;2572:189:5:-;2639:4;2655:32;2690:19;:17;:19::i;:::-;-1:-1:-1;;;;;2726:28:5;;;;:22;:28;;;;;;;;-1:-1:-1;;2726:28:5;;;;;;;2572:189::o;3810:155:14:-;3878:4;3914:1;3902:9;:13;:55;;;;-1:-1:-1;;;;;;;;3919:38:14;3810:155::o;2621:114:15:-;2678:50;2708:12;;;;;;;;;;;;;;;;;2722:5;2678:29;:50::i;3129:107::-;3176:53;3202:20;;;;;;;;;;;;;;;;;3224:4;3176:25;:53::i;3121:447:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;3206:32:5::1;3241:19;:17;:19::i;:::-;3206:54:::0;-1:-1:-1;;;;;;3278:27:5;::::1;3270:51;;;::::0;;-1:-1:-1;;;3270:51:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3270:51:5;;;;;;;;;;;;;::::1;;3340:24;3352:11;3340;:24::i;:::-;3339:25;3331:54;;;::::0;;-1:-1:-1;;;3331:54:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3331:54:5;;;;;;;;;;;;;::::1;;3403:21;::::0;::::1;::::0;-1:-1:-1;;;;;3403:21:5::1;:37:::0;3395:73:::1;;;::::0;;-1:-1:-1;;;3395:73:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3478:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3478:35:5;::::1;-1:-1:-1::0;;;;;;3478:35:5;;::::1;::::0;::::1;::::0;;;3528:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;941:1:9;3121:447:5::0;:::o;2857:121:15:-;2916:55;2942:21;;;;;;;;;;;;;;;;;2965:5;2916:25;:55::i;2741:110::-;2795:49;2821:15;;;;;;;;;;;;;;;;;2838:5;2795:25;:49::i;5684:789:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;5832:1:::1;5823:6;:10;5815:35;;;::::0;;-1:-1:-1;;;5815:35:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5815:35:14;;;;;;;;;;;;;::::1;;5881:3;5868:9;:16;;5860:51;;;::::0;;-1:-1:-1;;;5860:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5860:51:14;;;;;;;;;;;;;::::1;;5929:29;5946:11;5929:16;:29::i;:::-;5921:65;;;::::0;;-1:-1:-1;;;5921:65:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5921:65:14;;;;;;;;;;;;;::::1;;6014:12;:10;:12::i;:::-;6004:6;:22;;5996:71;;;;-1:-1:-1::0;;;5996:71:14::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6081:13;6098:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6098:35:14::1;;6141:3;6159:15;:13;:15::i;:::-;795:76:12;6218:42:14;6240:6;6248:11;6218:21;:42::i;:::-;6098:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6098:172:14::1;;::::0;;-1:-1:-1;6319:3:14::1;6288:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;6288:19:14::1;:35;6280:74;;;::::0;;-1:-1:-1;;;6280:74:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6386:10;6364:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;:32;;-1:-1:-1;;;;;;6364:32:14::1;-1:-1:-1::0;;;;;6364:32:14;;;::::1;::::0;;;::::1;::::0;;;6411:55;;;;;;;::::1;::::0;;;;;;;;;;;6442:11;;6422:10:::1;::::0;6411:55:::1;::::0;;;;;;;;::::1;4050:1;5684:789:::0;;;:::o;4672:402:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4767:10:5::1;-1:-1:-1::0;;;;;4767:32:5;::::1;;;4759:65;;;::::0;;-1:-1:-1;;;4759:65:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4759:65:5;;;;;;;;;;;;;::::1;;4834:32;4869:19;:17;:19::i;:::-;4834:54;;4906:31;4918:18;4906:11;:31::i;:::-;4898:56;;;::::0;;-1:-1:-1;;;4898:56:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4898:56:5;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4964:42:5;::::1;5009:5;4964:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4964:50:5::1;::::0;;5029:38;;;;;;;::::1;::::0;;;;;;;;::::1;941:1:9;4672:402:5::0;:::o;1138:251:0:-;1224:11;1220:24;;1237:7;;1220:24;1272:33;;1254:12;;-1:-1:-1;;;;;1272:14:0;;;1294:6;;1254:12;1272:33;1254:12;1272:33;1294:6;1272:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1253:52;;;1351:7;1343:39;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;;;1023:217:4;1147:24;;1190:44::o;3893:334:5:-;3968:24;3980:11;3968;:24::i;:::-;3967:25;3959:54;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;;;;4023:32;4058:19;:17;:19::i;:::-;-1:-1:-1;;;;;4087:35:5;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4087:42:5;4125:4;4087:42;;;4185:35;;;;;;;4023:54;;-1:-1:-1;4185:35:5;;;;;;;;;3893:334;;:::o;942:190:0:-;1071:20;1117:8;;;942:190::o;1476:127:15:-;1523:7;1549:47;1578:17;;;;;;;;;;;;;;;;;1549:28;:47::i;2486:129::-;2546:62;2579:17;;;;;;;;;;;;;;;;;2598:9;2546:32;:62::i;2984:139::-;3049:67;3082:22;;;;;;;;;;;;;;;;;3106:9;3049:32;:67::i;1462:295:10:-;1559:50;1625:16;1671:4;1654:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1654:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1644:33;;;;;;1625:52;;1733:8;1710:31;;1696:55;;;;:::o;2474:169::-;2562:18;2575:4;2562:12;:18::i;:::-;:23;2554:47;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;;;;2611:25;2624:4;2630:5;3475:189;3548:12;3590:4;3573:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3573:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3563:33;;;;;;3548:48;;3642:5;3636:4;3629:19;3615:43;;;:::o;3068:189::-;3192:3;3159:21;3175:4;3159:15;:21::i;:::-;-1:-1:-1;;;;;3159:37:10;;3151:61;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", + "sourcePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol", + "compiler": { + "name": "solc", + "version": "0.6.12+commit.27d51765" + }, + "ast": { + "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol", + "exportedSymbols": { + "StarknetEthBridge": [ + 1208 + ] + }, + "id": 1209, + "license": "Apache-2.0.", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1110, + "literals": [ + "solidity", + "^", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "636:24:13" + }, + { + "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Addresses.sol", + "file": "./Addresses.sol", + "id": 1111, + "nodeType": "ImportDirective", + "scope": 1209, + "sourceUnit": 95, + "src": "662:25:13", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenBridge.sol", + "file": "./StarknetTokenBridge.sol", + "id": 1112, + "nodeType": "ImportDirective", + "scope": 1209, + "sourceUnit": 1900, + "src": "688:35:13", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 1113, + "name": "StarknetTokenBridge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1899, + "src": "755:19:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetTokenBridge_$1899", + "typeString": "contract StarknetTokenBridge" + } + }, + "id": 1114, + "nodeType": "InheritanceSpecifier", + "src": "755:19:13" + } + ], + "contractDependencies": [ + 124, + 159, + 240, + 507, + 658, + 680, + 1088, + 1108, + 1899, + 2081 + ], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 1208, + "linearizedBaseContracts": [ + 1208, + 1899, + 1088, + 159, + 124, + 240, + 507, + 680, + 1108, + 2081, + 658 + ], + "name": "StarknetEthBridge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 1117, + "libraryName": { + "contractScope": null, + "id": 1115, + "name": "Addresses", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 94, + "src": "787:9:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Addresses_$94", + "typeString": "library Addresses" + } + }, + "nodeType": "UsingForDirective", + "src": "781:28:13", + "typeName": { + "id": 1116, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "801:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "baseFunctions": [ + 1309 + ], + "body": { + "id": 1125, + "nodeType": "Block", + "src": "888:29:13", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 1123, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "905:5:13", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 1122, + "id": 1124, + "nodeType": "Return", + "src": "898:12:13" + } + ] + }, + "documentation": null, + "id": 1126, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isTokenContractRequired", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1119, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "864:8:13" + }, + "parameters": { + "id": 1118, + "nodeType": "ParameterList", + "parameters": [], + "src": "847:2:13" + }, + "returnParameters": { + "id": 1122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1121, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1126, + "src": "882:4:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1120, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "882:4:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "881:6:13" + }, + "scope": 1208, + "src": "815:102:13", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1287 + ], + "body": { + "id": 1169, + "nodeType": "Block", + "src": "1001:429:13", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1135, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1105:3:13", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1105:9:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 1137, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1128, + "src": "1118:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1105:19:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "494e53554646494349454e545f56414c5545", + "id": 1139, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1126:20:13", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7e2b45635bacef39ebbe7850782f70291073c0e4bdd277ca37e4be83c4ba702f", + "typeString": "literal_string \"INSUFFICIENT_VALUE\"" + }, + "value": "INSUFFICIENT_VALUE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7e2b45635bacef39ebbe7850782f70291073c0e4bdd277ca37e4be83c4ba702f", + "typeString": "literal_string \"INSUFFICIENT_VALUE\"" + } + ], + "id": 1134, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1097:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1097:50:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1141, + "nodeType": "ExpressionStatement", + "src": "1097:50:13" + }, + { + "assignments": [ + 1143 + ], + "declarations": [ + { + "constant": false, + "id": 1143, + "mutability": "mutable", + "name": "fee", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1169, + "src": "1157:11:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1142, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1157:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1148, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1144, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1171:3:13", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1171:9:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 1146, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1128, + "src": "1183:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1171:18:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1157:32:13" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1152, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1311:4:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StarknetEthBridge_$1208", + "typeString": "contract StarknetEthBridge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StarknetEthBridge_$1208", + "typeString": "contract StarknetEthBridge" + } + ], + "id": 1151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1303:7:13", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1150, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1303:7:13", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1303:13:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balance", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1303:21:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 1155, + "name": "fee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1143, + "src": "1327:3:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1303:27:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1157, + "name": "maxTotalBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1968, + 2057 + ], + "referencedDeclaration": 1968, + "src": "1334:15:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 1158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1334:17:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1303:48:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d41585f42414c414e43455f4558434545444544", + "id": 1160, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1353:22:13", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + }, + "value": "MAX_BALANCE_EXCEEDED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", + "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" + } + ], + "id": 1149, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1295:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1295:81:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1162, + "nodeType": "ExpressionStatement", + "src": "1295:81:13" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1164, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1128, + "src": "1398:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1165, + "name": "l2Recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1130, + "src": "1406:11:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1166, + "name": "fee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1143, + "src": "1419:3:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1163, + "name": "sendMessage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1712, + "src": "1386:11:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256)" + } + }, + "id": 1167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1386:37:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1168, + "nodeType": "ExpressionStatement", + "src": "1386:37:13" + } + ] + }, + "documentation": null, + "functionSelector": "e2bbb158", + "id": 1170, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1132, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "992:8:13" + }, + "parameters": { + "id": 1131, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1128, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1170, + "src": "940:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1127, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "940:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1130, + "mutability": "mutable", + "name": "l2Recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1170, + "src": "956:19:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "956:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "939:37:13" + }, + "returnParameters": { + "id": 1133, + "nodeType": "ParameterList", + "parameters": [], + "src": "1001:0:13" + }, + "scope": 1208, + "src": "923:507:13", + "stateMutability": "payable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1181, + "nodeType": "Block", + "src": "1553:48:13", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1176, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1571:3:13", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1571:9:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1178, + "name": "l2Recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1172, + "src": "1582:11:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1175, + "name": "deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1170, + "src": "1563:7:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 1179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1563:31:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1180, + "nodeType": "ExpressionStatement", + "src": "1563:31:13" + } + ] + }, + "documentation": null, + "functionSelector": "b6b55f25", + "id": 1182, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1173, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1172, + "mutability": "mutable", + "name": "l2Recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1182, + "src": "1515:19:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1515:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1514:21:13" + }, + "returnParameters": { + "id": 1174, + "nodeType": "ParameterList", + "parameters": [], + "src": "1553:0:13" + }, + "scope": 1208, + "src": "1498:103:13", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1294 + ], + "body": { + "id": 1196, + "nodeType": "Block", + "src": "1686:53:13", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1193, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1184, + "src": "1725:6:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1190, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1186, + "src": "1696:9:13", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performEthTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 44, + "src": "1696:28:13", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", + "typeString": "function (address,uint256)" + } + }, + "id": 1194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1696:36:13", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1195, + "nodeType": "ExpressionStatement", + "src": "1696:36:13" + } + ] + }, + "documentation": null, + "id": 1197, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferOutFunds", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1188, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1677:8:13" + }, + "parameters": { + "id": 1187, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1184, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1197, + "src": "1633:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1633:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1186, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1197, + "src": "1649:17:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1185, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1649:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1632:35:13" + }, + "returnParameters": { + "id": 1189, + "nodeType": "ParameterList", + "parameters": [], + "src": "1686:0:13" + }, + "scope": 1208, + "src": "1607:132:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 657 + ], + "body": { + "id": 1206, + "nodeType": "Block", + "src": "1880:60:13", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "537461726b576172655f537461726b6e65744574684272696467655f323032335f31", + "id": 1204, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1897:36:13", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9eb54d9cf6c179336dbe5b693bf437f6b5c816c9194958851e8117c40f9a3e76", + "typeString": "literal_string \"StarkWare_StarknetEthBridge_2023_1\"" + }, + "value": "StarkWare_StarknetEthBridge_2023_1" + }, + "functionReturnParameters": 1203, + "id": 1205, + "nodeType": "Return", + "src": "1890:43:13" + } + ] + }, + "documentation": { + "id": 1198, + "nodeType": "StructuredDocumentation", + "src": "1745:63:13", + "text": "Returns a string that identifies the contract." + }, + "functionSelector": "eeb72866", + "id": 1207, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "identify", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1200, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1847:8:13" + }, + "parameters": { + "id": 1199, + "nodeType": "ParameterList", + "parameters": [], + "src": "1830:2:13" + }, + "returnParameters": { + "id": 1203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1202, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1207, + "src": "1865:13:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1201, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1865:6:13", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1864:15:13" + }, + "scope": 1208, + "src": "1813:127:13", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1209, + "src": "725:1217:13" + } + ], + "src": "636:1307:13" + }, + "functionHashes": { + "acceptGovernance()": "238efcbc", + "cancelNomination()": "10f2ec45", + "deposit(uint256)": "b6b55f25", + "deposit(uint256,uint256)": "e2bbb158", + "depositCancelRequest(uint256,uint256,uint256)": "4c567662", + "depositReclaim(uint256,uint256,uint256)": "ae873816", + "identify()": "eeb72866", + "initialize(bytes)": "439fab91", + "isActive()": "22f3e2d4", + "isFrozen()": "33eeb147", + "isGovernor(address)": "e43581b8", + "maxDeposit()": "6083e59a", + "maxTotalBalance()": "19534075", + "nominateNewGovernor(address)": "87ebeb18", + "removeGovernor(address)": "eecdac88", + "setL2TokenBridge(uint256)": "7fc2ab3e", + "setMaxDeposit(uint256)": "bb371fdd", + "setMaxTotalBalance(uint256)": "894ecf04", + "withdraw(uint256)": "2e1a7d4d", + "withdraw(uint256,address)": "00f714ce" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1958600", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "acceptGovernance()": "infinite", + "cancelNomination()": "infinite", + "deposit(uint256)": "infinite", + "deposit(uint256,uint256)": "infinite", + "depositCancelRequest(uint256,uint256,uint256)": "infinite", + "depositReclaim(uint256,uint256,uint256)": "infinite", + "identify()": "infinite", + "initialize(bytes)": "infinite", + "isActive()": "1521", + "isFrozen()": "249", + "isGovernor(address)": "infinite", + "maxDeposit()": "infinite", + "maxTotalBalance()": "infinite", + "nominateNewGovernor(address)": "infinite", + "removeGovernor(address)": "infinite", + "setL2TokenBridge(uint256)": "infinite", + "setMaxDeposit(uint256)": "infinite", + "setMaxTotalBalance(uint256)": "infinite", + "withdraw(uint256)": "infinite", + "withdraw(uint256,address)": "infinite" + }, + "internal": { + "isTokenContractRequired()": "infinite", + "transferOutFunds(uint256,address)": "infinite" + } + } +} \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarknetTokenBridge.json b/crates/sandbox/artifacts/StarknetTokenBridge.json new file mode 100644 index 0000000..c7fb64a --- /dev/null +++ b/crates/sandbox/artifacts/StarknetTokenBridge.json @@ -0,0 +1,1301 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "DepositCancelRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "DepositReclaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "DepositWithMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "DepositWithMessageCancelRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "DepositWithMessageReclaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SetL2TokenBridge", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SetMaxTotalBalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "TokenDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "deploymentMsgHash", + "type": "bytes32" + } + ], + "name": "TokenEnrollmentInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "WithdrawalLimitDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "WithdrawalLimitEnabled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "checkDeploymentStatus", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "deactivate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositCancelRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositReclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + } + ], + "name": "depositWithMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositWithMessageCancelRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "l2Recipient", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "message", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "depositWithMessageReclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "disableWithdrawalLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "enableWithdrawalLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "enrollToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "estimateDepositFeeWei", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "estimateEnrollmentFeeWei", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getMaxTotalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRemainingIntradayAllowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getStatus", + "outputs": [ + { + "internalType": "enum StarknetTokenStorage.TokenStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "identify", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAppRoleAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isFrozen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isGovernanceAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isOperator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isSecurityAgent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "isServicingToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isTokenAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isUpgradeGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "registerUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeAppRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeGovernanceAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeSecurityAgent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeTokenAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeUpgradeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "l2TokenBridge_", + "type": "uint256" + } + ], + "name": "setL2TokenBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxTotalBalance_", + "type": "uint256" + } + ], + "name": "setMaxTotalBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" +} \ No newline at end of file diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index 815911d..58dc758 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -1,32 +1,86 @@ use std::sync::Arc; +use ethers::abi::Tokenize; +use ethers::contract::ContractInstance; -use starknet_core_contract_client::clients::StarknetSovereignContractClient; +use starknet_core_contract_client::clients::{StarknetSovereignContractClient, StarknetEthBridgeContractClient, StarknetTokenBridgeContractClient}; use crate::{deploy_contract, Error, LocalWalletSignerMiddleware}; const STARKNET_SOVEREIGN: &str = include_str!("../artifacts/Starknet.json"); + +const STARKNET_ETH_BRIDGE: &str = include_str!("../artifacts/StarknetEthBridge.json"); + +const STARKGATE_MANAGER: &str = include_str!("../artifacts/StarkgateManager.json"); +const STARKGATE_REGISTRY: &str = include_str!("../artifacts/StarkgateRegistry.json"); +const STARKNET_TOKEN_BRIDGE: &str = include_str!("../artifacts/StarknetTokenBridge.json"); +const ERC20_TOKEN: &str = include_str!("../artifacts/Dai.json"); + const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); /// Deploy Starknet sovereign contract and unsafe proxy for it. -/// Cached forge atrifacts are used for deployment, make sure they are up to date. +/// Cached forge artifacts are used for deployment, make sure they are up to date. pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { // First we deploy the Starknet core contract (no explicit contructor) - let core_contract = deploy_contract(client.clone(), STARKNET_SOVEREIGN, ()).await?; + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; + + Ok(StarknetSovereignContractClient::new( + core_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy Core and Eth Bridge contracts + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; + let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; - // Once we know the Starknet core contract address (implementation address) + Ok(StarknetEthBridgeContractClient::new( + core_contract.address(), + eth_bridge_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the contracts required to bridge ERC20 token from L1 + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; + let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; + let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; + let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; + let token_contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; + + Ok(StarknetTokenBridgeContractClient::new( + core_contract.address(), + manager_contract.address(), + registry_contract.address(), + token_bridge_contract.address(), + token_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_contract_behind_unsafe_proxy( + client: Arc, + contract_path: &str, + constructor_args: T, +) -> Result, LocalWalletSignerMiddleware>, Error> { + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; + + // Once we know the main contract address (implementation address) // we can deploy and initialize our delegate proxy. // NOTE that real world proxies typically allow changing the implementation // address dynamically (this is basically how upgrades work). In our case, // for simplicity, the proxy is initialized only once during the deployment. let proxy_contract = - deploy_contract(client.clone(), UNSAFE_PROXY, core_contract.address()).await?; + deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; - Ok(StarknetSovereignContractClient::new( - proxy_contract.address(), - client.clone(), - )) + return Ok(proxy_contract); } #[cfg(test)] diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs new file mode 100644 index 0000000..0f8a076 --- /dev/null +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -0,0 +1,35 @@ +use std::sync::Arc; + +use crate::{ + interfaces::{StarknetEthBridge, StarknetMessaging}, LocalWalletSignerMiddleware, +}; + +use ethers::abi::Address; + +/// Client to interact with a Starknet Eth Bridge +pub struct StarknetEthBridgeContractClient { + messaging: StarknetMessaging, + eth_bridge: StarknetEthBridge, +} + +impl StarknetEthBridgeContractClient { + pub fn new(messaging: Address, eth_bridge: Address, client: Arc) -> Self { + Self{ + messaging: StarknetMessaging::new(messaging, client.clone()), + eth_bridge: StarknetEthBridge::new(eth_bridge, client.clone()), + } + } +} + +impl AsRef> for StarknetEthBridgeContractClient { + fn as_ref(&self) -> &StarknetMessaging { + &self.messaging + } +} + +impl AsRef> for StarknetEthBridgeContractClient { + fn as_ref(&self) -> &StarknetEthBridge { + &self.eth_bridge + } +} + diff --git a/crates/starknet-core-contract-client/src/clients/mod.rs b/crates/starknet-core-contract-client/src/clients/mod.rs index 8d9fc4d..04b22c0 100644 --- a/crates/starknet-core-contract-client/src/clients/mod.rs +++ b/crates/starknet-core-contract-client/src/clients/mod.rs @@ -1,5 +1,9 @@ mod sovereign; mod validity; +mod eth_bridge; +mod token_bridge; pub use sovereign::*; pub use validity::*; +pub use eth_bridge::*; +pub use token_bridge::*; diff --git a/crates/starknet-core-contract-client/src/clients/token_bridge.rs b/crates/starknet-core-contract-client/src/clients/token_bridge.rs new file mode 100644 index 0000000..55b8825 --- /dev/null +++ b/crates/starknet-core-contract-client/src/clients/token_bridge.rs @@ -0,0 +1,61 @@ +use std::sync::Arc; + +use crate::{ + interfaces::{ + DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetMessaging, StarknetTokenBridge + }, + LocalWalletSignerMiddleware, +}; + +use ethers::types::Address; + +/// Client to interact with a Token Bridge (ERC20) +pub struct StarknetTokenBridgeContractClient { + messaging: StarknetMessaging, + manager: StarkgateManager, + registry: StarkgateRegistry, + token_bridge: StarknetTokenBridge, + erc20_token: DaiERC20Token, +} + +impl StarknetTokenBridgeContractClient { + pub fn new(messaging: Address, manager: Address, registry: Address, token_bridge: Address, dai: Address, client: Arc) -> Self { + Self { + messaging: StarknetMessaging::new(messaging, client.clone()), + manager: StarkgateManager::new(manager, client.clone()), + registry: StarkgateRegistry::new(registry, client.clone()), + token_bridge: StarknetTokenBridge::new(token_bridge, client.clone()), + erc20_token: DaiERC20Token::new(dai, client.clone()), + } + } +} + +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &StarknetMessaging { + &self.messaging + } +} + +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &StarkgateManager { + &self.manager + } +} + +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &StarkgateRegistry { + &self.registry + } +} + +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &StarknetTokenBridge { + &self.token_bridge + } +} + +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &DaiERC20Token { + &self.erc20_token + } +} diff --git a/crates/starknet-core-contract-client/src/interfaces/dai.rs b/crates/starknet-core-contract-client/src/interfaces/dai.rs new file mode 100644 index 0000000..6188322 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/dai.rs @@ -0,0 +1,8 @@ +use ethers::{ + prelude::abigen, +}; + +abigen!( + DaiERC20Token, + r#"[]"#, +); \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs new file mode 100644 index 0000000..2c6ad50 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -0,0 +1,49 @@ +use async_trait::async_trait; +use ethers::{ + contract::ContractError, + prelude::abigen, + providers::Middleware, + types::{TransactionReceipt, U256}, +}; + +use crate::Error; + +abigen!( + StarknetEthBridge, + r#"[ + function deposit(uint256 amount, uint256 l2Recipient) public payable override + + function identify() external pure override returns (string memory) + ]"#, +); + +#[async_trait] +pub trait StarknetEthBridgeTrait { + async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error>; + async fn identify(&self) -> Result>; +} + +#[async_trait] +impl StarknetEthBridgeTrait for T + where + T: AsRef> + Send + Sync, +{ + async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error> { + self.as_ref() + .deposit(amount, l2recipient) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + + } + + async fn identify(&self) -> Result> { + self.as_ref() + .identify() + .call() + .await + .map_err(Into::into) + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/governance.rs b/crates/starknet-core-contract-client/src/interfaces/governance.rs index 40f2bd1..1ace1d2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/governance.rs +++ b/crates/starknet-core-contract-client/src/interfaces/governance.rs @@ -8,7 +8,7 @@ use ethers::{ use crate::Error; -type Adress = H160; +type Address = H160; abigen!( StarknetGovernance, @@ -23,14 +23,14 @@ abigen!( #[async_trait] pub trait StarknetGovernanceTrait { - async fn starknet_is_governor(&self, user: Adress) -> Result>; + async fn starknet_is_governor(&self, user: Address) -> Result>; async fn starknet_nominate_new_governor( &self, - new_governor: Adress, + new_governor: Address, ) -> Result, Error>; async fn starknet_remove_governor( &self, - governor_for_removal: Adress, + governor_for_removal: Address, ) -> Result, Error>; async fn starknet_accept_governance(&self) -> Result, Error>; async fn starknet_cancel_nomination(&self) -> Result, Error>; @@ -41,7 +41,7 @@ impl StarknetGovernanceTrait for T where T: AsRef> + Send + Sync, { - async fn starknet_is_governor(&self, user: Adress) -> Result> { + async fn starknet_is_governor(&self, user: Address) -> Result> { self.as_ref() .starknet_is_governor(user) .call() @@ -51,7 +51,7 @@ where async fn starknet_nominate_new_governor( &self, - new_governor: Adress, + new_governor: Address, ) -> Result, Error> { self.as_ref() .starknet_nominate_new_governor(new_governor) @@ -64,7 +64,7 @@ where async fn starknet_remove_governor( &self, - governor_for_removal: Adress, + governor_for_removal: Address, ) -> Result, Error> { self.as_ref() .starknet_remove_governor(governor_for_removal) diff --git a/crates/starknet-core-contract-client/src/interfaces/manager.rs b/crates/starknet-core-contract-client/src/interfaces/manager.rs new file mode 100644 index 0000000..d015316 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/manager.rs @@ -0,0 +1,97 @@ +use async_trait::async_trait; +use ethers::{ + contract::ContractError, + prelude::abigen, + providers::Middleware, + types::{TransactionReceipt, H160}, +}; + +use crate::Error; + +type Address = H160; + +abigen!( + StarkgateManager, + r#"[ + function addExistingBridge(address token, address bridge_) external onlyTokenAdmin + function deactivateToken(address token) external onlyTokenAdmin + function blockToken(address token) external onlyTokenAdmin + + function enrollTokenBridge(address token) external payable + + function getRegistry() external view returns (address) + function identify() external pure override returns (string memory) + ]"#, +); + +#[async_trait] +pub trait StarkgateManagerTrait { + async fn add_existing_bridge(&self, token: Address, bridge: Address) -> Result, Error>; + async fn deactivate_token(&self, token: Address) -> Result, Error>; + async fn block_token(&self, token: Address) -> Result, Error>; + async fn enroll_token_bridge(&self, token: Address) -> Result, Error>; + async fn get_registry(&self) -> Result>; + async fn identify(&self) -> Result>; +} + +#[async_trait] +impl StarkgateManagerTrait for T +where + T: AsRef> + Send + Sync, +{ + async fn add_existing_bridge(&self, token: Address, bridge: Address) -> Result, Error> { + self.as_ref() + .add_existing_bridge(token, bridge) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn deactivate_token(&self, token: Address) -> Result, Error> { + self.as_ref() + .deactivate_token(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn block_token(&self, token: Address) -> Result, Error> { + self.as_ref() + .block_token(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn enroll_token_bridge(&self, token: Address) -> Result, Error> { + self.as_ref() + .enroll_token_bridge(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn get_registry(&self) -> Result> { + self.as_ref() + .get_registry() + .call() + .await + .map_err(Into::into) + } + + async fn identify(&self) -> Result> { + self.as_ref() + .identify() + .call() + .await + .map_err(Into::into) + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/mod.rs b/crates/starknet-core-contract-client/src/interfaces/mod.rs index 7a6a035..d8f48ca 100644 --- a/crates/starknet-core-contract-client/src/interfaces/mod.rs +++ b/crates/starknet-core-contract-client/src/interfaces/mod.rs @@ -6,6 +6,11 @@ mod operator; mod proxy_support; mod sovereign_core_contract; mod validity_core_contract; +mod eth_bridge; +mod registry; +mod manager; +mod token_bridge; +mod dai; pub use governance::{StarknetGovernance, StarknetGovernanceTrait}; pub use governed_finalizable::{GovernedFinalizable, GovernedFinalizableTrait}; @@ -21,3 +26,8 @@ pub use proxy_support::{ }; pub use sovereign_core_contract::{StarknetSovereignContract, StarknetSovereignContractTrait}; pub use validity_core_contract::{StarknetValidityContract, StarknetValidityContractTrait}; +pub use eth_bridge::{StarknetEthBridge, StarknetEthBridgeTrait}; +pub use token_bridge::{StarknetTokenBridge, StarknetTokenBridgeTrait}; +pub use manager::{StarkgateManager, StarkgateManagerTrait}; +pub use registry::{StarkgateRegistry, StarkgateRegistryTrait}; +pub use dai::{DaiERC20Token}; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/registry.rs b/crates/starknet-core-contract-client/src/interfaces/registry.rs new file mode 100644 index 0000000..32f0183 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/registry.rs @@ -0,0 +1,85 @@ +use async_trait::async_trait; +use ethers::{ + contract::ContractError, + prelude::abigen, + providers::Middleware, + types::{TransactionReceipt, H160}, +}; + +use crate::Error; + +type Address = H160; + +abigen!( + StarkgateRegistry, + r#"[ + function enlistToken(address token, address bridge) external onlyManager + function blockToken(address token) external onlyManager + + function selfRemove(address token) external + + function identify() external pure override returns (string memory) + function getBridge(address token) external view returns (address) + ]"#, +); + +#[async_trait] +pub trait StarkgateRegistryTrait { + async fn enlist_token(&self, token: Address, bridge: Address) -> Result, Error>; + async fn block_token(&self, token: Address) -> Result, Error>; + async fn self_remove(&self, token: Address) -> Result, Error>; + async fn identify(&self) -> Result>; + async fn get_bridge(&self, token: Address) -> Result>; +} + +#[async_trait] +impl StarkgateRegistryTrait for T +where + T: AsRef> + Send + Sync, +{ + async fn enlist_token(&self, token: Address, bridge: Address) -> Result, Error> { + self.as_ref() + .enlist_token(token, bridge) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn block_token(&self, token: Address) -> Result, Error> { + self.as_ref() + .block_token(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn self_remove(&self, token: Address) -> Result, Error> { + self.as_ref() + .self_remove(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn identify(&self) -> Result> { + self.as_ref() + .identify() + .call() + .await + .map_err(Into::into) + } + + async fn get_bridge(&self, token: Address) -> Result> { + self.as_ref() + .get_bridge(token) + .call() + .await + .map_err(Into::into) + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs new file mode 100644 index 0000000..0382159 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs @@ -0,0 +1,199 @@ +use async_trait::async_trait; +use ethers::{ + contract::ContractError, + prelude::abigen, + providers::Middleware, + types::{TransactionReceipt, U256, H160}, +}; + +use crate::Error; + +type Address = H160; + +abigen!( + StarknetTokenBridge, + r#"[ + function deactivate(address token) external virtual onlyManager + function deposit(address token, uint256 amount, uint256 l2Recipient) external payable onlyServicingToken + function setL2TokenBridge(uint256 l2TokenBridge_) external onlyAppGovernor + function enableWithdrawalLimit(address token) external onlySecurityAgent + function disableWithdrawalLimit(address token) external onlySecurityAdmin + function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor + function enrollToken(address token) external payable virtual onlyManager + + function withdraw(address token, uint256 amount) external + + function identify() external pure virtual returns (string memory) + function estimateDepositFeeWei() external view returns (uint256) + function estimateEnrollmentFeeWei() external view returns (uint256) + function isServicingToken(address token) public view returns (bool) + function getRemainingIntradayAllowance(address token) external view returns (uint256) + function getMaxTotalBalance(address token) public view returns (uint256) + function maxDeposit() external pure returns (uint256) + ]"#, +); + +#[async_trait] +pub trait StarknetTokenBridgeTrait { + async fn deactivate(&self, token: Address) -> Result, Error>; + async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256) -> Result, Error>; + async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; + + async fn enable_withdrawal_limit(&self, address: Address) -> Result, Error>; + async fn disable_withdrawal_limit(&self, address: Address) -> Result, Error>; + async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error>; + async fn enroll_token(&self, token: Address) -> Result, Error>; + async fn withdraw(&self, token: Address, amount: U256) -> Result, Error>; + async fn identify(&self) -> Result>; + async fn estimate_deposit_fee_wei(&self) -> Result>; + async fn estimate_enrollment_fee_wei(&self) -> Result>; + async fn is_servicing_token(&self, token: Address) -> Result>; + async fn get_remaining_intraday_allowance(&self, token: Address) -> Result>; + async fn get_max_total_balance(&self, token: Address) -> Result>; + async fn max_deposit(&self) -> Result>; +} + +#[async_trait] +impl StarknetTokenBridgeTrait for T + where + T: AsRef> + Send + Sync, +{ + async fn deactivate(&self, token: Address) -> Result, Error> { + self.as_ref() + .deactivate(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256) -> Result, Error> { + self.as_ref() + .deposit(token, amount, l2_recipient) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error> { + self.as_ref() + .set_l2_token_bridge(l2_token_bridge) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn enable_withdrawal_limit(&self, token: Address) -> Result, Error> { + self.as_ref() + .enable_withdrawal_limit(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn disable_withdrawal_limit(&self, token: Address) -> Result, Error> { + self.as_ref() + .disable_withdrawal_limit(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error> { + self.as_ref() + .set_max_total_balance(token, max_total_balance) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn enroll_token(&self, token: Address) -> Result, Error> { + self.as_ref() + .enroll_token(token) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn withdraw(&self, token: Address, amount: U256) -> Result, Error> { + self.as_ref() + .withdraw(token, amount) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn identify(&self) -> Result> { + self.as_ref() + .identify() + .call() + .await + .map_err(Into::into) + } + + async fn estimate_deposit_fee_wei(&self) -> Result> { + self.as_ref() + .estimate_deposit_fee_wei() + .call() + .await + .map_err(Into::into) + } + + async fn estimate_enrollment_fee_wei(&self) -> Result> { + self.as_ref() + .estimate_enrollment_fee_wei() + .call() + .await + .map_err(Into::into) + } + + async fn is_servicing_token(&self, token: Address) -> Result> { + self.as_ref() + .is_servicing_token(token) + .call() + .await + .map_err(Into::into) + } + + async fn get_remaining_intraday_allowance(&self, token: Address) -> Result> { + self.as_ref() + .get_remaining_intraday_allowance(token) + .call() + .await + .map_err(Into::into) + } + + async fn get_max_total_balance(&self, token: Address) -> Result> { + self.as_ref() + .get_max_total_balance(token) + .call() + .await + .map_err(Into::into) + } + + async fn max_deposit(&self) -> Result> { + self.as_ref() + .max_deposit() + .call() + .await + .map_err(Into::into) + } +} + + + From 66d626d248fbbde3c2744930b850e66360089362 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sun, 3 Mar 2024 09:18:40 +0530 Subject: [PATCH 02/31] update: add traits to bridge and legacy bridge --- .../src/clients/eth_bridge.rs | 17 ++++++++-- .../src/clients/token_bridge.rs | 34 +++++++++++++++---- .../src/interfaces/eth_bridge.rs | 2 +- .../starknet-core-contract-client/src/lib.rs | 23 +++++++++++++ 4 files changed, 66 insertions(+), 10 deletions(-) diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index 0f8a076..6ec1245 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -1,8 +1,6 @@ use std::sync::Arc; -use crate::{ - interfaces::{StarknetEthBridge, StarknetMessaging}, LocalWalletSignerMiddleware, -}; +use crate::{interfaces::{StarknetEthBridge, StarknetMessaging}, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; use ethers::abi::Address; @@ -33,3 +31,16 @@ impl AsRef> for StarknetEthBridge } } +impl StarknetLegacyBridgeContractClient for StarknetEthBridgeContractClient { + fn address(&self) -> Address { + self.eth_bridge.address() + } + + fn messaging(&self) -> Address { + self.messaging.address() + } + + fn client(&self) -> Arc { + self.eth_bridge.client() + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/clients/token_bridge.rs b/crates/starknet-core-contract-client/src/clients/token_bridge.rs index 55b8825..e1b1fcc 100644 --- a/crates/starknet-core-contract-client/src/clients/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/token_bridge.rs @@ -1,11 +1,8 @@ use std::sync::Arc; -use crate::{ - interfaces::{ - DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetMessaging, StarknetTokenBridge - }, - LocalWalletSignerMiddleware, -}; +use crate::{interfaces::{ + DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetMessaging, StarknetTokenBridge +}, LocalWalletSignerMiddleware, StarknetBridgeContractClient}; use ethers::types::Address; @@ -59,3 +56,28 @@ impl AsRef> for StarknetTokenBridgeCo &self.erc20_token } } + +impl StarknetBridgeContractClient for StarknetTokenBridgeContractClient { + fn address(&self) -> Address { + self.token_bridge.address() + } + + fn manager(&self) -> Address { + self.manager.address() + } + + fn registry(&self) -> Address { + self.registry.address() + } + + fn messaging(&self) -> Address { + self.messaging.address() + } + + fn manager_client(&self) -> Arc { + self.manager.client() + } + fn client(&self) -> Arc { + self.token_bridge.client() + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index 2c6ad50..509a830 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -46,4 +46,4 @@ impl StarknetEthBridgeTrait for T .await .map_err(Into::into) } -} \ No newline at end of file +} diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 5f00a15..79c5d7e 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -17,3 +17,26 @@ pub trait StarknetCoreContractClient { fn address(&self) -> Address; fn client(&self) -> Arc; } + +pub trait StarknetLegacyBridgeContractClient { + fn address(&self) -> Address; + + fn messaging(&self) -> Address; + + fn client(&self) -> Arc; +} + +pub trait StarknetBridgeContractClient { + fn address(&self) -> Address; + + fn manager(&self) -> Address; + + fn registry(&self) -> Address; + + fn messaging(&self) -> Address; + + fn manager_client(&self) -> Arc; + + fn client(&self) -> Arc; + +} \ No newline at end of file From b35e52e687e67472e202fbb05766a7c0523d256b Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sun, 3 Mar 2024 10:06:55 +0530 Subject: [PATCH 03/31] test:eth --- crates/sandbox/src/unsafe_proxy.rs | 4 +--- .../src/clients/eth_bridge.rs | 16 ++-------------- crates/starknet-core-contract-client/src/lib.rs | 2 -- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index 58dc758..838e5dd 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -34,12 +34,10 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc ) -> Result { - // Deploy Core and Eth Bridge contracts - let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; + // First we deploy the Eth Bridge contract (no explicit contructor) let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; Ok(StarknetEthBridgeContractClient::new( - core_contract.address(), eth_bridge_contract.address(), client.clone(), )) diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index 6ec1245..bf545d7 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -1,30 +1,22 @@ use std::sync::Arc; -use crate::{interfaces::{StarknetEthBridge, StarknetMessaging}, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; +use crate::{interfaces::StarknetEthBridge, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; use ethers::abi::Address; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { - messaging: StarknetMessaging, eth_bridge: StarknetEthBridge, } impl StarknetEthBridgeContractClient { - pub fn new(messaging: Address, eth_bridge: Address, client: Arc) -> Self { + pub fn new(eth_bridge: Address, client: Arc) -> Self { Self{ - messaging: StarknetMessaging::new(messaging, client.clone()), eth_bridge: StarknetEthBridge::new(eth_bridge, client.clone()), } } } -impl AsRef> for StarknetEthBridgeContractClient { - fn as_ref(&self) -> &StarknetMessaging { - &self.messaging - } -} - impl AsRef> for StarknetEthBridgeContractClient { fn as_ref(&self) -> &StarknetEthBridge { &self.eth_bridge @@ -36,10 +28,6 @@ impl StarknetLegacyBridgeContractClient for StarknetEthBridgeContractClient { self.eth_bridge.address() } - fn messaging(&self) -> Address { - self.messaging.address() - } - fn client(&self) -> Arc { self.eth_bridge.client() } diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 79c5d7e..3622a53 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -21,8 +21,6 @@ pub trait StarknetCoreContractClient { pub trait StarknetLegacyBridgeContractClient { fn address(&self) -> Address; - fn messaging(&self) -> Address; - fn client(&self) -> Arc; } From 26bf6a2bc4125cc0d258777d77132cdcfd92df3a Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sun, 3 Mar 2024 10:48:31 +0530 Subject: [PATCH 04/31] add proxxy --- .../src/clients/eth_bridge.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index bf545d7..96aa4c3 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -3,16 +3,19 @@ use std::sync::Arc; use crate::{interfaces::StarknetEthBridge, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; use ethers::abi::Address; +use crate::clients::StarknetSovereignContractClient; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { eth_bridge: StarknetEthBridge, + proxy_support: ProxySupport, } impl StarknetEthBridgeContractClient { pub fn new(eth_bridge: Address, client: Arc) -> Self { Self{ eth_bridge: StarknetEthBridge::new(eth_bridge, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), } } } @@ -23,6 +26,12 @@ impl AsRef> for StarknetEthBridge } } +impl AsRef> for StarknetSovereignContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support + } +} + impl StarknetLegacyBridgeContractClient for StarknetEthBridgeContractClient { fn address(&self) -> Address { self.eth_bridge.address() From a615c7b20e278736dc643a66763ca3ce39b5fa19 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sun, 3 Mar 2024 10:53:34 +0530 Subject: [PATCH 05/31] update --- .../src/clients/eth_bridge.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index 96aa4c3..c29db44 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -1,9 +1,8 @@ use std::sync::Arc; -use crate::{interfaces::StarknetEthBridge, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; +use crate::{interfaces::{StarknetEthBridge, ProxySupport}, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; use ethers::abi::Address; -use crate::clients::StarknetSovereignContractClient; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { @@ -12,9 +11,9 @@ pub struct StarknetEthBridgeContractClient { } impl StarknetEthBridgeContractClient { - pub fn new(eth_bridge: Address, client: Arc) -> Self { + pub fn new(address: Address, client: Arc) -> Self { Self{ - eth_bridge: StarknetEthBridge::new(eth_bridge, client.clone()), + eth_bridge: StarknetEthBridge::new(address, client.clone()), proxy_support: ProxySupport::new(address, client.clone()), } } @@ -26,7 +25,7 @@ impl AsRef> for StarknetEthBridge } } -impl AsRef> for StarknetSovereignContractClient { +impl AsRef> for StarknetEthBridgeContractClient { fn as_ref(&self) -> &ProxySupport { &self.proxy_support } From d75d001eb9f8ad2d76529a711d57bd2cdc5d32e7 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sun, 3 Mar 2024 12:10:26 +0530 Subject: [PATCH 06/31] update --- crates/sandbox/artifacts/StarknetEthBridge.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/sandbox/artifacts/StarknetEthBridge.json b/crates/sandbox/artifacts/StarknetEthBridge.json index eb15e5c..62ef854 100644 --- a/crates/sandbox/artifacts/StarknetEthBridge.json +++ b/crates/sandbox/artifacts/StarknetEthBridge.json @@ -494,7 +494,9 @@ } ], "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"LogBridgeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetL2TokenBridge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxTotalBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTotalBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"nominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"removeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2TokenBridge_\",\"type\":\"uint256\"}],\"name\":\"setL2TokenBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxDeposit_\",\"type\":\"uint256\"}],\"name\":\"setMaxDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTotalBalance_\",\"type\":\"uint256\"}],\"name\":\"setMaxTotalBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"identify()\":{\"notice\":\"Returns a string that identifies the contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":\"StarknetEthBridge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Addresses.sol\":{\"keccak256\":\"0x56bef89f8ea31235d57f914df9ff4b3a6bc1d53b30bf115c5fca1819b81547dc\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f82719c1528743d5628a680f4d4100fc87911172c2652acb3fff168030af3311\",\"dweb:/ipfs/QmdWKKQio8GKTjDwcCBjAJV55k3yzqkjTjVku4pxXAKdb2\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/BlockDirectCall.sol\":{\"keccak256\":\"0x8085363ea620123229c197af4927c2652c95b5eca5faa4a60f3a92ad8a088766\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://769a98556532f84b9b6b8dab46d7ea828d643ada2330c07e990832fcb465fb6e\",\"dweb:/ipfs/QmYpqmuZPcRFzB23sMRrqYTPTy4pHabNU9Rk6S1ikrvfRj\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/CairoConstants.sol\":{\"keccak256\":\"0x86600572702f4e5ace6de96d2945c80d1a788e93fccb7cd11a8d253fc335a9d6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1329f4f98cd64d0ebe38f04889174318e991b0db9a7369af07b6f26a938eedd8\",\"dweb:/ipfs/QmTtpFXF3TLFuDpzR9YhNFGysAzH625ffCXgmJNgawCEuL\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ContractInitializer.sol\":{\"keccak256\":\"0xe46eaaf290e13b86cc602a44cd9850001b8e29b57bb36b8666764b3afe8a2d22\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://a52dac66b9b861a7fbfe8437bd37b2c4c99014e197c5f3148286276c35572c8a\",\"dweb:/ipfs/QmXGY6Prs8dTM7qEUFYz57p5YaD1ZUJP5UA5Adtr1rufHz\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/GenericGovernance.sol\":{\"keccak256\":\"0x9e12b5127f8633966fe28226eb7a21298913c5b2d60e1b56e69427a5080afa76\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cfac1fc7f8644f9da51415286a7999ec0cf25429380aebaded1cbcf99e914ff5\",\"dweb:/ipfs/QmNZrpmPnLYAdFQ48baa1newh2RzNvcyNZtLKge1zp2DgC\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Governance.sol\":{\"keccak256\":\"0xf93e53aa3e40c1463e5f98be40520726df4a36176eb24f9fc3eaddba7f5c985e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fedbc0a37d778d4994d88fb30141df67fa0af164016209cd9a06925ec5832944\",\"dweb:/ipfs/QmZGUnQ2QwXEnigoxgeY3XTT9Beq25Qqc2JChDZB421Z41\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessaging.sol\":{\"keccak256\":\"0x981baa05e8a64cc2b53da88a9ce344c781a2e9ca0980745aaf6ea51d12f27cf6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1e3c99103ebf2de8b8b2e37a3b2b3a2f2e1e13692a766140c7175526f0bd6e10\",\"dweb:/ipfs/QmWj9ywqb2JGtW5XtX57rqtKVAsgZvGbYxwFR47GujTAQy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0x5a3dda2ef57138250d9010c3aa48cb35e43418a2e843d681bbde4cd0917ed893\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://550432d6508c24688eb3ac2be8c716ba8a05a007f4b97e820104fabb67bba549\",\"dweb:/ipfs/QmPD6y5qSjf6iawxhUwF6r7D3BKtAtkSD8YcuSzi9ytVnt\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Identity.sol\":{\"keccak256\":\"0x4a9033b559baed9f8910ddd48d967ef68f01de5bf4ffa07125fb86aa1af2c28f\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://8b70c786ce4c318b685cd6232849fa7a36708ad07f465d406fcae1999fe88f94\",\"dweb:/ipfs/QmY4pA49TFURw1DJyZPWHyCZsrekAGFmPqxEYrUk5gbP8P\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/MGovernance.sol\":{\"keccak256\":\"0x5e1a7cf5656b902b825d3b813d922e8f5c40d0de83b4738ff4d81e783a6bd0f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2e41eef74234d5181c03169e38ec86fb8aa65afb83836869529e730906612303\",\"dweb:/ipfs/QmX41hrgYcbt6zWe8Zwg29SW5zQ8CEhQH22iYuh8RgUMqb\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/NamedStorage.sol\":{\"keccak256\":\"0x3f54ae3a92bad7691776ea029c35fa1cc564cf2de96bba6450be45f7890323f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f2523837a413a8d887b3ce83303dfbe02aa871f2ba8785e5bf591ce512e1d5b6\",\"dweb:/ipfs/Qmb5FMHMQdqFiQ62adiJ2Vjtviwe1WDRgDsVyb95MaXubS\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ProxySupport.sol\":{\"keccak256\":\"0x78588a99a0b092d6cd6a0ece5d81c08633c4de37ad99da365961f5bc2a9850c5\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://ff6a5b336528406297c1c5a8ee0a597ac508ddcd73d7f8d1c3e20671832ce448\",\"dweb:/ipfs/QmY8Xd1GnPjNtRLzaGWwyDtn3L2Q6JcpaRGfV4bru9vBwp\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetBridgeConstants.sol\":{\"keccak256\":\"0x668fb7f7d5b2fedef2a29c0ae14802e50d29442e5cf14e351bae396e56bfcdda\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://53120df95cdd3ca1be40c5e2b650c3a23f7d3ec99e9201b6df0e6f1c5da10e16\",\"dweb:/ipfs/QmUzUUi2sV5jLiwMwDCGYR41w335nMhANt8dmRnFrFyb4W\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":{\"keccak256\":\"0x0e1c10570337f95ec552a59c3986ac5e4039d4a5fda899907f2524c74fd17436\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://98051c44b9cfc161ab8229d8673285da92e54e349d45374be02cf76a0f3af443\",\"dweb:/ipfs/QmaRLYypBCdsHYWPJQEhb6aDvA9oqHAkvXw5iCumDHrUZy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenBridge.sol\":{\"keccak256\":\"0xc64d016372db61e53508c11f37c42042e095b90abde99b40ba36d24b1db2a9f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://052498f1f0782950b0bcc1e4b067be24e557ba8d78565f1949b22f5bea640da5\",\"dweb:/ipfs/QmcJUYH3o8nWGD7FYbDZKcr9ewM9gG6JfHHV1ttHPY6GPw\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenStorage.sol\":{\"keccak256\":\"0x3075caf8bbf51c5fca463d422aadd40133cecd4023779f38b412fac344ad2f91\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f4132da9136a7382fff75c30e135dd0605fe0536e4c5ec2588420742f8f1e77\",\"dweb:/ipfs/QmdetUQQrnNDpfdJnwrTz99DnSYp8aiYDE3DDPPwY73YzN\"]}},\"version\":1}", - "bytecode": "60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f", + "bytecode": { + "object": "60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f" + }, "deployedBytecode": "60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033", "sourceMap": "725:1217:13:-:0;;;;;;;;;;;;;2102:14:14;;;;;;;;;;;;;;;;;902:17:4;885:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;875:46;;;;;;;;848:73;;;;1085:4:1;1069:21;;;;;;875:46:4;;-1:-1:-1;1085:4:1;-1:-1:-1;725:1217:13;;-1:-1:-1;725:1217:13;;-1:-1:-1;;725:1217:13;;;;;", "deployedSourceMap": "725:1217:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6897:457:14;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6897:457:14;;;;;;-1:-1:-1;;;;;6897:457:14;;:::i;:::-;;1669:73:4;;;;;;;;;;;;;:::i;1859:129:15:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2168:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1590:73:4;;;;;;;;;;;;;:::i;7360:88:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7360:88:14;;:::i;1351:86:11:-;;;;;;;;;;;;;:::i;2059:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2059:1028:11;;-1:-1:-1;2059:1028:11;-1:-1:-1;2059:1028:11;:::i;8126:506:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8126:506:14;;;;;;;;;;;;:::i;1735:118:15:-;;;;;;;;;;;;;:::i;4306:366:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4306:366:14;;:::i;1356:109:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1356:109:4;-1:-1:-1;;;;;1356:109:4;;:::i;4968:182:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4968:182:14;;:::i;8638:468::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8638:468:14;;;;;;;;;;;;:::i;1498:103:13:-;;;;;;;;;;;;;;;;-1:-1:-1;1498:103:13;;:::i;5156:152:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5156:152:14;;:::i;923:507:13:-;;;;;;;;;;;;;;;;-1:-1:-1;923:507:13;;;;;;;:::i;1246:104:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1246:104:4;-1:-1:-1;;;;;1246:104:4;;:::i;1813:127:13:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:113:4;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1471:113:4;-1:-1:-1;;;;;1471:113:4;;:::i;6897:457:14:-;-1:-1:-1;;;;;7030:25:14;;7022:55;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;;;;7221:33;7236:6;7244:9;7221:14;:33::i;:::-;7264:35;7281:6;7289:9;7264:16;:35::i;:::-;7315:32;;;;;;;;-1:-1:-1;;;;;7315:32:14;;;;;;;;;;;;;6897:457;;:::o;1669:73:4:-;1716:19;:17;:19::i;:::-;1669:73::o;1859:129:15:-;1907:7;1933:48;1959:21;;;;;;;;;;;;;;;;;1933:25;:48::i;:::-;1926:55;;1859:129;;:::o;2168:118::-;2209:4;2232:47;2258:20;;;;;;;;;;;;;;;;;2232:25;:47::i;1590:73:4:-;1637:19;:17;:19::i;7360:88:14:-;7413:28;7422:6;7430:10;7413:8;:28::i;:::-;7360:88;:::o;1351:86:11:-;1402:4;1351:86;:::o;2059:1028::-;1150:5:1;-1:-1:-1;;;;;1150:22:1;1167:4;1150:22;;1142:57;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;;;;2137:17:11::1;2162:19;:17;:19::i;:::-;2157:2;:24:::0;;::::1;::::0;-1:-1:-1;2218:14:11;::::1;2250:31:::0;;::::1;;2242:63;;;::::0;;-1:-1:-1;;;2242:63:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2242:63:11;;;;;;;;;;;;;::::1;;2315:18;2347:32;2362:16:::0;2352:9;2347:4;;:32:::1;:::i;:::-;2336:55;;;;;;;::::0;::::1;;-1:-1:-1::0;2336:55:11::1;-1:-1:-1::0;;;;;2336:55:11::1;::::0;-1:-1:-1;2402:35:11::1;;2440:16;2446:9:::0;2402:35;2440:4;;:16:::1;:::i;:::-;2402:54;;;;2467:49;2495:20;;2467:27;:49::i;:::-;2527:23;;2553;:4:::0;2558:16;2553:4;;:23:::1;:::i;:::-;2527:49:::0;;-1:-1:-1;2527:49:11;-1:-1:-1;;;;;;2671:26:11;::::1;::::0;2667:122:::1;;2713:45;2737:10;2749:8;;2713:23;:45::i;:::-;2772:7;;;;;;;;;2667:122;2803:15;:13;:15::i;:::-;2799:282;;;2842:20:::0;;2834:53:::1;;;::::0;;-1:-1:-1;;;2834:53:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2834:53:11;;;;;;;;;;;;;::::1;;2799:282;;;2967:26;2984:8;;2967:16;:26::i;:::-;3007:33;3031:8;;3007:23;:33::i;:::-;3054:16;:14;:16::i;:::-;1209:1:1;;;;;;;;2059:1028:11::0;;:::o;8126:506:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8272:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8289:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8289:50:14::2;;8353:15;:13;:15::i;:::-;795:76:12;8412:42:14;8434:6;8442:11;8412:21;:42::i;:::-;8468:5;8289:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;8562:63:14::2;::::0;;;;;8289:194:::2;8562:63:::0;::::2;::::0;;;;;8606:11;;8586:10:::2;::::0;8562:63:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8126:506:::0;;;:::o;1735:118:15:-;1778:7;1804:42;1830:15;;;;;;;;;;;;;;;;;1804:25;:42::i;4306:366:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4398:15:14::1;:13;:15::i;:::-;4390:52;;;::::0;;-1:-1:-1;;;4390:52:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4460:32;4477:14;4460:16;:32::i;:::-;4452:68;;;::::0;;-1:-1:-1;;;4452:68:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4452:68:14;;;;;;;;;;;;;::::1;;4530:29;4544:14;4530:13;:29::i;:::-;4569:11;:9;:11::i;:::-;4595:35;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;4645:20;::::0;::::1;::::0;;;::::1;4306:366:::0;:::o;1356:109:4:-;1425:33;1446:11;1425:20;:33::i;4968:182:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5061:39:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5110:33;5126:16;5110:15;:33::i;8638:468::-:0;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8778:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8795:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8795:39:14::2;;8848:15;:13;:15::i;:::-;795:76:12;8907:42:14;8929:6;8937:11;8907:21;:42::i;:::-;8963:5;8795:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8989:36:14::2;::::0;-1:-1:-1;9006:6:14;9014:10:::2;8989:16;:36::i;:::-;9040:59;::::0;;;;;::::2;::::0;::::2;::::0;;;;;9080:11;;9060:10:::2;::::0;9040:59:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8638:468:::0;;;:::o;1498:103:13:-;1563:31;1571:9;1582:11;1563:7;:31::i;5156:152:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5239:29:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5278:23;5289:11;5278:10;:23::i;923:507:13:-:0;1118:6;1105:9;:19;;1097:50;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;;;;1171:9;:18;;;1334:17;:15;:17::i;:::-;1327:3;1303:21;:27;:48;;1295:81;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;;;;1386:37;1398:6;1406:11;1419:3;1386:11;:37::i;:::-;923:507;;;:::o;1246:104:4:-;1303:4;1326:17;1338:4;1326:11;:17::i;:::-;1319:24;1246:104;-1:-1:-1;;1246:104:4:o;1813:127:13:-;1865:13;1890:43;;;;;;;;;;;;;;;;;;;1813:127;:::o;1471:113:4:-;1542:35;1558:18;1542:15;:35::i;6479:412:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;6595:16:::1;::::0;;6609:1:::1;6595:16:::0;;;;;::::1;::::0;;;6568:24:::1;::::0;6595:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;6595:16:14::1;6568:43;;919:1:12;6621:7:14;6629:1;6621:10;;;;;;;;;;;;;:35;;;::::0;::::1;6687:9;-1:-1:-1::0;;;;;6679:18:14::1;6666:7;6674:1;6666:10;;;;;;;;;::::0;;::::1;::::0;;;;;:31;6707:10;;-1:-1:-1;;;;;6720:32:14;::::1;::::0;6707:7;;1014:1:12::1;::::0;6707:10:14;::::1;;;;;;;;;;:45;;;::::0;::::1;968:3:12;6775:6:14;:32;;6762:7;6770:1;6762:10;;;;;;;;;;;;;:45;;;::::0;::::1;6818:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6818:40:14::1;;6859:15;:13;:15::i;:::-;6876:7;6818:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;6479:412:14:o;1607:132:13:-;1696:36;-1:-1:-1;;;;;1696:28:13;;1725:6;1696:28;:36::i;2835:280:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;2898:32:5::1;2933:19;:17;:19::i;:::-;2966:21;::::0;::::1;::::0;2898:54;;-1:-1:-1;;;;;;2966:21:5::1;:37:::0;2962:147:::1;;3019:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3019:36:5::1;::::0;;3074:24:::1;::::0;::::1;::::0;3051:3:::1;::::0;3074:24:::1;941:1:9;2835:280:5:o:0;2061:209:10:-;2126:14;2152:12;2194:4;2177:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2177:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2167:33;;;;;;2152:48;;2249:4;2243:11;2233:21;;2219:45;;;;:::o;4233:382:5:-;4362:32;4397:19;:17;:19::i;:::-;4448:21;;;;;;-1:-1:-1;;;;;;4448:21:5;4434:10;:35;4426:71;;;;;-1:-1:-1;;;4426:71:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;4533:29;4551:10;4533:17;:29::i;:::-;4572:21;;:36;;-1:-1:-1;;;;;;4572:36:5;;;4233:382::o;3093:540:11:-;3221:36;:23;-1:-1:-1;;;;;3221:34:11;;:36::i;:::-;3213:67;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;;;;3361:12;3375:23;3402;-1:-1:-1;;;;;3402:36:11;3475:24;;;3501:7;;3452:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3452:57:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3452:57:11;-1:-1:-1;;;;;;3452:57:11;;;;;;;;;3402:117;;;;3452:57;;3402:117;;-1:-1:-1;3402:117:11;;-1:-1:-1;3452:57:11;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;3452:57;3402:117;;;;;;;;;;-1:-1:-1;;3402:117:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:159;;;;3537:7;3553:10;3529:36;;;;;-1:-1:-1;;;3529:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3583:17:11;;:10;;:22;3575:51;;;;-1:-1:-1;;;3575:51:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3093:540;;;;;:::o;2232:286:14:-;2289:4;2310:25;:23;:25::i;:::-;2305:110;;2401:1;2359:19;:17;:19::i;:::-;-1:-1:-1;;;;;2359:44:14;;;2351:53;;;;2305:110;2474:1;2432:19;:17;:19::i;:::-;-1:-1:-1;;;;;2432:44:14;;;2431:80;;;;-1:-1:-1;2508:1:14;2482:14;:12;:14::i;:::-;-1:-1:-1;;;;;2482:28:14;;;2424:87;;2232:286;:::o;2625:564::-;2736:2;2721:17;;2713:47;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;;;;2771:21;2794:26;2835:4;;2824:36;;;;;;;;;;-1:-1:-1;;;;;;2824:36:14;;;;;-1:-1:-1;2824:36:14;;;;;;;-1:-1:-1;2874:25:14;:23;:25::i;:::-;2870:225;;;2923:26;:13;-1:-1:-1;;;;;2923:24:14;;:26::i;:::-;2915:67;;;;;-1:-1:-1;;;2915:67:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;2870:225;;;-1:-1:-1;;;;;3021:27:14;;;3013:71;;;;;-1:-1:-1;;;3013:71:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:31;:18;-1:-1:-1;;;;;3112:29:14;;:31::i;:::-;3104:78;;;;-1:-1:-1;;;3104:78:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:564;;;;:::o;3541:263::-;3624:21;3647:26;3688:4;;3677:36;;;;;;;;;;-1:-1:-1;;;;;;3677:36:14;;;;;-1:-1:-1;3677:36:14;;;;;;;-1:-1:-1;3723:27:14;3677:36;3723:12;:27::i;:::-;3760:37;3778:18;3760:17;:37::i;2249:317:5:-;2294:32;2329:19;:17;:19::i;:::-;2367:15;;;;;;-1:-1:-1;;;;2367:15:5;;;;2366:16;2358:48;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;;;;2434:4;2416:15;;:22;;-1:-1:-1;;;;2416:22:5;-1:-1:-1;;;2416:22:5;;;2530:29;2548:10;2530:17;:29::i;2292:164:15:-;2337:35;2391:58;2425:23;;;;;;;;;;;;;;;;;2391:33;:58::i;1994:168::-;2046:18;2102:52;2131:22;;;;;;;;;;;;;;;;;2102:28;:52::i;1609:120::-;1657:7;1683:39;1709:12;;;;;;;;;;;;;;;;;1683:25;:39::i;5314:364:14:-;5487:16;;;5501:1;5487:16;;;;;;;;;5428;;;;5487;;;;5428;;5487;;;;;-1:-1:-1;5487:16:14;5460:43;;5526:11;5513:7;5521:1;5513:10;;;;;;;;;;;;;;;;;:24;5547:10;;-1:-1:-1;;;;;5560:32:14;;;5547:7;;5590:1;;5547:10;;;;;;;;;;;:45;;;;;968:3:12;5615:6:14;:32;;5602:7;5610:1;5602:10;;;;;;;;;;;;;;;;;:45;5664:7;5314:364;-1:-1:-1;;;5314:364:14:o;2572:189:5:-;2639:4;2655:32;2690:19;:17;:19::i;:::-;-1:-1:-1;;;;;2726:28:5;;;;:22;:28;;;;;;;;-1:-1:-1;;2726:28:5;;;;;;;2572:189::o;3810:155:14:-;3878:4;3914:1;3902:9;:13;:55;;;;-1:-1:-1;;;;;;;;3919:38:14;3810:155::o;2621:114:15:-;2678:50;2708:12;;;;;;;;;;;;;;;;;2722:5;2678:29;:50::i;3129:107::-;3176:53;3202:20;;;;;;;;;;;;;;;;;3224:4;3176:25;:53::i;3121:447:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;3206:32:5::1;3241:19;:17;:19::i;:::-;3206:54:::0;-1:-1:-1;;;;;;3278:27:5;::::1;3270:51;;;::::0;;-1:-1:-1;;;3270:51:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3270:51:5;;;;;;;;;;;;;::::1;;3340:24;3352:11;3340;:24::i;:::-;3339:25;3331:54;;;::::0;;-1:-1:-1;;;3331:54:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3331:54:5;;;;;;;;;;;;;::::1;;3403:21;::::0;::::1;::::0;-1:-1:-1;;;;;3403:21:5::1;:37:::0;3395:73:::1;;;::::0;;-1:-1:-1;;;3395:73:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3478:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3478:35:5;::::1;-1:-1:-1::0;;;;;;3478:35:5;;::::1;::::0;::::1;::::0;;;3528:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;941:1:9;3121:447:5::0;:::o;2857:121:15:-;2916:55;2942:21;;;;;;;;;;;;;;;;;2965:5;2916:25;:55::i;2741:110::-;2795:49;2821:15;;;;;;;;;;;;;;;;;2838:5;2795:25;:49::i;5684:789:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;5832:1:::1;5823:6;:10;5815:35;;;::::0;;-1:-1:-1;;;5815:35:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5815:35:14;;;;;;;;;;;;;::::1;;5881:3;5868:9;:16;;5860:51;;;::::0;;-1:-1:-1;;;5860:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5860:51:14;;;;;;;;;;;;;::::1;;5929:29;5946:11;5929:16;:29::i;:::-;5921:65;;;::::0;;-1:-1:-1;;;5921:65:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5921:65:14;;;;;;;;;;;;;::::1;;6014:12;:10;:12::i;:::-;6004:6;:22;;5996:71;;;;-1:-1:-1::0;;;5996:71:14::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6081:13;6098:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6098:35:14::1;;6141:3;6159:15;:13;:15::i;:::-;795:76:12;6218:42:14;6240:6;6248:11;6218:21;:42::i;:::-;6098:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6098:172:14::1;;::::0;;-1:-1:-1;6319:3:14::1;6288:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;6288:19:14::1;:35;6280:74;;;::::0;;-1:-1:-1;;;6280:74:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6386:10;6364:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;:32;;-1:-1:-1;;;;;;6364:32:14::1;-1:-1:-1::0;;;;;6364:32:14;;;::::1;::::0;;;::::1;::::0;;;6411:55;;;;;;;::::1;::::0;;;;;;;;;;;6442:11;;6422:10:::1;::::0;6411:55:::1;::::0;;;;;;;;::::1;4050:1;5684:789:::0;;;:::o;4672:402:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4767:10:5::1;-1:-1:-1::0;;;;;4767:32:5;::::1;;;4759:65;;;::::0;;-1:-1:-1;;;4759:65:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4759:65:5;;;;;;;;;;;;;::::1;;4834:32;4869:19;:17;:19::i;:::-;4834:54;;4906:31;4918:18;4906:11;:31::i;:::-;4898:56;;;::::0;;-1:-1:-1;;;4898:56:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4898:56:5;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4964:42:5;::::1;5009:5;4964:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4964:50:5::1;::::0;;5029:38;;;;;;;::::1;::::0;;;;;;;;::::1;941:1:9;4672:402:5::0;:::o;1138:251:0:-;1224:11;1220:24;;1237:7;;1220:24;1272:33;;1254:12;;-1:-1:-1;;;;;1272:14:0;;;1294:6;;1254:12;1272:33;1254:12;1272:33;1294:6;1272:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1253:52;;;1351:7;1343:39;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;;;1023:217:4;1147:24;;1190:44::o;3893:334:5:-;3968:24;3980:11;3968;:24::i;:::-;3967:25;3959:54;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;;;;4023:32;4058:19;:17;:19::i;:::-;-1:-1:-1;;;;;4087:35:5;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4087:42:5;4125:4;4087:42;;;4185:35;;;;;;;4023:54;;-1:-1:-1;4185:35:5;;;;;;;;;3893:334;;:::o;942:190:0:-;1071:20;1117:8;;;942:190::o;1476:127:15:-;1523:7;1549:47;1578:17;;;;;;;;;;;;;;;;;1549:28;:47::i;2486:129::-;2546:62;2579:17;;;;;;;;;;;;;;;;;2598:9;2546:32;:62::i;2984:139::-;3049:67;3082:22;;;;;;;;;;;;;;;;;3106:9;3049:32;:67::i;1462:295:10:-;1559:50;1625:16;1671:4;1654:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1654:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1644:33;;;;;;1625:52;;1733:8;1710:31;;1696:55;;;;:::o;2474:169::-;2562:18;2575:4;2562:12;:18::i;:::-;:23;2554:47;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;;;;2611:25;2624:4;2630:5;3475:189;3548:12;3590:4;3573:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3573:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3563:33;;;;;;3548:48;;3642:5;3636:4;3629:19;3615:43;;;:::o;3068:189::-;3192:3;3159:21;3175:4;3159:15;:21::i;:::-;-1:-1:-1;;;;;3159:37:10;;3151:61;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", From f2e1eb0f506585f3a46eed1c7d8207e3f01b08e6 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Wed, 6 Mar 2024 23:27:36 +0530 Subject: [PATCH 07/31] add: methods to eth bridge --- .../src/interfaces/eth_bridge.rs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index 509a830..f0d58b2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -11,6 +11,10 @@ use crate::Error; abigen!( StarknetEthBridge, r#"[ + function setMaxTotalBalance(uint256 maxTotalBalance_) external onlyGovernance + function setMaxDeposit(uint256 maxDeposit_) external onlyGovernance + function setL2TokenBridge(uint256 l2TokenBridge_) external onlyGovernance + function deposit(uint256 amount, uint256 l2Recipient) public payable override function identify() external pure override returns (string memory) @@ -19,6 +23,9 @@ abigen!( #[async_trait] pub trait StarknetEthBridgeTrait { + async fn set_max_total_balance(&self, max_total_balance: U256) -> Result, Error>; + async fn set_max_deposit(&self, max_deposit: U256) -> Result, Error>; + async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error>; async fn identify(&self) -> Result>; } @@ -28,6 +35,36 @@ impl StarknetEthBridgeTrait for T where T: AsRef> + Send + Sync, { + async fn set_max_total_balance(&self, max_total_balance: U256) -> Result, Error> { + self.as_ref() + .set_max_total_balance(max_total_balance) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_max_deposit(&self, max_deposit: U256) -> Result, Error> { + self.as_ref() + .set_max_deposit(max_deposit) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error> { + self.as_ref() + .set_l2_token_bridge(l2_token_bridge) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error> { self.as_ref() .deposit(amount, l2recipient) From 64a466cf2467b1ce55a29486904a80bd04bd1725 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 7 Mar 2024 01:54:25 +0530 Subject: [PATCH 08/31] add: add fees to eth bridge payable function --- .../starknet-core-contract-client/src/interfaces/eth_bridge.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index f0d58b2..e11f3a2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -65,9 +65,10 @@ impl StarknetEthBridgeTrait for T .map_err(Into::into) } - async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error> { + async fn deposit(&self, amount: U256, l2recipient: U256, fee: U256) -> Result, Error> { self.as_ref() .deposit(amount, l2recipient) + .value(fee) .send() .await .map_err(Into::>::into)? From 90c36eeefcff69263d694d148f6b30d5181a81ce Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 7 Mar 2024 01:55:31 +0530 Subject: [PATCH 09/31] add: add fees to eth bridge payable function --- .../starknet-core-contract-client/src/interfaces/eth_bridge.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index e11f3a2..252a696 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -26,7 +26,7 @@ pub trait StarknetEthBridgeTrait { async fn set_max_total_balance(&self, max_total_balance: U256) -> Result, Error>; async fn set_max_deposit(&self, max_deposit: U256) -> Result, Error>; async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; - async fn deposit(&self, amount: U256, l2recipient: U256) -> Result, Error>; + async fn deposit(&self, amount: U256, l2recipient: U256, fee: U256) -> Result, Error>; async fn identify(&self) -> Result>; } From d646677ad0d1cc29697e3be59429962b397c2fee Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 7 Mar 2024 16:55:13 +0530 Subject: [PATCH 10/31] add: methods to token bridge --- crates/sandbox/src/unsafe_proxy.rs | 2 -- .../src/clients/token_bridge.rs | 21 +++++++------------ .../starknet-core-contract-client/src/lib.rs | 7 ++++--- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index 838e5dd..dfb7700 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -47,14 +47,12 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the contracts required to bridge ERC20 token from L1 - let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; let token_contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; Ok(StarknetTokenBridgeContractClient::new( - core_contract.address(), manager_contract.address(), registry_contract.address(), token_bridge_contract.address(), diff --git a/crates/starknet-core-contract-client/src/clients/token_bridge.rs b/crates/starknet-core-contract-client/src/clients/token_bridge.rs index e1b1fcc..08fcedb 100644 --- a/crates/starknet-core-contract-client/src/clients/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/token_bridge.rs @@ -1,14 +1,13 @@ use std::sync::Arc; use crate::{interfaces::{ - DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetMessaging, StarknetTokenBridge + DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetTokenBridge }, LocalWalletSignerMiddleware, StarknetBridgeContractClient}; use ethers::types::Address; /// Client to interact with a Token Bridge (ERC20) pub struct StarknetTokenBridgeContractClient { - messaging: StarknetMessaging, manager: StarkgateManager, registry: StarkgateRegistry, token_bridge: StarknetTokenBridge, @@ -16,9 +15,8 @@ pub struct StarknetTokenBridgeContractClient { } impl StarknetTokenBridgeContractClient { - pub fn new(messaging: Address, manager: Address, registry: Address, token_bridge: Address, dai: Address, client: Arc) -> Self { + pub fn new(manager: Address, registry: Address, token_bridge: Address, dai: Address, client: Arc) -> Self { Self { - messaging: StarknetMessaging::new(messaging, client.clone()), manager: StarkgateManager::new(manager, client.clone()), registry: StarkgateRegistry::new(registry, client.clone()), token_bridge: StarknetTokenBridge::new(token_bridge, client.clone()), @@ -27,12 +25,6 @@ impl StarknetTokenBridgeContractClient { } } -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &StarknetMessaging { - &self.messaging - } -} - impl AsRef> for StarknetTokenBridgeContractClient { fn as_ref(&self) -> &StarkgateManager { &self.manager @@ -70,14 +62,17 @@ impl StarknetBridgeContractClient for StarknetTokenBridgeContractClient { self.registry.address() } - fn messaging(&self) -> Address { - self.messaging.address() + fn token(&self) -> Address { + self.erc20_token.address() } fn manager_client(&self) -> Arc { self.manager.client() } - fn client(&self) -> Arc { + fn registry_client(&self) -> Arc { self.registry.client() } + fn bridge_client(&self) -> Arc { self.token_bridge.client() } + + fn token_client(&self) -> Arc { self.erc20_token.client() } } \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 3622a53..acd7069 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -31,10 +31,11 @@ pub trait StarknetBridgeContractClient { fn registry(&self) -> Address; - fn messaging(&self) -> Address; + fn token(&self) -> Address; fn manager_client(&self) -> Arc; - - fn client(&self) -> Arc; + fn registry_client(&self) -> Arc; + fn bridge_client(&self) -> Arc; + fn token_client(&self) -> Arc; } \ No newline at end of file From f9a10a8182f20adbf0ab5278108ff56b5194fb8e Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 7 Mar 2024 23:08:46 +0530 Subject: [PATCH 11/31] refactor --- crates/sandbox/src/unsafe_proxy.rs | 47 ++++++++++++--- .../src/clients/dai_erc20.rs | 43 ++++++++++++++ .../src/clients/eth_bridge.rs | 4 +- .../src/clients/mod.rs | 7 +++ .../src/clients/sovereign.rs | 4 +- .../src/clients/starkgate_manager.rs | 43 ++++++++++++++ .../src/clients/starkgate_registry.rs | 42 ++++++++++++++ .../src/clients/token_bridge.rs | 58 ++++--------------- .../starknet-core-contract-client/src/lib.rs | 24 +------- 9 files changed, 190 insertions(+), 82 deletions(-) create mode 100644 crates/starknet-core-contract-client/src/clients/dai_erc20.rs create mode 100644 crates/starknet-core-contract-client/src/clients/starkgate_manager.rs create mode 100644 crates/starknet-core-contract-client/src/clients/starkgate_registry.rs diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index dfb7700..faffc74 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use ethers::abi::Tokenize; use ethers::contract::ContractInstance; -use starknet_core_contract_client::clients::{StarknetSovereignContractClient, StarknetEthBridgeContractClient, StarknetTokenBridgeContractClient}; +use starknet_core_contract_client::clients::{StarknetSovereignContractClient, StarknetEthBridgeContractClient, StarknetTokenBridgeContractClient, StarkgateManagerContractClient, StarkgateRegistryContractClient, DaiERC20ContractClient}; use crate::{deploy_contract, Error, LocalWalletSignerMiddleware}; @@ -22,7 +22,7 @@ const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { - // First we deploy the Starknet core contract (no explicit contructor) + // Deploy the Starknet core contract (no explicit contructor) let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; Ok(StarknetSovereignContractClient::new( @@ -34,7 +34,7 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc ) -> Result { - // First we deploy the Eth Bridge contract (no explicit contructor) + // Deploy the Eth Bridge contract (no explicit contructor) let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; Ok(StarknetEthBridgeContractClient::new( @@ -43,24 +43,53 @@ pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( )) } -pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( +pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc -) -> Result { - // Deploy the contracts required to bridge ERC20 token from L1 +) -> Result { + // Deploy the Starkgate Manager contract (no explicit contructor) let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; + + Ok(StarkgateManagerContractClient::new( + manager_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_starkgate_registry_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Starkgate Registry contract (no explicit contructor) let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; + + Ok(StarkgateRegistryContractClient::new( + registry_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( + client: Arc +) -> Result { let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; - let token_contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; Ok(StarknetTokenBridgeContractClient::new( - manager_contract.address(), - registry_contract.address(), token_bridge_contract.address(), + client.clone(), + )) +} + +pub async fn deploy_dai_erc20_behind_unsafe_proxy( + client: Arc +) -> Result { + let token_contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; + + Ok(DaiERC20ContractClient::new( token_contract.address(), client.clone(), )) } + pub async fn deploy_contract_behind_unsafe_proxy( client: Arc, contract_path: &str, diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs new file mode 100644 index 0000000..1166f6a --- /dev/null +++ b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs @@ -0,0 +1,43 @@ +use std::sync::Arc; + +use crate::{interfaces::{ + DaiERC20Token, ProxySupport +}, LocalWalletSignerMiddleware, StarknetContractClient}; + +use ethers::types::Address; + +pub struct DaiERC20ContractClient { + erc20_token: DaiERC20Token, + proxy_support: ProxySupport, +} + +impl DaiERC20ContractClient { + pub fn new(address: Address, client: Arc) -> Self { + Self { + erc20_token: DaiERC20Token::new(address, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), + } + } +} + +impl AsRef> for DaiERC20ContractClient { + fn as_ref(&self) -> &DaiERC20Token { + &self.erc20_token + } +} + +impl AsRef> for DaiERC20ContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support + } +} + +impl StarknetContractClient for DaiERC20ContractClient { + fn address(&self) -> Address { + self.erc20_token.address() + } + + fn client(&self) -> Arc { + self.erc20_token.client() + } +} diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index c29db44..c1692ac 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::{interfaces::{StarknetEthBridge, ProxySupport}, LocalWalletSignerMiddleware, StarknetLegacyBridgeContractClient}; +use crate::{interfaces::{StarknetEthBridge, ProxySupport}, LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::abi::Address; @@ -31,7 +31,7 @@ impl AsRef> for StarknetEthBridgeContr } } -impl StarknetLegacyBridgeContractClient for StarknetEthBridgeContractClient { +impl StarknetContractClient for StarknetEthBridgeContractClient { fn address(&self) -> Address { self.eth_bridge.address() } diff --git a/crates/starknet-core-contract-client/src/clients/mod.rs b/crates/starknet-core-contract-client/src/clients/mod.rs index 04b22c0..0d279ad 100644 --- a/crates/starknet-core-contract-client/src/clients/mod.rs +++ b/crates/starknet-core-contract-client/src/clients/mod.rs @@ -2,8 +2,15 @@ mod sovereign; mod validity; mod eth_bridge; mod token_bridge; +mod starkgate_manager; +mod starkgate_registry; + +mod dai_erc20; pub use sovereign::*; pub use validity::*; pub use eth_bridge::*; +pub use starkgate_manager::*; +pub use starkgate_registry::*; pub use token_bridge::*; +pub use dai_erc20::*; diff --git a/crates/starknet-core-contract-client/src/clients/sovereign.rs b/crates/starknet-core-contract-client/src/clients/sovereign.rs index 8da2a6f..a795400 100644 --- a/crates/starknet-core-contract-client/src/clients/sovereign.rs +++ b/crates/starknet-core-contract-client/src/clients/sovereign.rs @@ -5,7 +5,7 @@ use crate::{ GovernedFinalizable, Operator, ProxySupport, StarknetGovernance, StarknetMessaging, StarknetSovereignContract, }, - LocalWalletSignerMiddleware, StarknetCoreContractClient, + LocalWalletSignerMiddleware, StarknetContractClient, }; use ethers::types::Address; @@ -65,7 +65,7 @@ impl AsRef> for StarknetSoverei } } -impl StarknetCoreContractClient for StarknetSovereignContractClient { +impl StarknetContractClient for StarknetSovereignContractClient { fn address(&self) -> Address { self.core_contract.address() } diff --git a/crates/starknet-core-contract-client/src/clients/starkgate_manager.rs b/crates/starknet-core-contract-client/src/clients/starkgate_manager.rs new file mode 100644 index 0000000..ec503be --- /dev/null +++ b/crates/starknet-core-contract-client/src/clients/starkgate_manager.rs @@ -0,0 +1,43 @@ +use std::sync::Arc; + +use crate::{interfaces::{ + StarkgateManager, ProxySupport +}, LocalWalletSignerMiddleware, StarknetContractClient}; + +use ethers::types::Address; + +pub struct StarkgateManagerContractClient { + manager: StarkgateManager, + proxy_support: ProxySupport, +} + +impl StarkgateManagerContractClient { + pub fn new(address: Address, client: Arc) -> Self { + Self { + manager: StarkgateManager::new(address, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), + } + } +} + +impl AsRef> for StarkgateManagerContractClient { + fn as_ref(&self) -> &StarkgateManager { + &self.manager + } +} + +impl AsRef> for StarkgateManagerContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support + } +} + +impl StarknetContractClient for StarkgateManagerContractClient { + fn address(&self) -> Address { + self.manager.address() + } + + fn client(&self) -> Arc { + self.manager.client() + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/clients/starkgate_registry.rs b/crates/starknet-core-contract-client/src/clients/starkgate_registry.rs new file mode 100644 index 0000000..8408864 --- /dev/null +++ b/crates/starknet-core-contract-client/src/clients/starkgate_registry.rs @@ -0,0 +1,42 @@ +use std::sync::Arc; + +use crate::{interfaces::{ + StarkgateRegistry, ProxySupport +}, LocalWalletSignerMiddleware, StarknetContractClient}; + +use ethers::types::Address; + +pub struct StarkgateRegistryContractClient { + registry: StarkgateRegistry, + proxy_support: ProxySupport, +} + +impl StarkgateRegistryContractClient { + pub fn new(address: Address, client: Arc) -> Self { + Self { + registry: StarkgateRegistry::new(address, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), + } + } +} +impl AsRef> for StarkgateRegistryContractClient { + fn as_ref(&self) -> &StarkgateRegistry { + &self.registry + } +} + +impl AsRef> for StarkgateRegistryContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support + } +} + +impl StarknetContractClient for StarkgateRegistryContractClient { + fn address(&self) -> Address { + self.registry.address() + } + + fn client(&self) -> Arc { + self.registry.client() + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/clients/token_bridge.rs b/crates/starknet-core-contract-client/src/clients/token_bridge.rs index 08fcedb..8e2ad46 100644 --- a/crates/starknet-core-contract-client/src/clients/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/token_bridge.rs @@ -1,78 +1,44 @@ use std::sync::Arc; use crate::{interfaces::{ - DaiERC20Token, StarkgateManager, StarkgateRegistry, StarknetTokenBridge -}, LocalWalletSignerMiddleware, StarknetBridgeContractClient}; + StarknetTokenBridge, ProxySupport +}, LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; /// Client to interact with a Token Bridge (ERC20) pub struct StarknetTokenBridgeContractClient { - manager: StarkgateManager, - registry: StarkgateRegistry, token_bridge: StarknetTokenBridge, - erc20_token: DaiERC20Token, + proxy_support: ProxySupport, } impl StarknetTokenBridgeContractClient { - pub fn new(manager: Address, registry: Address, token_bridge: Address, dai: Address, client: Arc) -> Self { + pub fn new(address: Address, client: Arc) -> Self { Self { - manager: StarkgateManager::new(manager, client.clone()), - registry: StarkgateRegistry::new(registry, client.clone()), - token_bridge: StarknetTokenBridge::new(token_bridge, client.clone()), - erc20_token: DaiERC20Token::new(dai, client.clone()), + token_bridge: StarknetTokenBridge::new(address, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), } } } -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &StarkgateManager { - &self.manager - } -} - -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &StarkgateRegistry { - &self.registry - } -} - impl AsRef> for StarknetTokenBridgeContractClient { fn as_ref(&self) -> &StarknetTokenBridge { &self.token_bridge } } -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &DaiERC20Token { - &self.erc20_token +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support } } -impl StarknetBridgeContractClient for StarknetTokenBridgeContractClient { - fn address(&self) -> Address { +impl StarknetContractClient for StarknetTokenBridgeContractClient { + fn address(&self) -> ethers::abi::Address { self.token_bridge.address() } - fn manager(&self) -> Address { - self.manager.address() - } - - fn registry(&self) -> Address { - self.registry.address() - } - - fn token(&self) -> Address { - self.erc20_token.address() - } - - fn manager_client(&self) -> Arc { - self.manager.client() - } - fn registry_client(&self) -> Arc { self.registry.client() } - fn bridge_client(&self) -> Arc { + fn client(&self) -> Arc { self.token_bridge.client() } - - fn token_client(&self) -> Arc { self.erc20_token.client() } } \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index acd7069..64187e0 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -13,29 +13,7 @@ use ethers::types::Address; pub type LocalWalletSignerMiddleware = SignerMiddleware, LocalWallet>; -pub trait StarknetCoreContractClient { +pub trait StarknetContractClient { fn address(&self) -> Address; fn client(&self) -> Arc; } - -pub trait StarknetLegacyBridgeContractClient { - fn address(&self) -> Address; - - fn client(&self) -> Arc; -} - -pub trait StarknetBridgeContractClient { - fn address(&self) -> Address; - - fn manager(&self) -> Address; - - fn registry(&self) -> Address; - - fn token(&self) -> Address; - - fn manager_client(&self) -> Arc; - fn registry_client(&self) -> Arc; - fn bridge_client(&self) -> Arc; - fn token_client(&self) -> Arc; - -} \ No newline at end of file From bd3f2ad3bfcaa8b503b67bed98dc45025c1b90da Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 7 Mar 2024 23:56:16 +0530 Subject: [PATCH 12/31] update: abi compiles --- crates/sandbox/artifacts/Dai.json | 153 +- .../sandbox/artifacts/StarkgateManager.json | 4 +- .../sandbox/artifacts/StarkgateRegistry.json | 4 +- .../sandbox/artifacts/StarknetEthBridge.json | 1363 +---------------- .../artifacts/StarknetTokenBridge.json | 4 +- 5 files changed, 109 insertions(+), 1419 deletions(-) diff --git a/crates/sandbox/artifacts/Dai.json b/crates/sandbox/artifacts/Dai.json index 72e50e7..fc3fba7 100644 --- a/crates/sandbox/artifacts/Dai.json +++ b/crates/sandbox/artifacts/Dai.json @@ -1,5 +1,96 @@ { "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientBalance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC20InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC20InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC20InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "ERC20InvalidSpender", + "type": "error" + }, { "anonymous": false, "inputs": [ @@ -130,54 +221,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "name", @@ -221,12 +264,12 @@ "inputs": [ { "internalType": "address", - "name": "recipient", + "name": "to", "type": "address" }, { "internalType": "uint256", - "name": "amount", + "name": "value", "type": "uint256" } ], @@ -245,17 +288,17 @@ "inputs": [ { "internalType": "address", - "name": "sender", + "name": "from", "type": "address" }, { "internalType": "address", - "name": "recipient", + "name": "to", "type": "address" }, { "internalType": "uint256", - "name": "amount", + "name": "value", "type": "uint256" } ], @@ -271,5 +314,7 @@ "type": "function" } ], - "bytecode": null + "bytecode": { + "object": "0x608060405234801562000010575f80fd5b5060408051808201825260038082526244414960e81b602080840182905284518086019095528285528401529091906200004b83826200028d565b5060046200005a82826200028d565b505050620000783368056bc75e2d631000006200007e60201b60201c565b6200037b565b6001600160a01b038216620000ad5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620000ba5f8383620000be565b5050565b6001600160a01b038316620000ec578060025f828254620000e0919062000355565b909155506200015e9050565b6001600160a01b0383165f9081526020819052604090205481811015620001405760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000a4565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200017c576002805482900390556200019a565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001e091815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021657607f821691505b6020821081036200023557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000288575f81815260208120601f850160051c81016020861015620002635750805b601f850160051c820191505b8181101562000284578281556001016200026f565b5050505b505050565b81516001600160401b03811115620002a957620002a9620001ed565b620002c181620002ba845462000201565b846200023b565b602080601f831160018114620002f7575f8415620002df5750858301515b5f19600386901b1c1916600185901b17855562000284565b5f85815260208120601f198616915b82811015620003275788860151825594840194600190910190840162000306565b50858210156200034557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200037557634e487b7160e01b5f52601160045260245ffd5b92915050565b6106f880620003895f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063313ce56711610063578063313ce567146100fa57806370a082311461010957806395d89b4114610131578063a9059cbb14610139578063dd62ed3e1461014c575f80fd5b806306fdde0314610094578063095ea7b3146100b257806318160ddd146100d557806323b872dd146100e7575b5f80fd5b61009c610184565b6040516100a99190610553565b60405180910390f35b6100c56100c03660046105b9565b610214565b60405190151581526020016100a9565b6002545b6040519081526020016100a9565b6100c56100f53660046105e1565b61022d565b604051601281526020016100a9565b6100d961011736600461061a565b6001600160a01b03165f9081526020819052604090205490565b61009c610250565b6100c56101473660046105b9565b61025f565b6100d961015a36600461063a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101939061066b565b80601f01602080910402602001604051908101604052809291908181526020018280546101bf9061066b565b801561020a5780601f106101e15761010080835404028352916020019161020a565b820191905f5260205f20905b8154815290600101906020018083116101ed57829003601f168201915b5050505050905090565b5f3361022181858561026c565b60019150505b92915050565b5f3361023a85828561027e565b6102458585856102fe565b506001949350505050565b6060600480546101939061066b565b5f336102218185856102fe565b610279838383600161035b565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146102f857818110156102ea57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6102f884848484035f61035b565b50505050565b6001600160a01b03831661032757604051634b637e8f60e11b81525f60048201526024016102e1565b6001600160a01b0382166103505760405163ec442f0560e01b81525f60048201526024016102e1565b61027983838361042d565b6001600160a01b0384166103845760405163e602df0560e01b81525f60048201526024016102e1565b6001600160a01b0383166103ad57604051634a1406b160e11b81525f60048201526024016102e1565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156102f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161041f91815260200190565b60405180910390a350505050565b6001600160a01b038316610457578060025f82825461044c91906106a3565b909155506104c79050565b6001600160a01b0383165f90815260208190526040902054818110156104a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016102e1565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e357600280548290039055610501565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054691815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561057e57858101830151858201604001528201610562565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146105b4575f80fd5b919050565b5f80604083850312156105ca575f80fd5b6105d38361059e565b946020939093013593505050565b5f805f606084860312156105f3575f80fd5b6105fc8461059e565b925061060a6020850161059e565b9150604084013590509250925092565b5f6020828403121561062a575f80fd5b6106338261059e565b9392505050565b5f806040838503121561064b575f80fd5b6106548361059e565b91506106626020840161059e565b90509250929050565b600181811c9082168061067f57607f821691505b60208210810361069d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561022757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ad7501d4e2e4e8e0b57900d45d00582d330a3f37cf6b79f50d34426273ce62f364736f6c63430008140033" + } } \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarkgateManager.json b/crates/sandbox/artifacts/StarkgateManager.json index ff0af6e..1921c10 100644 --- a/crates/sandbox/artifacts/StarkgateManager.json +++ b/crates/sandbox/artifacts/StarkgateManager.json @@ -639,5 +639,7 @@ "type": "function" } ], - "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + "bytecode": { + "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + } } \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarkgateRegistry.json b/crates/sandbox/artifacts/StarkgateRegistry.json index c38b4b9..402a37d 100644 --- a/crates/sandbox/artifacts/StarkgateRegistry.json +++ b/crates/sandbox/artifacts/StarkgateRegistry.json @@ -626,5 +626,7 @@ "type": "function" } ], - "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + "bytecode": { + "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + } } \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarknetEthBridge.json b/crates/sandbox/artifacts/StarknetEthBridge.json index 62ef854..91e0aea 100644 --- a/crates/sandbox/artifacts/StarknetEthBridge.json +++ b/crates/sandbox/artifacts/StarknetEthBridge.json @@ -493,1368 +493,7 @@ "type": "function" } ], - "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"LogBridgeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"LogDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"LogDepositReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetL2TokenBridge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"LogSetMaxTotalBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTotalBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"nominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"removeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2TokenBridge_\",\"type\":\"uint256\"}],\"name\":\"setL2TokenBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxDeposit_\",\"type\":\"uint256\"}],\"name\":\"setMaxDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTotalBalance_\",\"type\":\"uint256\"}],\"name\":\"setMaxTotalBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"identify()\":{\"notice\":\"Returns a string that identifies the contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":\"StarknetEthBridge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Addresses.sol\":{\"keccak256\":\"0x56bef89f8ea31235d57f914df9ff4b3a6bc1d53b30bf115c5fca1819b81547dc\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f82719c1528743d5628a680f4d4100fc87911172c2652acb3fff168030af3311\",\"dweb:/ipfs/QmdWKKQio8GKTjDwcCBjAJV55k3yzqkjTjVku4pxXAKdb2\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/BlockDirectCall.sol\":{\"keccak256\":\"0x8085363ea620123229c197af4927c2652c95b5eca5faa4a60f3a92ad8a088766\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://769a98556532f84b9b6b8dab46d7ea828d643ada2330c07e990832fcb465fb6e\",\"dweb:/ipfs/QmYpqmuZPcRFzB23sMRrqYTPTy4pHabNU9Rk6S1ikrvfRj\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/CairoConstants.sol\":{\"keccak256\":\"0x86600572702f4e5ace6de96d2945c80d1a788e93fccb7cd11a8d253fc335a9d6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1329f4f98cd64d0ebe38f04889174318e991b0db9a7369af07b6f26a938eedd8\",\"dweb:/ipfs/QmTtpFXF3TLFuDpzR9YhNFGysAzH625ffCXgmJNgawCEuL\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ContractInitializer.sol\":{\"keccak256\":\"0xe46eaaf290e13b86cc602a44cd9850001b8e29b57bb36b8666764b3afe8a2d22\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://a52dac66b9b861a7fbfe8437bd37b2c4c99014e197c5f3148286276c35572c8a\",\"dweb:/ipfs/QmXGY6Prs8dTM7qEUFYz57p5YaD1ZUJP5UA5Adtr1rufHz\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/GenericGovernance.sol\":{\"keccak256\":\"0x9e12b5127f8633966fe28226eb7a21298913c5b2d60e1b56e69427a5080afa76\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cfac1fc7f8644f9da51415286a7999ec0cf25429380aebaded1cbcf99e914ff5\",\"dweb:/ipfs/QmNZrpmPnLYAdFQ48baa1newh2RzNvcyNZtLKge1zp2DgC\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Governance.sol\":{\"keccak256\":\"0xf93e53aa3e40c1463e5f98be40520726df4a36176eb24f9fc3eaddba7f5c985e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fedbc0a37d778d4994d88fb30141df67fa0af164016209cd9a06925ec5832944\",\"dweb:/ipfs/QmZGUnQ2QwXEnigoxgeY3XTT9Beq25Qqc2JChDZB421Z41\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessaging.sol\":{\"keccak256\":\"0x981baa05e8a64cc2b53da88a9ce344c781a2e9ca0980745aaf6ea51d12f27cf6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1e3c99103ebf2de8b8b2e37a3b2b3a2f2e1e13692a766140c7175526f0bd6e10\",\"dweb:/ipfs/QmWj9ywqb2JGtW5XtX57rqtKVAsgZvGbYxwFR47GujTAQy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0x5a3dda2ef57138250d9010c3aa48cb35e43418a2e843d681bbde4cd0917ed893\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://550432d6508c24688eb3ac2be8c716ba8a05a007f4b97e820104fabb67bba549\",\"dweb:/ipfs/QmPD6y5qSjf6iawxhUwF6r7D3BKtAtkSD8YcuSzi9ytVnt\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Identity.sol\":{\"keccak256\":\"0x4a9033b559baed9f8910ddd48d967ef68f01de5bf4ffa07125fb86aa1af2c28f\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://8b70c786ce4c318b685cd6232849fa7a36708ad07f465d406fcae1999fe88f94\",\"dweb:/ipfs/QmY4pA49TFURw1DJyZPWHyCZsrekAGFmPqxEYrUk5gbP8P\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/MGovernance.sol\":{\"keccak256\":\"0x5e1a7cf5656b902b825d3b813d922e8f5c40d0de83b4738ff4d81e783a6bd0f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2e41eef74234d5181c03169e38ec86fb8aa65afb83836869529e730906612303\",\"dweb:/ipfs/QmX41hrgYcbt6zWe8Zwg29SW5zQ8CEhQH22iYuh8RgUMqb\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/NamedStorage.sol\":{\"keccak256\":\"0x3f54ae3a92bad7691776ea029c35fa1cc564cf2de96bba6450be45f7890323f9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://f2523837a413a8d887b3ce83303dfbe02aa871f2ba8785e5bf591ce512e1d5b6\",\"dweb:/ipfs/Qmb5FMHMQdqFiQ62adiJ2Vjtviwe1WDRgDsVyb95MaXubS\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/ProxySupport.sol\":{\"keccak256\":\"0x78588a99a0b092d6cd6a0ece5d81c08633c4de37ad99da365961f5bc2a9850c5\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://ff6a5b336528406297c1c5a8ee0a597ac508ddcd73d7f8d1c3e20671832ce448\",\"dweb:/ipfs/QmY8Xd1GnPjNtRLzaGWwyDtn3L2Q6JcpaRGfV4bru9vBwp\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetBridgeConstants.sol\":{\"keccak256\":\"0x668fb7f7d5b2fedef2a29c0ae14802e50d29442e5cf14e351bae396e56bfcdda\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://53120df95cdd3ca1be40c5e2b650c3a23f7d3ec99e9201b6df0e6f1c5da10e16\",\"dweb:/ipfs/QmUzUUi2sV5jLiwMwDCGYR41w335nMhANt8dmRnFrFyb4W\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol\":{\"keccak256\":\"0x0e1c10570337f95ec552a59c3986ac5e4039d4a5fda899907f2524c74fd17436\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://98051c44b9cfc161ab8229d8673285da92e54e349d45374be02cf76a0f3af443\",\"dweb:/ipfs/QmaRLYypBCdsHYWPJQEhb6aDvA9oqHAkvXw5iCumDHrUZy\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenBridge.sol\":{\"keccak256\":\"0xc64d016372db61e53508c11f37c42042e095b90abde99b40ba36d24b1db2a9f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://052498f1f0782950b0bcc1e4b067be24e557ba8d78565f1949b22f5bea640da5\",\"dweb:/ipfs/QmcJUYH3o8nWGD7FYbDZKcr9ewM9gG6JfHHV1ttHPY6GPw\"]},\"/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenStorage.sol\":{\"keccak256\":\"0x3075caf8bbf51c5fca463d422aadd40133cecd4023779f38b412fac344ad2f91\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f4132da9136a7382fff75c30e135dd0605fe0536e4c5ec2588420742f8f1e77\",\"dweb:/ipfs/QmdetUQQrnNDpfdJnwrTz99DnSYp8aiYDE3DDPPwY73YzN\"]}},\"version\":1}", "bytecode": { - "object": "60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f" - }, - "deployedBytecode": "60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033", - "sourceMap": "725:1217:13:-:0;;;;;;;;;;;;;2102:14:14;;;;;;;;;;;;;;;;;902:17:4;885:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;885:35:4;;;;;;875:46;;;;;;;;848:73;;;;1085:4:1;1069:21;;;;;;875:46:4;;-1:-1:-1;1085:4:1;-1:-1:-1;725:1217:13;;-1:-1:-1;725:1217:13;;-1:-1:-1;;725:1217:13;;;;;", - "deployedSourceMap": "725:1217:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6897:457:14;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6897:457:14;;;;;;-1:-1:-1;;;;;6897:457:14;;:::i;:::-;;1669:73:4;;;;;;;;;;;;;:::i;1859:129:15:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2168:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1590:73:4;;;;;;;;;;;;;:::i;7360:88:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7360:88:14;;:::i;1351:86:11:-;;;;;;;;;;;;;:::i;2059:1028::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2059:1028:11;;-1:-1:-1;2059:1028:11;-1:-1:-1;2059:1028:11;:::i;8126:506:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8126:506:14;;;;;;;;;;;;:::i;1735:118:15:-;;;;;;;;;;;;;:::i;4306:366:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4306:366:14;;:::i;1356:109:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1356:109:4;-1:-1:-1;;;;;1356:109:4;;:::i;4968:182:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4968:182:14;;:::i;8638:468::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8638:468:14;;;;;;;;;;;;:::i;1498:103:13:-;;;;;;;;;;;;;;;;-1:-1:-1;1498:103:13;;:::i;5156:152:14:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5156:152:14;;:::i;923:507:13:-;;;;;;;;;;;;;;;;-1:-1:-1;923:507:13;;;;;;;:::i;1246:104:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1246:104:4;-1:-1:-1;;;;;1246:104:4;;:::i;1813:127:13:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:113:4;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1471:113:4;-1:-1:-1;;;;;1471:113:4;;:::i;6897:457:14:-;-1:-1:-1;;;;;7030:25:14;;7022:55;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;-1:-1:-1;;;7022:55:14;;;;;;;;;;;;;;;7221:33;7236:6;7244:9;7221:14;:33::i;:::-;7264:35;7281:6;7289:9;7264:16;:35::i;:::-;7315:32;;;;;;;;-1:-1:-1;;;;;7315:32:14;;;;;;;;;;;;;6897:457;;:::o;1669:73:4:-;1716:19;:17;:19::i;:::-;1669:73::o;1859:129:15:-;1907:7;1933:48;1959:21;;;;;;;;;;;;;;;;;1933:25;:48::i;:::-;1926:55;;1859:129;;:::o;2168:118::-;2209:4;2232:47;2258:20;;;;;;;;;;;;;;;;;2232:25;:47::i;1590:73:4:-;1637:19;:17;:19::i;7360:88:14:-;7413:28;7422:6;7430:10;7413:8;:28::i;:::-;7360:88;:::o;1351:86:11:-;1402:4;1351:86;:::o;2059:1028::-;1150:5:1;-1:-1:-1;;;;;1150:22:1;1167:4;1150:22;;1142:57;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;-1:-1:-1;;;1142:57:1;;;;;;;;;;;;;;;2137:17:11::1;2162:19;:17;:19::i;:::-;2157:2;:24:::0;;::::1;::::0;-1:-1:-1;2218:14:11;::::1;2250:31:::0;;::::1;;2242:63;;;::::0;;-1:-1:-1;;;2242:63:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2242:63:11;;;;;;;;;;;;;::::1;;2315:18;2347:32;2362:16:::0;2352:9;2347:4;;:32:::1;:::i;:::-;2336:55;;;;;;;::::0;::::1;;-1:-1:-1::0;2336:55:11::1;-1:-1:-1::0;;;;;2336:55:11::1;::::0;-1:-1:-1;2402:35:11::1;;2440:16;2446:9:::0;2402:35;2440:4;;:16:::1;:::i;:::-;2402:54;;;;2467:49;2495:20;;2467:27;:49::i;:::-;2527:23;;2553;:4:::0;2558:16;2553:4;;:23:::1;:::i;:::-;2527:49:::0;;-1:-1:-1;2527:49:11;-1:-1:-1;;;;;;2671:26:11;::::1;::::0;2667:122:::1;;2713:45;2737:10;2749:8;;2713:23;:45::i;:::-;2772:7;;;;;;;;;2667:122;2803:15;:13;:15::i;:::-;2799:282;;;2842:20:::0;;2834:53:::1;;;::::0;;-1:-1:-1;;;2834:53:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2834:53:11;;;;;;;;;;;;;::::1;;2799:282;;;2967:26;2984:8;;2967:16;:26::i;:::-;3007:33;3031:8;;3007:23;:33::i;:::-;3054:16;:14;:16::i;:::-;1209:1:1;;;;;;;;2059:1028:11::0;;:::o;8126:506:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8272:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8289:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8289:50:14::2;;8353:15;:13;:15::i;:::-;795:76:12;8412:42:14;8434:6;8442:11;8412:21;:42::i;:::-;8468:5;8289:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;8562:63:14::2;::::0;;;;;8289:194:::2;8562:63:::0;::::2;::::0;;;;;8606:11;;8586:10:::2;::::0;8562:63:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8126:506:::0;;;:::o;1735:118:15:-;1778:7;1804:42;1830:15;;;;;;;;;;;;;;;;;1804:25;:42::i;4306:366:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4398:15:14::1;:13;:15::i;:::-;4390:52;;;::::0;;-1:-1:-1;;;4390:52:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4460:32;4477:14;4460:16;:32::i;:::-;4452:68;;;::::0;;-1:-1:-1;;;4452:68:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4452:68:14;;;;;;;;;;;;;::::1;;4530:29;4544:14;4530:13;:29::i;:::-;4569:11;:9;:11::i;:::-;4595:35;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;4645:20;::::0;::::1;::::0;;;::::1;4306:366:::0;:::o;1356:109:4:-;1425:33;1446:11;1425:20;:33::i;4968:182:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5061:39:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5110:33;5126:16;5110:15;:33::i;8638:468::-:0;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;8778:5:::1;4112:18;4133:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4133:19:14::1;::::0;-1:-1:-1;4170:26:14;4162:59:::1;;;::::0;;-1:-1:-1;;;4162:59:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4162:59:14;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4239:24:14;::::1;4253:10;4239:24;4231:51;;;::::0;;-1:-1:-1;;;4231:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4231:51:14;;;;;;;;;;;;;::::1;;8795:19:::2;:17;:19::i;:::-;-1:-1:-1::0;;;;;8795:39:14::2;;8848:15;:13;:15::i;:::-;795:76:12;8907:42:14;8929:6;8937:11;8907:21;:42::i;:::-;8963:5;8795:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;8989:36:14::2;::::0;-1:-1:-1;9006:6:14;9014:10:::2;8989:16;:36::i;:::-;9040:59;::::0;;;;;::::2;::::0;::::2;::::0;;;;;9080:11;;9060:10:::2;::::0;9040:59:::2;::::0;;;;;;;;;::::2;4050:1:::1;;8638:468:::0;;;:::o;1498:103:13:-;1563:31;1571:9;1582:11;1563:7;:31::i;5156:152:14:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;5239:29:14::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;5278:23;5289:11;5278:10;:23::i;923:507:13:-:0;1118:6;1105:9;:19;;1097:50;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;-1:-1:-1;;;1097:50:13;;;;;;;;;;;;;;;1171:9;:18;;;1334:17;:15;:17::i;:::-;1327:3;1303:21;:27;:48;;1295:81;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;-1:-1:-1;;;1295:81:13;;;;;;;;;;;;;;;1386:37;1398:6;1406:11;1419:3;1386:11;:37::i;:::-;923:507;;;:::o;1246:104:4:-;1303:4;1326:17;1338:4;1326:11;:17::i;:::-;1319:24;1246:104;-1:-1:-1;;1246:104:4:o;1813:127:13:-;1865:13;1890:43;;;;;;;;;;;;;;;;;;;1813:127;:::o;1471:113:4:-;1542:35;1558:18;1542:15;:35::i;6479:412:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;6595:16:::1;::::0;;6609:1:::1;6595:16:::0;;;;;::::1;::::0;;;6568:24:::1;::::0;6595:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;6595:16:14::1;6568:43;;919:1:12;6621:7:14;6629:1;6621:10;;;;;;;;;;;;;:35;;;::::0;::::1;6687:9;-1:-1:-1::0;;;;;6679:18:14::1;6666:7;6674:1;6666:10;;;;;;;;;::::0;;::::1;::::0;;;;;:31;6707:10;;-1:-1:-1;;;;;6720:32:14;::::1;::::0;6707:7;;1014:1:12::1;::::0;6707:10:14;::::1;;;;;;;;;;:45;;;::::0;::::1;968:3:12;6775:6:14;:32;;6762:7;6770:1;6762:10;;;;;;;;;;;;;:45;;;::::0;::::1;6818:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6818:40:14::1;;6859:15;:13;:15::i;:::-;6876:7;6818:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;6479:412:14:o;1607:132:13:-;1696:36;-1:-1:-1;;;;;1696:28:13;;1725:6;1696:28;:36::i;2835:280:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;2898:32:5::1;2933:19;:17;:19::i;:::-;2966:21;::::0;::::1;::::0;2898:54;;-1:-1:-1;;;;;;2966:21:5::1;:37:::0;2962:147:::1;;3019:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3019:36:5::1;::::0;;3074:24:::1;::::0;::::1;::::0;3051:3:::1;::::0;3074:24:::1;941:1:9;2835:280:5:o:0;2061:209:10:-;2126:14;2152:12;2194:4;2177:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2177:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2167:33;;;;;;2152:48;;2249:4;2243:11;2233:21;;2219:45;;;;:::o;4233:382:5:-;4362:32;4397:19;:17;:19::i;:::-;4448:21;;;;;;-1:-1:-1;;;;;;4448:21:5;4434:10;:35;4426:71;;;;;-1:-1:-1;;;4426:71:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;4533:29;4551:10;4533:17;:29::i;:::-;4572:21;;:36;;-1:-1:-1;;;;;;4572:36:5;;;4233:382::o;3093:540:11:-;3221:36;:23;-1:-1:-1;;;;;3221:34:11;;:36::i;:::-;3213:67;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;-1:-1:-1;;;3213:67:11;;;;;;;;;;;;;;;3361:12;3375:23;3402;-1:-1:-1;;;;;3402:36:11;3475:24;;;3501:7;;3452:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3452:57:11;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3452:57:11;-1:-1:-1;;;;;;3452:57:11;;;;;;;;;3402:117;;;;3452:57;;3402:117;;-1:-1:-1;3402:117:11;;-1:-1:-1;3452:57:11;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;;-1:-1:-1;3402:117:11;3452:57;3402:117;;;;;;;;;;-1:-1:-1;;3402:117:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:159;;;;3537:7;3553:10;3529:36;;;;;-1:-1:-1;;;3529:36:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3583:17:11;;:10;;:22;3575:51;;;;-1:-1:-1;;;3575:51:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3093:540;;;;;:::o;2232:286:14:-;2289:4;2310:25;:23;:25::i;:::-;2305:110;;2401:1;2359:19;:17;:19::i;:::-;-1:-1:-1;;;;;2359:44:14;;;2351:53;;;;2305:110;2474:1;2432:19;:17;:19::i;:::-;-1:-1:-1;;;;;2432:44:14;;;2431:80;;;;-1:-1:-1;2508:1:14;2482:14;:12;:14::i;:::-;-1:-1:-1;;;;;2482:28:14;;;2424:87;;2232:286;:::o;2625:564::-;2736:2;2721:17;;2713:47;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;-1:-1:-1;;;2713:47:14;;;;;;;;;;;;;;;2771:21;2794:26;2835:4;;2824:36;;;;;;;;;;-1:-1:-1;;;;;;2824:36:14;;;;;-1:-1:-1;2824:36:14;;;;;;;-1:-1:-1;2874:25:14;:23;:25::i;:::-;2870:225;;;2923:26;:13;-1:-1:-1;;;;;2923:24:14;;:26::i;:::-;2915:67;;;;;-1:-1:-1;;;2915:67:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;2870:225;;;-1:-1:-1;;;;;3021:27:14;;;3013:71;;;;;-1:-1:-1;;;3013:71:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:31;:18;-1:-1:-1;;;;;3112:29:14;;:31::i;:::-;3104:78;;;;-1:-1:-1;;;3104:78:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:564;;;;:::o;3541:263::-;3624:21;3647:26;3688:4;;3677:36;;;;;;;;;;-1:-1:-1;;;;;;3677:36:14;;;;;-1:-1:-1;3677:36:14;;;;;;;-1:-1:-1;3723:27:14;3677:36;3723:12;:27::i;:::-;3760:37;3778:18;3760:17;:37::i;2249:317:5:-;2294:32;2329:19;:17;:19::i;:::-;2367:15;;;;;;-1:-1:-1;;;;2367:15:5;;;;2366:16;2358:48;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;-1:-1:-1;;;2358:48:5;;;;;;;;;;;;;;;2434:4;2416:15;;:22;;-1:-1:-1;;;;2416:22:5;-1:-1:-1;;;2416:22:5;;;2530:29;2548:10;2530:17;:29::i;2292:164:15:-;2337:35;2391:58;2425:23;;;;;;;;;;;;;;;;;2391:33;:58::i;1994:168::-;2046:18;2102:52;2131:22;;;;;;;;;;;;;;;;;2102:28;:52::i;1609:120::-;1657:7;1683:39;1709:12;;;;;;;;;;;;;;;;;1683:25;:39::i;5314:364:14:-;5487:16;;;5501:1;5487:16;;;;;;;;;5428;;;;5487;;;;5428;;5487;;;;;-1:-1:-1;5487:16:14;5460:43;;5526:11;5513:7;5521:1;5513:10;;;;;;;;;;;;;;;;;:24;5547:10;;-1:-1:-1;;;;;5560:32:14;;;5547:7;;5590:1;;5547:10;;;;;;;;;;;:45;;;;;968:3:12;5615:6:14;:32;;5602:7;5610:1;5602:10;;;;;;;;;;;;;;;;;:45;5664:7;5314:364;-1:-1:-1;;;5314:364:14:o;2572:189:5:-;2639:4;2655:32;2690:19;:17;:19::i;:::-;-1:-1:-1;;;;;2726:28:5;;;;:22;:28;;;;;;;;-1:-1:-1;;2726:28:5;;;;;;;2572:189::o;3810:155:14:-;3878:4;3914:1;3902:9;:13;:55;;;;-1:-1:-1;;;;;;;;3919:38:14;3810:155::o;2621:114:15:-;2678:50;2708:12;;;;;;;;;;;;;;;;;2722:5;2678:29;:50::i;3129:107::-;3176:53;3202:20;;;;;;;;;;;;;;;;;3224:4;3176:25;:53::i;3121:447:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;3206:32:5::1;3241:19;:17;:19::i;:::-;3206:54:::0;-1:-1:-1;;;;;;3278:27:5;::::1;3270:51;;;::::0;;-1:-1:-1;;;3270:51:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3270:51:5;;;;;;;;;;;;;::::1;;3340:24;3352:11;3340;:24::i;:::-;3339:25;3331:54;;;::::0;;-1:-1:-1;;;3331:54:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3331:54:5;;;;;;;;;;;;;::::1;;3403:21;::::0;::::1;::::0;-1:-1:-1;;;;;3403:21:5::1;:37:::0;3395:73:::1;;;::::0;;-1:-1:-1;;;3395:73:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3478:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3478:35:5;::::1;-1:-1:-1::0;;;;;;3478:35:5;;::::1;::::0;::::1;::::0;;;3528:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;941:1:9;3121:447:5::0;:::o;2857:121:15:-;2916:55;2942:21;;;;;;;;;;;;;;;;;2965:5;2916:25;:55::i;2741:110::-;2795:49;2821:15;;;;;;;;;;;;;;;;;2838:5;2795:25;:49::i;5684:789:14:-;4011:10;:8;:10::i;:::-;4003:37;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;-1:-1:-1;;;4003:37:14;;;;;;;;;;;;;;;5832:1:::1;5823:6;:10;5815:35;;;::::0;;-1:-1:-1;;;5815:35:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5815:35:14;;;;;;;;;;;;;::::1;;5881:3;5868:9;:16;;5860:51;;;::::0;;-1:-1:-1;;;5860:51:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5860:51:14;;;;;;;;;;;;;::::1;;5929:29;5946:11;5929:16;:29::i;:::-;5921:65;;;::::0;;-1:-1:-1;;;5921:65:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5921:65:14;;;;;;;;;;;;;::::1;;6014:12;:10;:12::i;:::-;6004:6;:22;;5996:71;;;;-1:-1:-1::0;;;5996:71:14::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6081:13;6098:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6098:35:14::1;;6141:3;6159:15;:13;:15::i;:::-;795:76:12;6218:42:14;6240:6;6248:11;6218:21;:42::i;:::-;6098:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6098:172:14::1;;::::0;;-1:-1:-1;6319:3:14::1;6288:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;6288:19:14::1;:35;6280:74;;;::::0;;-1:-1:-1;;;6280:74:14;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6386:10;6364:12;:10;:12::i;:::-;:19;::::0;;;::::1;::::0;;;;;;;;:32;;-1:-1:-1;;;;;;6364:32:14::1;-1:-1:-1::0;;;;;6364:32:14;;;::::1;::::0;;;::::1;::::0;;;6411:55;;;;;;;::::1;::::0;;;;;;;;;;;6442:11;;6422:10:::1;::::0;6411:55:::1;::::0;;;;;;;;::::1;4050:1;5684:789:::0;;;:::o;4672:402:5:-;888:23:9;900:10;888:11;:23::i;:::-;880:51;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;-1:-1:-1;;;880:51:9;;;;;;;;;;;;;;;4767:10:5::1;-1:-1:-1::0;;;;;4767:32:5;::::1;;;4759:65;;;::::0;;-1:-1:-1;;;4759:65:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4759:65:5;;;;;;;;;;;;;::::1;;4834:32;4869:19;:17;:19::i;:::-;4834:54;;4906:31;4918:18;4906:11;:31::i;:::-;4898:56;;;::::0;;-1:-1:-1;;;4898:56:5;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4898:56:5;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;4964:42:5;::::1;5009:5;4964:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;4964:50:5::1;::::0;;5029:38;;;;;;;::::1;::::0;;;;;;;;::::1;941:1:9;4672:402:5::0;:::o;1138:251:0:-;1224:11;1220:24;;1237:7;;1220:24;1272:33;;1254:12;;-1:-1:-1;;;;;1272:14:0;;;1294:6;;1254:12;1272:33;1254:12;1272:33;1294:6;1272:14;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1253:52;;;1351:7;1343:39;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;-1:-1:-1;;;1343:39:0;;;;;;;;;;;;;;1023:217:4;1147:24;;1190:44::o;3893:334:5:-;3968:24;3980:11;3968;:24::i;:::-;3967:25;3959:54;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;-1:-1:-1;;;3959:54:5;;;;;;;;;;;;;;;4023:32;4058:19;:17;:19::i;:::-;-1:-1:-1;;;;;4087:35:5;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4087:42:5;4125:4;4087:42;;;4185:35;;;;;;;4023:54;;-1:-1:-1;4185:35:5;;;;;;;;;3893:334;;:::o;942:190:0:-;1071:20;1117:8;;;942:190::o;1476:127:15:-;1523:7;1549:47;1578:17;;;;;;;;;;;;;;;;;1549:28;:47::i;2486:129::-;2546:62;2579:17;;;;;;;;;;;;;;;;;2598:9;2546:32;:62::i;2984:139::-;3049:67;3082:22;;;;;;;;;;;;;;;;;3106:9;3049:32;:67::i;1462:295:10:-;1559:50;1625:16;1671:4;1654:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1654:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1644:33;;;;;;1625:52;;1733:8;1710:31;;1696:55;;;;:::o;2474:169::-;2562:18;2575:4;2562:12;:18::i;:::-;:23;2554:47;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;-1:-1:-1;;;2554:47:10;;;;;;;;;;;;;;;2611:25;2624:4;2630:5;3475:189;3548:12;3590:4;3573:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3573:22:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3563:33;;;;;;3548:48;;3642:5;3636:4;3629:19;3615:43;;;:::o;3068:189::-;3192:3;3159:21;3175:4;3159:15;:21::i;:::-;-1:-1:-1;;;;;3159:37:10;;3151:61;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;-1:-1:-1;;;3151:61:10;;;;;;;;;;;;;;5:318:-1;;;155:8;143:10;140:24;137:2;;;-1:-1;;167:12;137:2;202:6;192:8;189:20;186:2;;;-1:-1;;212:12;186:2;-1:-1;;244:31;;;293:25;;;;;-1:-1;131:192::o", - "sourcePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol", - "compiler": { - "name": "solc", - "version": "0.6.12+commit.27d51765" - }, - "ast": { - "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetEthBridge.sol", - "exportedSymbols": { - "StarknetEthBridge": [ - 1208 - ] - }, - "id": 1209, - "license": "Apache-2.0.", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1110, - "literals": [ - "solidity", - "^", - "0.6", - ".12" - ], - "nodeType": "PragmaDirective", - "src": "636:24:13" - }, - { - "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/Addresses.sol", - "file": "./Addresses.sol", - "id": 1111, - "nodeType": "ImportDirective", - "scope": 1209, - "sourceUnit": 95, - "src": "662:25:13", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/Users/ashukla/Downloads/mainnet/0x455603AD9ae671F6c1f0f746F24d7904cA603581/StarknetTokenBridge.sol", - "file": "./StarknetTokenBridge.sol", - "id": 1112, - "nodeType": "ImportDirective", - "scope": 1209, - "sourceUnit": 1900, - "src": "688:35:13", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1113, - "name": "StarknetTokenBridge", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1899, - "src": "755:19:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetTokenBridge_$1899", - "typeString": "contract StarknetTokenBridge" - } - }, - "id": 1114, - "nodeType": "InheritanceSpecifier", - "src": "755:19:13" - } - ], - "contractDependencies": [ - 124, - 159, - 240, - 507, - 658, - 680, - 1088, - 1108, - 1899, - 2081 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1208, - "linearizedBaseContracts": [ - 1208, - 1899, - 1088, - 159, - 124, - 240, - 507, - 680, - 1108, - 2081, - 658 - ], - "name": "StarknetEthBridge", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1117, - "libraryName": { - "contractScope": null, - "id": 1115, - "name": "Addresses", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 94, - "src": "787:9:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Addresses_$94", - "typeString": "library Addresses" - } - }, - "nodeType": "UsingForDirective", - "src": "781:28:13", - "typeName": { - "id": 1116, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "801:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "baseFunctions": [ - 1309 - ], - "body": { - "id": 1125, - "nodeType": "Block", - "src": "888:29:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "905:5:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 1122, - "id": 1124, - "nodeType": "Return", - "src": "898:12:13" - } - ] - }, - "documentation": null, - "id": 1126, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isTokenContractRequired", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1119, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "864:8:13" - }, - "parameters": { - "id": 1118, - "nodeType": "ParameterList", - "parameters": [], - "src": "847:2:13" - }, - "returnParameters": { - "id": 1122, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1121, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1126, - "src": "882:4:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1120, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "882:4:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "881:6:13" - }, - "scope": 1208, - "src": "815:102:13", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [ - 1287 - ], - "body": { - "id": 1169, - "nodeType": "Block", - "src": "1001:429:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1135, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1105:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1105:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 1137, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1128, - "src": "1118:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1105:19:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "494e53554646494349454e545f56414c5545", - "id": 1139, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1126:20:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7e2b45635bacef39ebbe7850782f70291073c0e4bdd277ca37e4be83c4ba702f", - "typeString": "literal_string \"INSUFFICIENT_VALUE\"" - }, - "value": "INSUFFICIENT_VALUE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7e2b45635bacef39ebbe7850782f70291073c0e4bdd277ca37e4be83c4ba702f", - "typeString": "literal_string \"INSUFFICIENT_VALUE\"" - } - ], - "id": 1134, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1097:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1097:50:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1141, - "nodeType": "ExpressionStatement", - "src": "1097:50:13" - }, - { - "assignments": [ - 1143 - ], - "declarations": [ - { - "constant": false, - "id": 1143, - "mutability": "mutable", - "name": "fee", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1169, - "src": "1157:11:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1142, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1157:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1148, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1144, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1171:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1145, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1171:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1146, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1128, - "src": "1183:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1171:18:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1157:32:13" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1152, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -28, - "src": "1311:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_StarknetEthBridge_$1208", - "typeString": "contract StarknetEthBridge" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_StarknetEthBridge_$1208", - "typeString": "contract StarknetEthBridge" - } - ], - "id": 1151, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1303:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1150, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1303:7:13", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 1153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1303:13:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1303:21:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1155, - "name": "fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1143, - "src": "1327:3:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1303:27:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1157, - "name": "maxTotalBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1968, - 2057 - ], - "referencedDeclaration": 1968, - "src": "1334:15:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 1158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1334:17:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1303:48:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d41585f42414c414e43455f4558434545444544", - "id": 1160, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1353:22:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - }, - "value": "MAX_BALANCE_EXCEEDED" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d24ec41da52cc3754d98b259a05ea7ee3bf5b2f335e623d989d33ec6a80b1e79", - "typeString": "literal_string \"MAX_BALANCE_EXCEEDED\"" - } - ], - "id": 1149, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1295:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 1161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1295:81:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1162, - "nodeType": "ExpressionStatement", - "src": "1295:81:13" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1164, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1128, - "src": "1398:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1165, - "name": "l2Recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1130, - "src": "1406:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1166, - "name": "fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1143, - "src": "1419:3:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1163, - "name": "sendMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1712, - "src": "1386:11:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256,uint256)" - } - }, - "id": 1167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1386:37:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1168, - "nodeType": "ExpressionStatement", - "src": "1386:37:13" - } - ] - }, - "documentation": null, - "functionSelector": "e2bbb158", - "id": 1170, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1132, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "992:8:13" - }, - "parameters": { - "id": 1131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1128, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1170, - "src": "940:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1127, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "940:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1130, - "mutability": "mutable", - "name": "l2Recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1170, - "src": "956:19:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1129, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "956:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "939:37:13" - }, - "returnParameters": { - "id": 1133, - "nodeType": "ParameterList", - "parameters": [], - "src": "1001:0:13" - }, - "scope": 1208, - "src": "923:507:13", - "stateMutability": "payable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 1181, - "nodeType": "Block", - "src": "1553:48:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1176, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "1571:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1571:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1178, - "name": "l2Recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1172, - "src": "1582:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1175, - "name": "deposit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1170, - "src": "1563:7:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 1179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1563:31:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1180, - "nodeType": "ExpressionStatement", - "src": "1563:31:13" - } - ] - }, - "documentation": null, - "functionSelector": "b6b55f25", - "id": 1182, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 1173, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1172, - "mutability": "mutable", - "name": "l2Recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1182, - "src": "1515:19:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1171, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1515:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1514:21:13" - }, - "returnParameters": { - "id": 1174, - "nodeType": "ParameterList", - "parameters": [], - "src": "1553:0:13" - }, - "scope": 1208, - "src": "1498:103:13", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [ - 1294 - ], - "body": { - "id": 1196, - "nodeType": "Block", - "src": "1686:53:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1193, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1184, - "src": "1725:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1190, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1186, - "src": "1696:9:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "performEthTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 44, - "src": "1696:28:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", - "typeString": "function (address,uint256)" - } - }, - "id": 1194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1696:36:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1195, - "nodeType": "ExpressionStatement", - "src": "1696:36:13" - } - ] - }, - "documentation": null, - "id": 1197, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferOutFunds", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1188, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1677:8:13" - }, - "parameters": { - "id": 1187, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1184, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1197, - "src": "1633:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1183, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1633:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1186, - "mutability": "mutable", - "name": "recipient", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1197, - "src": "1649:17:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1185, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1649:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1632:35:13" - }, - "returnParameters": { - "id": 1189, - "nodeType": "ParameterList", - "parameters": [], - "src": "1686:0:13" - }, - "scope": 1208, - "src": "1607:132:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [ - 657 - ], - "body": { - "id": 1206, - "nodeType": "Block", - "src": "1880:60:13", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "537461726b576172655f537461726b6e65744574684272696467655f323032335f31", - "id": 1204, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1897:36:13", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9eb54d9cf6c179336dbe5b693bf437f6b5c816c9194958851e8117c40f9a3e76", - "typeString": "literal_string \"StarkWare_StarknetEthBridge_2023_1\"" - }, - "value": "StarkWare_StarknetEthBridge_2023_1" - }, - "functionReturnParameters": 1203, - "id": 1205, - "nodeType": "Return", - "src": "1890:43:13" - } - ] - }, - "documentation": { - "id": 1198, - "nodeType": "StructuredDocumentation", - "src": "1745:63:13", - "text": "Returns a string that identifies the contract." - }, - "functionSelector": "eeb72866", - "id": 1207, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "identify", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1200, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1847:8:13" - }, - "parameters": { - "id": 1199, - "nodeType": "ParameterList", - "parameters": [], - "src": "1830:2:13" - }, - "returnParameters": { - "id": 1203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1202, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 1207, - "src": "1865:13:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1201, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1865:6:13", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1864:15:13" - }, - "scope": 1208, - "src": "1813:127:13", - "stateMutability": "pure", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1209, - "src": "725:1217:13" - } - ], - "src": "636:1307:13" - }, - "functionHashes": { - "acceptGovernance()": "238efcbc", - "cancelNomination()": "10f2ec45", - "deposit(uint256)": "b6b55f25", - "deposit(uint256,uint256)": "e2bbb158", - "depositCancelRequest(uint256,uint256,uint256)": "4c567662", - "depositReclaim(uint256,uint256,uint256)": "ae873816", - "identify()": "eeb72866", - "initialize(bytes)": "439fab91", - "isActive()": "22f3e2d4", - "isFrozen()": "33eeb147", - "isGovernor(address)": "e43581b8", - "maxDeposit()": "6083e59a", - "maxTotalBalance()": "19534075", - "nominateNewGovernor(address)": "87ebeb18", - "removeGovernor(address)": "eecdac88", - "setL2TokenBridge(uint256)": "7fc2ab3e", - "setMaxDeposit(uint256)": "bb371fdd", - "setMaxTotalBalance(uint256)": "894ecf04", - "withdraw(uint256)": "2e1a7d4d", - "withdraw(uint256,address)": "00f714ce" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1958600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "acceptGovernance()": "infinite", - "cancelNomination()": "infinite", - "deposit(uint256)": "infinite", - "deposit(uint256,uint256)": "infinite", - "depositCancelRequest(uint256,uint256,uint256)": "infinite", - "depositReclaim(uint256,uint256,uint256)": "infinite", - "identify()": "infinite", - "initialize(bytes)": "infinite", - "isActive()": "1521", - "isFrozen()": "249", - "isGovernor(address)": "infinite", - "maxDeposit()": "infinite", - "maxTotalBalance()": "infinite", - "nominateNewGovernor(address)": "infinite", - "removeGovernor(address)": "infinite", - "setL2TokenBridge(uint256)": "infinite", - "setMaxDeposit(uint256)": "infinite", - "setMaxTotalBalance(uint256)": "infinite", - "withdraw(uint256)": "infinite", - "withdraw(uint256,address)": "infinite" - }, - "internal": { - "isTokenContractRequired()": "infinite", - "transferOutFunds(uint256,address)": "infinite" - } + "object": "0x60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f" } } \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarknetTokenBridge.json b/crates/sandbox/artifacts/StarknetTokenBridge.json index c7fb64a..e140e46 100644 --- a/crates/sandbox/artifacts/StarknetTokenBridge.json +++ b/crates/sandbox/artifacts/StarknetTokenBridge.json @@ -1297,5 +1297,7 @@ "type": "function" } ], - "bytecode": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + "bytecode": { + "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" + } } \ No newline at end of file From 89210579c01d9397acc309d779e25e23ca74ff4e Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Fri, 8 Mar 2024 12:50:11 +0530 Subject: [PATCH 13/31] add: methods to token bridge --- .../src/interfaces/token_bridge.rs | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs index 0382159..721d2d7 100644 --- a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs @@ -22,6 +22,14 @@ abigen!( function enrollToken(address token) external payable virtual onlyManager function withdraw(address token, uint256 amount) external + function registerAppGovernor(address account) external + function registerAppRoleAdmin(address account) external + function registerGovernanceAdmin(address account) external + function registerOperator(address account) external + function registerSecurityAdmin(address account) external + function registerSecurityAgent(address account) external + function registerTokenAdmin(address account) external + function registerUpgradeGovernor(address account) external function identify() external pure virtual returns (string memory) function estimateDepositFeeWei() external view returns (uint256) @@ -44,6 +52,15 @@ pub trait StarknetTokenBridgeTrait { async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error>; async fn enroll_token(&self, token: Address) -> Result, Error>; async fn withdraw(&self, token: Address, amount: U256) -> Result, Error>; + async fn register_app_governor(&self, account: Address) -> Result, Error>; + async fn register_app_role_admin(&self, account: Address) -> Result, Error>; + async fn register_governance_admin(&self, account: Address) -> Result, Error>; + async fn register_operator(&self, account: Address) -> Result, Error>; + async fn register_security_admin(&self, account: Address) -> Result, Error>; + async fn register_security_agent(&self, account: Address) -> Result, Error>; + async fn register_token_admin(&self, account: Address) -> Result, Error>; + async fn register_upgrade_governor(&self, account: Address) -> Result, Error>; + async fn identify(&self) -> Result>; async fn estimate_deposit_fee_wei(&self) -> Result>; async fn estimate_enrollment_fee_wei(&self) -> Result>; @@ -138,6 +155,86 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } + async fn register_app_governor(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_app_governor(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_app_role_admin(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_app_role_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_governance_admin(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_governance_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_operator(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_operator(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_security_admin(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_security_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_security_agent(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_security_agent(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_token_admin(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_token_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_upgrade_governor(&self, account: Address) -> Result, Error> { + self.as_ref() + .register_upgrade_governor(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + async fn identify(&self) -> Result> { self.as_ref() .identify() From c104f2380deffd65f2e0785dbb5e5c1e992c6057 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Fri, 8 Mar 2024 23:43:56 +0530 Subject: [PATCH 14/31] fix --- .../src/clients/eth_bridge.rs | 2 +- .../src/interfaces/manager.rs | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs index c1692ac..0774a70 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/clients/eth_bridge.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use crate::{interfaces::{StarknetEthBridge, ProxySupport}, LocalWalletSignerMiddleware, StarknetContractClient}; -use ethers::abi::Address; +use ethers::types::Address; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { diff --git a/crates/starknet-core-contract-client/src/interfaces/manager.rs b/crates/starknet-core-contract-client/src/interfaces/manager.rs index d015316..534ac66 100644 --- a/crates/starknet-core-contract-client/src/interfaces/manager.rs +++ b/crates/starknet-core-contract-client/src/interfaces/manager.rs @@ -3,7 +3,7 @@ use ethers::{ contract::ContractError, prelude::abigen, providers::Middleware, - types::{TransactionReceipt, H160}, + types::{TransactionReceipt, H160, U256}, }; use crate::Error; @@ -29,7 +29,7 @@ pub trait StarkgateManagerTrait { async fn add_existing_bridge(&self, token: Address, bridge: Address) -> Result, Error>; async fn deactivate_token(&self, token: Address) -> Result, Error>; async fn block_token(&self, token: Address) -> Result, Error>; - async fn enroll_token_bridge(&self, token: Address) -> Result, Error>; + async fn enroll_token_bridge(&self, token: Address, fee: U256) -> Result, Error>; async fn get_registry(&self) -> Result>; async fn identify(&self) -> Result>; } @@ -69,9 +69,10 @@ where .map_err(Into::into) } - async fn enroll_token_bridge(&self, token: Address) -> Result, Error> { + async fn enroll_token_bridge(&self, token: Address, fee: U256) -> Result, Error> { self.as_ref() .enroll_token_bridge(token) + .value(fee) .send() .await .map_err(Into::>::into)? From 7278aceaf29f8765f186c1ebe8edaf20442528a0 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sat, 9 Mar 2024 18:43:43 +0530 Subject: [PATCH 15/31] tesr --- crates/sandbox/src/unsafe_proxy.rs | 4 ++-- .../src/clients/dai_erc20.rs | 8 -------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index faffc74..92da296 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -81,10 +81,10 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { - let token_contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; + let contract = deploy_contract(client.clone(), ERC20_TOKEN, ()).await?; Ok(DaiERC20ContractClient::new( - token_contract.address(), + contract.address(), client.clone(), )) } diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs index 1166f6a..3faff9d 100644 --- a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs @@ -8,14 +8,12 @@ use ethers::types::Address; pub struct DaiERC20ContractClient { erc20_token: DaiERC20Token, - proxy_support: ProxySupport, } impl DaiERC20ContractClient { pub fn new(address: Address, client: Arc) -> Self { Self { erc20_token: DaiERC20Token::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), } } } @@ -26,12 +24,6 @@ impl AsRef> for DaiERC20ContractClien } } -impl AsRef> for DaiERC20ContractClient { - fn as_ref(&self) -> &ProxySupport { - &self.proxy_support - } -} - impl StarknetContractClient for DaiERC20ContractClient { fn address(&self) -> Address { self.erc20_token.address() From 60bd1425ad972976070c5b2ab412635b4c9b90bd Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Mon, 11 Mar 2024 17:46:02 +0530 Subject: [PATCH 16/31] add --- .../artifacts/{Dai.json => DaiERC20.json} | 0 crates/sandbox/src/unsafe_proxy.rs | 14 +-- .../src/interfaces/dai.rs | 8 -- .../src/interfaces/dai_erc20.rs | 85 +++++++++++++++++++ .../src/interfaces/mod.rs | 4 +- .../src/interfaces/token_bridge.rs | 29 +------ 6 files changed, 98 insertions(+), 42 deletions(-) rename crates/sandbox/artifacts/{Dai.json => DaiERC20.json} (100%) delete mode 100644 crates/starknet-core-contract-client/src/interfaces/dai.rs create mode 100644 crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs diff --git a/crates/sandbox/artifacts/Dai.json b/crates/sandbox/artifacts/DaiERC20.json similarity index 100% rename from crates/sandbox/artifacts/Dai.json rename to crates/sandbox/artifacts/DaiERC20.json diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index 92da296..27dbbee 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -13,7 +13,7 @@ const STARKNET_ETH_BRIDGE: &str = include_str!("../artifacts/StarknetEthBridge.j const STARKGATE_MANAGER: &str = include_str!("../artifacts/StarkgateManager.json"); const STARKGATE_REGISTRY: &str = include_str!("../artifacts/StarkgateRegistry.json"); const STARKNET_TOKEN_BRIDGE: &str = include_str!("../artifacts/StarknetTokenBridge.json"); -const ERC20_TOKEN: &str = include_str!("../artifacts/Dai.json"); +const ERC20_TOKEN: &str = include_str!("../artifacts/DaiERC20.json"); const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); @@ -22,7 +22,7 @@ const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { - // Deploy the Starknet core contract (no explicit contructor) + // Deploy the Starknet Core contract (no explicit constructor) let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; Ok(StarknetSovereignContractClient::new( @@ -34,7 +34,7 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc ) -> Result { - // Deploy the Eth Bridge contract (no explicit contructor) + // Deploy the Eth Bridge contract (no explicit constructor) let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; Ok(StarknetEthBridgeContractClient::new( @@ -46,7 +46,7 @@ pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc ) -> Result { - // Deploy the Starkgate Manager contract (no explicit contructor) + // Deploy the Starkgate Manager contract (no explicit constructor) let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; Ok(StarkgateManagerContractClient::new( @@ -58,7 +58,7 @@ pub async fn deploy_starkgate_manager_behind_unsafe_proxy( pub async fn deploy_starkgate_registry_behind_unsafe_proxy( client: Arc ) -> Result { - // Deploy the Starkgate Registry contract (no explicit contructor) + // Deploy the Starkgate Registry contract (no explicit constructor) let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; Ok(StarkgateRegistryContractClient::new( @@ -70,6 +70,7 @@ pub async fn deploy_starkgate_registry_behind_unsafe_proxy( pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc ) -> Result { + // Deploy the Starknet Token Bridge contract (no explicit constructor) let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; Ok(StarknetTokenBridgeContractClient::new( @@ -81,7 +82,8 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { - let contract = deploy_contract(client.clone(), ERC20_TOKEN, ()).await?; + // Deploy the Dai ERC20 Token contract (no explicit constructor) + let contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; Ok(DaiERC20ContractClient::new( contract.address(), diff --git a/crates/starknet-core-contract-client/src/interfaces/dai.rs b/crates/starknet-core-contract-client/src/interfaces/dai.rs deleted file mode 100644 index 6188322..0000000 --- a/crates/starknet-core-contract-client/src/interfaces/dai.rs +++ /dev/null @@ -1,8 +0,0 @@ -use ethers::{ - prelude::abigen, -}; - -abigen!( - DaiERC20Token, - r#"[]"#, -); \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs new file mode 100644 index 0000000..a447e41 --- /dev/null +++ b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs @@ -0,0 +1,85 @@ +use async_trait::async_trait; +use ethers::{ + prelude::abigen, + providers::Middleware, + types::{Address, U256}, +}; +use ethers::contract::ContractError; + +use crate::Error; + +abigen!( + DaiERC20Token, + r#"[ + function name() public view virtual returns (string memory) + function symbol() public view virtual returns (string memory) + function totalSupply() public view virtual returns (uint256) + function balanceOf(address account) public view virtual returns (uint256) + function allowance(address owner, address spender) public view virtual returns (uint256) + function approve(address spender, uint256 value) public virtual returns (bool) + ]"#, +); + +#[async_trait] +pub trait DaiERC20TokenTrait { + async fn name(&self) -> Result>; + async fn symbol(&self) -> Result>; + async fn total_supply(&self) -> Result>; + async fn balance_of(&self, address: Address) -> Result>; + async fn allowance(&self, owner: Address, spender: Address) -> Result>; + async fn approve(&self, address: Address, value: U256) -> Result>; +} + +#[async_trait] +impl DaiERC20TokenTrait for T + where + T: AsRef> + Send + Sync, +{ + async fn name(&self) -> Result> { + self.as_ref() + .name() + .call() + .await + .map_err(Into::into) + } + + async fn symbol(&self) -> Result> { + self.as_ref() + .symbol() + .call() + .await + .map_err(Into::into) + } + + async fn total_supply(&self) -> Result> { + self.as_ref() + .total_supply() + .call() + .await + .map_err(Into::into) + } + + async fn balance_of(&self, address: Address) -> Result> { + self.as_ref() + .balance_of(address) + .call() + .await + .map_err(Into::into) + } + + async fn allowance(&self, owner: Address, spender: Address) -> Result> { + self.as_ref() + .allowance(owner, spender) + .call() + .await + .map_err(Into::into) + } + + async fn approve(&self, address: Address, value: U256) -> Result> { + self.as_ref() + .approve(address, value) + .call() + .await + .map_err(Into::into) + } +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/mod.rs b/crates/starknet-core-contract-client/src/interfaces/mod.rs index d8f48ca..f430f5c 100644 --- a/crates/starknet-core-contract-client/src/interfaces/mod.rs +++ b/crates/starknet-core-contract-client/src/interfaces/mod.rs @@ -10,7 +10,7 @@ mod eth_bridge; mod registry; mod manager; mod token_bridge; -mod dai; +mod dai_erc20; pub use governance::{StarknetGovernance, StarknetGovernanceTrait}; pub use governed_finalizable::{GovernedFinalizable, GovernedFinalizableTrait}; @@ -30,4 +30,4 @@ pub use eth_bridge::{StarknetEthBridge, StarknetEthBridgeTrait}; pub use token_bridge::{StarknetTokenBridge, StarknetTokenBridgeTrait}; pub use manager::{StarkgateManager, StarkgateManagerTrait}; pub use registry::{StarkgateRegistry, StarkgateRegistryTrait}; -pub use dai::{DaiERC20Token}; \ No newline at end of file +pub use dai_erc20::{DaiERC20Token}; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs index 721d2d7..1e7c937 100644 --- a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs @@ -13,13 +13,11 @@ type Address = H160; abigen!( StarknetTokenBridge, r#"[ - function deactivate(address token) external virtual onlyManager function deposit(address token, uint256 amount, uint256 l2Recipient) external payable onlyServicingToken function setL2TokenBridge(uint256 l2TokenBridge_) external onlyAppGovernor function enableWithdrawalLimit(address token) external onlySecurityAgent function disableWithdrawalLimit(address token) external onlySecurityAdmin function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor - function enrollToken(address token) external payable virtual onlyManager function withdraw(address token, uint256 amount) external function registerAppGovernor(address account) external @@ -43,14 +41,12 @@ abigen!( #[async_trait] pub trait StarknetTokenBridgeTrait { - async fn deactivate(&self, token: Address) -> Result, Error>; - async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256) -> Result, Error>; + async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256, fee: U256) -> Result, Error>; async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; async fn enable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn disable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error>; - async fn enroll_token(&self, token: Address) -> Result, Error>; async fn withdraw(&self, token: Address, amount: U256) -> Result, Error>; async fn register_app_governor(&self, account: Address) -> Result, Error>; async fn register_app_role_admin(&self, account: Address) -> Result, Error>; @@ -75,19 +71,10 @@ impl StarknetTokenBridgeTrait for T where T: AsRef> + Send + Sync, { - async fn deactivate(&self, token: Address) -> Result, Error> { - self.as_ref() - .deactivate(token) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256) -> Result, Error> { + async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256, fee: U256) -> Result, Error> { self.as_ref() .deposit(token, amount, l2_recipient) + .value(fee) .send() .await .map_err(Into::>::into)? @@ -135,16 +122,6 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn enroll_token(&self, token: Address) -> Result, Error> { - self.as_ref() - .enroll_token(token) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - async fn withdraw(&self, token: Address, amount: U256) -> Result, Error> { self.as_ref() .withdraw(token, amount) From 1585303c663fc3e1542809c2a0d591af60f15b10 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Mon, 11 Mar 2024 17:50:13 +0530 Subject: [PATCH 17/31] add --- .../src/clients/dai_erc20.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs index 3faff9d..ddcecf8 100644 --- a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs @@ -5,15 +5,18 @@ use crate::{interfaces::{ }, LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +use crate::clients::StarknetEthBridgeContractClient; pub struct DaiERC20ContractClient { erc20_token: DaiERC20Token, + proxy_support: ProxySupport, } impl DaiERC20ContractClient { pub fn new(address: Address, client: Arc) -> Self { Self { erc20_token: DaiERC20Token::new(address, client.clone()), + proxy_support: ProxySupport::new(address, client.clone()), } } } @@ -24,6 +27,12 @@ impl AsRef> for DaiERC20ContractClien } } +impl AsRef> for DaiERC20ContractClient { + fn as_ref(&self) -> &ProxySupport { + &self.proxy_support + } +} + impl StarknetContractClient for DaiERC20ContractClient { fn address(&self) -> Address { self.erc20_token.address() From 5fd421afe2fdd9bd304468ecabb3ee66a5d93f15 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Mon, 11 Mar 2024 18:03:29 +0530 Subject: [PATCH 18/31] add --- crates/starknet-core-contract-client/src/clients/dai_erc20.rs | 1 - .../starknet-core-contract-client/src/interfaces/dai_erc20.rs | 1 - crates/starknet-core-contract-client/src/interfaces/mod.rs | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs index ddcecf8..1166f6a 100644 --- a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs @@ -5,7 +5,6 @@ use crate::{interfaces::{ }, LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use crate::clients::StarknetEthBridgeContractClient; pub struct DaiERC20ContractClient { erc20_token: DaiERC20Token, diff --git a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs index a447e41..ac82800 100644 --- a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs @@ -4,7 +4,6 @@ use ethers::{ providers::Middleware, types::{Address, U256}, }; -use ethers::contract::ContractError; use crate::Error; diff --git a/crates/starknet-core-contract-client/src/interfaces/mod.rs b/crates/starknet-core-contract-client/src/interfaces/mod.rs index f430f5c..8fec7a2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/mod.rs +++ b/crates/starknet-core-contract-client/src/interfaces/mod.rs @@ -30,4 +30,4 @@ pub use eth_bridge::{StarknetEthBridge, StarknetEthBridgeTrait}; pub use token_bridge::{StarknetTokenBridge, StarknetTokenBridgeTrait}; pub use manager::{StarkgateManager, StarkgateManagerTrait}; pub use registry::{StarkgateRegistry, StarkgateRegistryTrait}; -pub use dai_erc20::{DaiERC20Token}; \ No newline at end of file +pub use dai_erc20::{DaiERC20Token, DaiERC20TokenTrait}; \ No newline at end of file From b23c6b48dbd8bcea9da5782b90e057d8afa86006 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Tue, 12 Mar 2024 03:17:24 +0530 Subject: [PATCH 19/31] test --- .../src/interfaces/dai_erc20.rs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs index ac82800..bb8808d 100644 --- a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs @@ -4,6 +4,8 @@ use ethers::{ providers::Middleware, types::{Address, U256}, }; +use ethers::contract::ContractError; +use ethers::prelude::TransactionReceipt; use crate::Error; @@ -75,10 +77,22 @@ impl DaiERC20TokenTrait for T } async fn approve(&self, address: Address, value: U256) -> Result> { - self.as_ref() + let txn: Result, Error> = self.as_ref() .approve(address, value) - .call() + .send() .await - .map_err(Into::into) + .map_err(Into::>::into)? + .await + .map_err(Into::into); + + match txn { + Ok(receipt) => { + if let Some(_) = receipt { + return Ok(true) + } + Ok(false) + }, + Err(err) => Err(err) + } } } \ No newline at end of file From 53a24430e9452de9ebc932091faefdb4ca0f1b00 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Tue, 12 Mar 2024 13:30:09 +0530 Subject: [PATCH 20/31] remove proxy support from erc20 --- crates/sandbox/src/unsafe_proxy.rs | 2 +- .../src/clients/dai_erc20.rs | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/unsafe_proxy.rs index 27dbbee..4beed84 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/unsafe_proxy.rs @@ -83,7 +83,7 @@ pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract_behind_unsafe_proxy(client.clone(), ERC20_TOKEN, ()).await?; + let contract = deploy_contract(client.clone(), ERC20_TOKEN, ()).await?; Ok(DaiERC20ContractClient::new( contract.address(), diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs index 1166f6a..815e250 100644 --- a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs +++ b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs @@ -1,21 +1,19 @@ use std::sync::Arc; use crate::{interfaces::{ - DaiERC20Token, ProxySupport + DaiERC20Token, }, LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; pub struct DaiERC20ContractClient { erc20_token: DaiERC20Token, - proxy_support: ProxySupport, } impl DaiERC20ContractClient { pub fn new(address: Address, client: Arc) -> Self { Self { erc20_token: DaiERC20Token::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), } } } @@ -26,12 +24,6 @@ impl AsRef> for DaiERC20ContractClien } } -impl AsRef> for DaiERC20ContractClient { - fn as_ref(&self) -> &ProxySupport { - &self.proxy_support - } -} - impl StarknetContractClient for DaiERC20ContractClient { fn address(&self) -> Address { self.erc20_token.address() From 845ec4bc563b9cdc6a5c52fe4602809ab6ce8459 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Tue, 12 Mar 2024 23:33:33 +0530 Subject: [PATCH 21/31] minor: refactoring --- crates/sandbox/artifacts/DaiERC20.json | 320 ---- crates/sandbox/artifacts/DaiERC20Token.json | 1 + .../sandbox/artifacts/StarkgateManager.json | 646 +------- .../sandbox/artifacts/StarkgateRegistry.json | 633 +------- .../sandbox/artifacts/StarknetEthBridge.json | 499 ------- .../artifacts/StarknetLegacyBridge.json | 1 + .../artifacts/StarknetTokenBridge.json | 1304 +---------------- .../src/{unsafe_proxy.rs => deploy.rs} | 33 +- crates/sandbox/src/lib.rs | 20 +- 9 files changed, 29 insertions(+), 3428 deletions(-) delete mode 100644 crates/sandbox/artifacts/DaiERC20.json create mode 100644 crates/sandbox/artifacts/DaiERC20Token.json delete mode 100644 crates/sandbox/artifacts/StarknetEthBridge.json create mode 100644 crates/sandbox/artifacts/StarknetLegacyBridge.json rename crates/sandbox/src/{unsafe_proxy.rs => deploy.rs} (79%) diff --git a/crates/sandbox/artifacts/DaiERC20.json b/crates/sandbox/artifacts/DaiERC20.json deleted file mode 100644 index fc3fba7..0000000 --- a/crates/sandbox/artifacts/DaiERC20.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x608060405234801562000010575f80fd5b5060408051808201825260038082526244414960e81b602080840182905284518086019095528285528401529091906200004b83826200028d565b5060046200005a82826200028d565b505050620000783368056bc75e2d631000006200007e60201b60201c565b6200037b565b6001600160a01b038216620000ad5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620000ba5f8383620000be565b5050565b6001600160a01b038316620000ec578060025f828254620000e0919062000355565b909155506200015e9050565b6001600160a01b0383165f9081526020819052604090205481811015620001405760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000a4565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200017c576002805482900390556200019a565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001e091815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021657607f821691505b6020821081036200023557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000288575f81815260208120601f850160051c81016020861015620002635750805b601f850160051c820191505b8181101562000284578281556001016200026f565b5050505b505050565b81516001600160401b03811115620002a957620002a9620001ed565b620002c181620002ba845462000201565b846200023b565b602080601f831160018114620002f7575f8415620002df5750858301515b5f19600386901b1c1916600185901b17855562000284565b5f85815260208120601f198616915b82811015620003275788860151825594840194600190910190840162000306565b50858210156200034557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200037557634e487b7160e01b5f52601160045260245ffd5b92915050565b6106f880620003895f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063313ce56711610063578063313ce567146100fa57806370a082311461010957806395d89b4114610131578063a9059cbb14610139578063dd62ed3e1461014c575f80fd5b806306fdde0314610094578063095ea7b3146100b257806318160ddd146100d557806323b872dd146100e7575b5f80fd5b61009c610184565b6040516100a99190610553565b60405180910390f35b6100c56100c03660046105b9565b610214565b60405190151581526020016100a9565b6002545b6040519081526020016100a9565b6100c56100f53660046105e1565b61022d565b604051601281526020016100a9565b6100d961011736600461061a565b6001600160a01b03165f9081526020819052604090205490565b61009c610250565b6100c56101473660046105b9565b61025f565b6100d961015a36600461063a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101939061066b565b80601f01602080910402602001604051908101604052809291908181526020018280546101bf9061066b565b801561020a5780601f106101e15761010080835404028352916020019161020a565b820191905f5260205f20905b8154815290600101906020018083116101ed57829003601f168201915b5050505050905090565b5f3361022181858561026c565b60019150505b92915050565b5f3361023a85828561027e565b6102458585856102fe565b506001949350505050565b6060600480546101939061066b565b5f336102218185856102fe565b610279838383600161035b565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146102f857818110156102ea57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6102f884848484035f61035b565b50505050565b6001600160a01b03831661032757604051634b637e8f60e11b81525f60048201526024016102e1565b6001600160a01b0382166103505760405163ec442f0560e01b81525f60048201526024016102e1565b61027983838361042d565b6001600160a01b0384166103845760405163e602df0560e01b81525f60048201526024016102e1565b6001600160a01b0383166103ad57604051634a1406b160e11b81525f60048201526024016102e1565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156102f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161041f91815260200190565b60405180910390a350505050565b6001600160a01b038316610457578060025f82825461044c91906106a3565b909155506104c79050565b6001600160a01b0383165f90815260208190526040902054818110156104a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016102e1565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e357600280548290039055610501565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054691815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561057e57858101830151858201604001528201610562565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146105b4575f80fd5b919050565b5f80604083850312156105ca575f80fd5b6105d38361059e565b946020939093013593505050565b5f805f606084860312156105f3575f80fd5b6105fc8461059e565b925061060a6020850161059e565b9150604084013590509250925092565b5f6020828403121561062a575f80fd5b6106338261059e565b9392505050565b5f806040838503121561064b575f80fd5b6106548361059e565b91506106626020840161059e565b90509250929050565b600181811c9082168061067f57607f821691505b60208210810361069d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561022757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ad7501d4e2e4e8e0b57900d45d00582d330a3f37cf6b79f50d34426273ce62f364736f6c63430008140033" - } -} \ No newline at end of file diff --git a/crates/sandbox/artifacts/DaiERC20Token.json b/crates/sandbox/artifacts/DaiERC20Token.json new file mode 100644 index 0000000..e292faf --- /dev/null +++ b/crates/sandbox/artifacts/DaiERC20Token.json @@ -0,0 +1 @@ +{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x608060405234801562000010575f80fd5b5060408051808201825260038082526244414960e81b602080840182905284518086019095528285528401529091906200004b83826200028d565b5060046200005a82826200028d565b505050620000783368056bc75e2d631000006200007e60201b60201c565b6200037b565b6001600160a01b038216620000ad5760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b620000ba5f8383620000be565b5050565b6001600160a01b038316620000ec578060025f828254620000e0919062000355565b909155506200015e9050565b6001600160a01b0383165f9081526020819052604090205481811015620001405760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000a4565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200017c576002805482900390556200019a565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001e091815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021657607f821691505b6020821081036200023557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000288575f81815260208120601f850160051c81016020861015620002635750805b601f850160051c820191505b8181101562000284578281556001016200026f565b5050505b505050565b81516001600160401b03811115620002a957620002a9620001ed565b620002c181620002ba845462000201565b846200023b565b602080601f831160018114620002f7575f8415620002df5750858301515b5f19600386901b1c1916600185901b17855562000284565b5f85815260208120601f198616915b82811015620003275788860151825594840194600190910190840162000306565b50858210156200034557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200037557634e487b7160e01b5f52601160045260245ffd5b92915050565b6106f880620003895f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c8063313ce56711610063578063313ce567146100fa57806370a082311461010957806395d89b4114610131578063a9059cbb14610139578063dd62ed3e1461014c575f80fd5b806306fdde0314610094578063095ea7b3146100b257806318160ddd146100d557806323b872dd146100e7575b5f80fd5b61009c610184565b6040516100a99190610553565b60405180910390f35b6100c56100c03660046105b9565b610214565b60405190151581526020016100a9565b6002545b6040519081526020016100a9565b6100c56100f53660046105e1565b61022d565b604051601281526020016100a9565b6100d961011736600461061a565b6001600160a01b03165f9081526020819052604090205490565b61009c610250565b6100c56101473660046105b9565b61025f565b6100d961015a36600461063a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6060600380546101939061066b565b80601f01602080910402602001604051908101604052809291908181526020018280546101bf9061066b565b801561020a5780601f106101e15761010080835404028352916020019161020a565b820191905f5260205f20905b8154815290600101906020018083116101ed57829003601f168201915b5050505050905090565b5f3361022181858561026c565b60019150505b92915050565b5f3361023a85828561027e565b6102458585856102fe565b506001949350505050565b6060600480546101939061066b565b5f336102218185856102fe565b610279838383600161035b565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146102f857818110156102ea57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6102f884848484035f61035b565b50505050565b6001600160a01b03831661032757604051634b637e8f60e11b81525f60048201526024016102e1565b6001600160a01b0382166103505760405163ec442f0560e01b81525f60048201526024016102e1565b61027983838361042d565b6001600160a01b0384166103845760405163e602df0560e01b81525f60048201526024016102e1565b6001600160a01b0383166103ad57604051634a1406b160e11b81525f60048201526024016102e1565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156102f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161041f91815260200190565b60405180910390a350505050565b6001600160a01b038316610457578060025f82825461044c91906106a3565b909155506104c79050565b6001600160a01b0383165f90815260208190526040902054818110156104a95760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016102e1565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166104e357600280548290039055610501565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161054691815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561057e57858101830151858201604001528201610562565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146105b4575f80fd5b919050565b5f80604083850312156105ca575f80fd5b6105d38361059e565b946020939093013593505050565b5f805f606084860312156105f3575f80fd5b6105fc8461059e565b925061060a6020850161059e565b9150604084013590509250925092565b5f6020828403121561062a575f80fd5b6106338261059e565b9392505050565b5f806040838503121561064b575f80fd5b6106548361059e565b91506106626020840161059e565b90509250929050565b600181811c9082168061067f57607f821691505b60208210810361069d57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561022757634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ad7501d4e2e4e8e0b57900d45d00582d330a3f37cf6b79f50d34426273ce62f364736f6c63430008140033"}} diff --git a/crates/sandbox/artifacts/StarkgateManager.json b/crates/sandbox/artifacts/StarkgateManager.json index 1921c10..77d1897 100644 --- a/crates/sandbox/artifacts/StarkgateManager.json +++ b/crates/sandbox/artifacts/StarkgateManager.json @@ -1,645 +1 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "ExistingBridgeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "TokenBlocked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "TokenDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "TokenEnrolled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "bridge_", - "type": "address" - } - ], - "name": "addExistingBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "blockToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "deactivateToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "enrollTokenBridge", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "getRegistry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "identify", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppRoleAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isGovernanceAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAgent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isTokenAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isUpgradeGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" - } -} \ No newline at end of file +{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"ExistingBridgeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenBlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenEnrolled","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge_","type":"address"}],"name":"addExistingBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"blockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"deactivateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enrollTokenBridge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/artifacts/StarkgateRegistry.json b/crates/sandbox/artifacts/StarkgateRegistry.json index 402a37d..deb6160 100644 --- a/crates/sandbox/artifacts/StarkgateRegistry.json +++ b/crates/sandbox/artifacts/StarkgateRegistry.json @@ -1,632 +1 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "TokenEnlisted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "TokenSelfRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenStatusBlocked", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "blockToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "name": "enlistToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getBridge", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getWithdrawalBridges", - "outputs": [ - { - "internalType": "address[]", - "name": "bridges", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "identify", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppRoleAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isGovernanceAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAgent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isTokenAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isUpgradeGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "selfRemove", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" - } -} \ No newline at end of file +{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"TokenEnlisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"TokenSelfRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenStatusBlocked","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"blockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"enlistToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getWithdrawalBridges","outputs":[{"internalType":"address[]","name":"bridges","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"selfRemove","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/artifacts/StarknetEthBridge.json b/crates/sandbox/artifacts/StarknetEthBridge.json deleted file mode 100644 index 91e0aea..0000000 --- a/crates/sandbox/artifacts/StarknetEthBridge.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [], - "name": "LogBridgeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "LogDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "LogDepositCancelRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "LogDepositReclaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "acceptedGovernor", - "type": "address" - } - ], - "name": "LogNewGovernorAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "nominatedGovernor", - "type": "address" - } - ], - "name": "LogNominatedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "LogNominationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "removedGovernor", - "type": "address" - } - ], - "name": "LogRemovedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetL2TokenBridge", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "LogSetMaxTotalBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "LogWithdrawal", - "type": "event" - }, - { - "inputs": [], - "name": "acceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "cancelNomination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositCancelRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositReclaim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "identify", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "isGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxTotalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "nominateNewGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "name": "removeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" - } - ], - "name": "setL2TokenBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxDeposit_", - "type": "uint256" - } - ], - "name": "setMaxDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f" - } -} \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarknetLegacyBridge.json b/crates/sandbox/artifacts/StarknetLegacyBridge.json new file mode 100644 index 0000000..961de0a --- /dev/null +++ b/crates/sandbox/artifacts/StarknetLegacyBridge.json @@ -0,0 +1 @@ +{"abi":[{"anonymous":false,"inputs":[],"name":"LogBridgeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogDepositCancelRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogDepositReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"acceptedGovernor","type":"address"}],"name":"LogNewGovernorAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nominatedGovernor","type":"address"}],"name":"LogNominatedGovernor","type":"event"},{"anonymous":false,"inputs":[],"name":"LogNominationCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"removedGovernor","type":"address"}],"name":"LogRemovedGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LogSetL2TokenBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LogSetMaxDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LogSetMaxTotalBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawal","type":"event"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelNomination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2Recipient","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositCancelRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositReclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"nominateNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governorForRemoval","type":"address"}],"name":"removeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2TokenBridge_","type":"uint256"}],"name":"setL2TokenBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDeposit_","type":"uint256"}],"name":"setMaxDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTotalBalance_","type":"uint256"}],"name":"setMaxTotalBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801561001057600080fd5b5060405180606001604052806021815260200161270860219139806040516020018082805190602001908083835b6020831061005d5780518252601f19909201916020918201910161003e565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120608081905230606081901b60a052909450925061264191506100c790506000398061062b5250806121b652506126416000f3fe60806040526004361061011e5760003560e01c80637fc2ab3e116100a0578063bb371fdd11610064578063bb371fdd146103b9578063e2bbb158146103e3578063e43581b814610406578063eeb7286614610439578063eecdac88146104c35761011e565b80637fc2ab3e146102df57806387ebeb1814610309578063894ecf041461033c578063ae87381614610366578063b6b55f251461039c5761011e565b80632e1a7d4d116100e75780632e1a7d4d146101d857806333eeb14714610202578063439fab91146102175780634c567662146102945780636083e59a146102ca5761011e565b8062f714ce1461012357806310f2ec451461015e578063195340751461017357806322f3e2d41461019a578063238efcbc146101c3575b600080fd5b34801561012f57600080fd5b5061015c6004803603604081101561014657600080fd5b50803590602001356001600160a01b03166104f6565b005b34801561016a57600080fd5b5061015c61059c565b34801561017f57600080fd5b506101886105a6565b60408051918252519081900360200190f35b3480156101a657600080fd5b506101af6105cf565b604080519115158252519081900360200190f35b3480156101cf57600080fd5b5061015c61060f565b3480156101e457600080fd5b5061015c600480360360208110156101fb57600080fd5b5035610617565b34801561020e57600080fd5b506101af610624565b34801561022357600080fd5b5061015c6004803603602081101561023a57600080fd5b81019060208101813564010000000081111561025557600080fd5b82018360208201111561026757600080fd5b8035906020019184600183028401116401000000008311171561028957600080fd5b509092509050610629565b3480156102a057600080fd5b5061015c600480360360608110156102b757600080fd5b5080359060208101359060400135610802565b3480156102d657600080fd5b50610188610a4e565b3480156102eb57600080fd5b5061015c6004803603602081101561030257600080fd5b5035610a71565b34801561031557600080fd5b5061015c6004803603602081101561032c57600080fd5b50356001600160a01b0316610bda565b34801561034857600080fd5b5061015c6004803603602081101561035f57600080fd5b5035610be3565b34801561037257600080fd5b5061015c6004803603606081101561038957600080fd5b5080359060208101359060400135610c6b565b61015c600480360360208110156103b257600080fd5b5035610ec2565b3480156103c557600080fd5b5061015c600480360360208110156103dc57600080fd5b5035610ecc565b61015c600480360360408110156103f957600080fd5b5080359060200135610f54565b34801561041257600080fd5b506101af6004803603602081101561042957600080fd5b50356001600160a01b0316611007565b34801561044557600080fd5b5061044e611018565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610488578181015183820152602001610470565b50505050905090810190601f1680156104b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104cf57600080fd5b5061015c600480360360208110156104e657600080fd5b50356001600160a01b0316611038565b6001600160a01b038116610545576040805162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015290519081900360640190fd5b61054f8282611041565b61055982826111fa565b6040805183815290516001600160a01b038316917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a25050565b6105a461120d565b565b60006105c960405180606001604052806027815260200161252e602791396112b7565b90505b90565b60006105c96040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f414354495645008152506112b7565b6105a4611334565b61062181336104f6565b50565b600090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156106a0576040805162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015290519081900360640190fd5b60006106aa610624565b602090810291508101808310156106fe576040805162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015290519081900360640190fd5b600061070c82848688612492565b602081101561071a57600080fd5b50356001600160a01b031690503660006107368582888a612492565b9150915061074482826107fe565b3660006107538887818c612492565b90925090506001600160a01b0385161561077e576107728583836113be565b505050505050506107fe565b610786611615565b156107da5780156107d5576040805162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015290519081900360640190fd5b6107f6565b6107e48282611675565b6107ee828261180d565b6107f661184a565b505050505050505b5050565b61080a6105cf565b61084c576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b8060006108576118cc565b600083815260209190915260409020546001600160a01b03169050806108bb576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610909576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b6109116118ef565b6001600160a01b0316637a98660b610927611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee56109528989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109b457818101518382015260200161099c565b5050505090500195505050505050602060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b505050506040513d6020811015610a0657600080fd5b505060408051868152602081018590528151869233927fea57f52faafe318751f75acb6756cff3f66afc10201ef8f2d504e788985db3f5929081900390910190a35050505050565b60006105c96040518060600160405280602181526020016125a0602191396112b7565b610a7a336119bd565b610abd576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610ac5611615565b610b16576040805162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a45440000000000000000604482015290519081900360640190fd5b610b1f816119ec565b610b6a576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b610b7381611a0c565b610b7b611a2e565b6040805182815290517f7c4f4649950225877ed9efe9dd52350ec7c8be63c1ba43ead5dc74d9fc88deb89181900360200190a16040517f4ef0aca3da44a9503e18003dde42e77ce3415f7af25714333c7c09e255072fdf90600090a150565b61062181611a6e565b610bec336119bd565b610c2f576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517fa9aec19ec61c04ae0a4a1498ab6ce04cbd68b3d54c47888a45eb2bd37caf06bc9181900360200190a161062181611c14565b610c736105cf565b610cb5576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b806000610cc06118cc565b600083815260209190915260409020546001600160a01b0316905080610d24576040805162461bcd60e51b81526020600482015260146024820152731393d7d1115413d4d25517d513d7d0d05390d15360621b604482015290519081900360640190fd5b6001600160a01b0381163314610d72576040805162461bcd60e51b815260206004820152600e60248201526d27a7262cafa222a827a9a4aa27a960911b604482015290519081900360640190fd5b610d7a6118ef565b6001600160a01b0316636170ff1b610d90611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5610dbb8989611935565b876040518563ffffffff1660e01b81526004018085815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610e1d578181015183820152602001610e05565b5050505090500195505050505050602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d6020811015610e6f57600080fd5b50610e7c905085336111fa565b60408051868152602081018590528151869233927fb0b548d5e12b6a60adac4d6dd7610f55134cea4fd145535edc303a48063e0cb4929081900390910190a35050505050565b6106213482610f54565b610ed5336119bd565b610f18576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040805182815290517faf474b5afcf11bd99dc9fc7f499e6ab368d650bf7ef23993f0d61bd9ad7626519181900360200190a161062181611c36565b81341015610f9e576040805162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b604482015290519081900360640190fd5b34829003610faa6105a6565b8147031115610ff7576040805162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b604482015290519081900360640190fd5b611002838383611c58565b505050565b6000611012826119bd565b92915050565b606060405180606001604052806022815260200161255560229139905090565b61062181611fc1565b6110496105cf565b61108b576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60408051600480825260a08201909252606091602082016080803683370190505090506000816000815181106110bd57fe5b602002602001018181525050816001600160a01b0316816001815181106110e057fe5b602090810291909101015280516001600160801b038416908290600290811061110557fe5b602002602001018181525050608083901c8160038151811061112357fe5b6020026020010181815250506111376118ef565b6001600160a01b0316632c9dd5c061114d611912565b836040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156111a357818101518382015260200161118b565b505050509050019350505050602060405180830381600087803b1580156111c957600080fd5b505af11580156111dd573d6000803e3d6000fd5b505050506040513d60208110156111f357600080fd5b5050505050565b6107fe6001600160a01b0382168361210e565b611216336119bd565b611259576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60006112636121b4565b60018101549091506001600160a01b031615610621576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080826040516020018082805190602001908083835b602083106112ed5780518252601f1990920191602091820191016112ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508054915050919050565b600061133e6121b4565b60018101549091506001600160a01b031633146113a2576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b6113ab336121d8565b60010180546001600160a01b0319169055565b6113d0836001600160a01b031661228c565b611416576040805162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015290519081900360640190fd5b60006060846001600160a01b031663439fab9160e01b85856040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106114c75780518252601f1990920191602091820191016114a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611527576040519150601f19603f3d011682016040523d82523d6000602084013e61152c565b606091505b50915091508181906115bc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611581578181015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805181901561160d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611581578181015183820152602001611569565b505050505050565b600061161f610624565b61163f57600061162d6118ef565b6001600160a01b0316141590506105cc565b60006116496118ef565b6001600160a01b0316141580156105c957506000611665612292565b6001600160a01b03161415905090565b604081146116be576040805162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015290519081900360640190fd5b600080838360408110156116d157600080fd5b506001600160a01b038135811693506020909101351690506116f1610624565b1561175e57611708826001600160a01b031661228c565b611759576040805162461bcd60e51b815260206004820152601c60248201527f494e56414c49445f4252494447455f544f4b454e5f4144445245535300000000604482015290519081900360640190fd5b6117ba565b6001600160a01b038216156117ba576040805162461bcd60e51b815260206004820152601f60248201527f4e4f4e5f5a45524f5f544f4b454e5f414444524553535f50524f564944454400604482015290519081900360640190fd5b6117cc816001600160a01b031661228c565b6118075760405162461bcd60e51b81526004018080602001828103825260228152602001806125c16022913960400191505060405180910390fd5b50505050565b6000808383604081101561182057600080fd5b506001600160a01b03813581169350602090910135169050611841826122b5565b611807816122d7565b60006118546121b4565b6001810154909150600160a01b900460ff16156118ae576040805162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055610621336121d8565b60006105c9604051806060016040528060298152602001612577602991396122f9565b60006105c96040518060600160405280602881526020016124bb602891396112b7565b60006105c9604051806060016040528060278152602001612507602791396112b7565b60408051600380825260808201909252606091829190602082018380368337019050509050828160008151811061196857fe5b602090810291909101015280516001600160801b038516908290600190811061198d57fe5b602002602001018181525050608084901c816002815181106119ab57fe5b60209081029190910101529392505050565b6000806119c86121b4565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60008082118015611012575050600167080000000000001160c01b011190565b6106216040518060600160405280602781526020016125076027913982612375565b6105a46040518060400160405280601f81526020017f535441524b4e45545f544f4b454e5f4252494447455f49535f4143544956450081525060016123c4565b611a77336119bd565b611aba576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611ac46121b4565b90506001600160a01b038216611b0f576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b611b18826119bd565b15611b5d576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611bbd576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61062160405180606001604052806027815260200161252e60279139826123c4565b6106216040518060600160405280602181526020016125a060219139826123c4565b611c606105cf565b611ca2576040805162461bcd60e51b815260206004820152600e60248201526d1393d517d050d512559157d6515560921b604482015290519081900360640190fd5b60008311611ce6576040805162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b604482015290519081900360640190fd5b80341015611d34576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4d53475f56414c554560501b604482015290519081900360640190fd5b611d3d826119ec565b611d88576040805162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b604482015290519081900360640190fd5b611d90610a4e565b831115611dce5760405162461bcd60e51b81526004018080602001828103825260248152602001806124e36024913960400191505060405180910390fd5b6000611dd86118ef565b6001600160a01b0316633e3aa6c583611def611912565b7f02d757788a8d8d6f21d1cd40bce38a8222d70654214e96ff95d8086e684fbee5611e1a8989611935565b6040518563ffffffff1660e01b81526004018084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611e75578181015183820152602001611e5d565b5050505090500194505050505060408051808303818588803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b50505050506040513d6040811015611ec557600080fd5b506020015190506000611ed66118cc565b600083815260209190915260409020546001600160a01b031614611f41576040805162461bcd60e51b815260206004820152601a60248201527f4445504f5349545f414c52454144595f52454749535445524544000000000000604482015290519081900360640190fd5b33611f4a6118cc565b6000838152602091825260409081902080546001600160a01b0319166001600160a01b03949094169390931790925581518681529081018390528082018490529051849133917f5b5dbc6c64043a15d3fe6943a6e443a826b78755edc257b2ec890c022225dbcf916060908290030190a350505050565b611fca336119bd565b61200d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b0382161415612062576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b600061206c6121b4565b9050612077826119bd565b6120b7576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b80612118576107fe565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612163576040519150601f19603f3d011682016040523d82523d6000602084013e612168565b606091505b5050905080611002576040805162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000090565b6121e1816119bd565b15612226576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006122306121b4565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b3b151590565b60006105c96040518060600160405280602981526020016125e3602991396112b7565b6106216040518060600160405280602981526020016125e3602991398261243e565b6106216040518060600160405280602881526020016124bb602891398261243e565b600080826040516020018082805190602001908083835b6020831061232f5780518252601f199092019160209182019101612310565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905080915050919050565b61237e826112b7565b156123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b6107fe82825b6000826040516020018082805190602001908083835b602083106123f95780518252601f1990920191602091820191016123da565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050818155505050565b6000612449836112b7565b6001600160a01b0316146123be576040805162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015290519081900360640190fd5b600080858511156124a1578182fd5b838611156124ad578182fd5b505082019391909203915056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e54524143545452414e534645525f544f5f535441524b4e45545f414d4f554e545f4558434545444544535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354535441524b4e45545f544f4b454e5f4252494447455f4d41585f544f54414c5f42414c414e4345537461726b576172655f537461726b6e65744574684272696467655f323032335f31535441524b4e45545f544f4b454e5f4252494447455f4445504f5349544f525f414444524553534553535441524b4e45545f544f4b454e5f4252494447455f4d41585f4445504f534954494e56414c49445f4d4553534147494e475f434f4e54524143545f41444452455353535441524b4e45545f45524332305f544f4b454e5f4252494447455f544f4b454e5f41444452455353a264697066735822122077a5742ae8396ab37789995ac4772cf5e0c19f0cd844773b14d6f3165f96f29264736f6c634300060c0033535441524b574152455f44454641554c545f474f5645524e414e43455f494e464f"}} diff --git a/crates/sandbox/artifacts/StarknetTokenBridge.json b/crates/sandbox/artifacts/StarknetTokenBridge.json index e140e46..42a2bfa 100644 --- a/crates/sandbox/artifacts/StarknetTokenBridge.json +++ b/crates/sandbox/artifacts/StarknetTokenBridge.json @@ -1,1303 +1 @@ -{ - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "DepositCancelRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "DepositReclaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "DepositWithMessage", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "DepositWithMessageCancelRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "DepositWithMessageReclaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SetL2TokenBridge", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "SetMaxTotalBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "deploymentMsgHash", - "type": "bytes32" - } - ], - "name": "TokenEnrollmentInitiated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "WithdrawalLimitDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "WithdrawalLimitEnabled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "checkDeploymentStatus", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "deactivate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositCancelRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositReclaim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - } - ], - "name": "depositWithMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositWithMessageCancelRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Recipient", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "message", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "depositWithMessageReclaim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "disableWithdrawalLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "enableWithdrawalLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "enrollToken", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "estimateDepositFeeWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "estimateEnrollmentFeeWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getMaxTotalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getRemainingIntradayAllowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getStatus", - "outputs": [ - { - "internalType": "enum StarknetTokenStorage.TokenStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "identify", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isAppRoleAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isFrozen", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isGovernanceAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isSecurityAgent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "isServicingToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isTokenAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isUpgradeGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "registerUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeAppRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeGovernanceAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeSecurityAgent", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeTokenAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeUpgradeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2TokenBridge_", - "type": "uint256" - } - ], - "name": "setL2TokenBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxTotalBalance_", - "type": "uint256" - } - ], - "name": "setMaxTotalBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": { - "object": "0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99" - } -} \ No newline at end of file +{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositCancelRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"DepositWithMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositWithMessageCancelRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositWithMessageReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetL2TokenBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxTotalBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"TokenDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"deploymentMsgHash","type":"bytes32"}],"name":"TokenEnrollmentInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"WithdrawalLimitDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"WithdrawalLimitEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"checkDeploymentStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"deactivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositCancelRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositReclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"}],"name":"depositWithMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositWithMessageCancelRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositWithMessageReclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"disableWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enableWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enrollToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"estimateDepositFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"estimateEnrollmentFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getMaxTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getRemainingIntradayAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getStatus","outputs":[{"internalType":"enum StarknetTokenStorage.TokenStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isServicingToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2TokenBridge_","type":"uint256"}],"name":"setL2TokenBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"maxTotalBalance_","type":"uint256"}],"name":"setMaxTotalBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/src/unsafe_proxy.rs b/crates/sandbox/src/deploy.rs similarity index 79% rename from crates/sandbox/src/unsafe_proxy.rs rename to crates/sandbox/src/deploy.rs index 4beed84..4d45168 100644 --- a/crates/sandbox/src/unsafe_proxy.rs +++ b/crates/sandbox/src/deploy.rs @@ -1,21 +1,17 @@ use std::sync::Arc; -use ethers::abi::Tokenize; -use ethers::contract::ContractInstance; - use starknet_core_contract_client::clients::{StarknetSovereignContractClient, StarknetEthBridgeContractClient, StarknetTokenBridgeContractClient, StarkgateManagerContractClient, StarkgateRegistryContractClient, DaiERC20ContractClient}; -use crate::{deploy_contract, Error, LocalWalletSignerMiddleware}; +use crate::{deploy_contract, deploy_contract_behind_unsafe_proxy, Error, LocalWalletSignerMiddleware}; const STARKNET_SOVEREIGN: &str = include_str!("../artifacts/Starknet.json"); -const STARKNET_ETH_BRIDGE: &str = include_str!("../artifacts/StarknetEthBridge.json"); +const STARKNET_ETH_BRIDGE: &str = include_str!("../artifacts/StarknetLegacyBridge.json"); const STARKGATE_MANAGER: &str = include_str!("../artifacts/StarkgateManager.json"); const STARKGATE_REGISTRY: &str = include_str!("../artifacts/StarkgateRegistry.json"); const STARKNET_TOKEN_BRIDGE: &str = include_str!("../artifacts/StarknetTokenBridge.json"); -const ERC20_TOKEN: &str = include_str!("../artifacts/DaiERC20.json"); +const DAI_ERC20_TOKEN: &str = include_str!("../artifacts/DaiERC20Token.json"); -const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); /// Deploy Starknet sovereign contract and unsafe proxy for it. /// Cached forge artifacts are used for deployment, make sure they are up to date. @@ -83,7 +79,7 @@ pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract(client.clone(), ERC20_TOKEN, ()).await?; + let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, ()).await?; Ok(DaiERC20ContractClient::new( contract.address(), @@ -91,25 +87,6 @@ pub async fn deploy_dai_erc20_behind_unsafe_proxy( )) } - -pub async fn deploy_contract_behind_unsafe_proxy( - client: Arc, - contract_path: &str, - constructor_args: T, -) -> Result, LocalWalletSignerMiddleware>, Error> { - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; - - // Once we know the main contract address (implementation address) - // we can deploy and initialize our delegate proxy. - // NOTE that real world proxies typically allow changing the implementation - // address dynamically (this is basically how upgrades work). In our case, - // for simplicity, the proxy is initialized only once during the deployment. - let proxy_contract = - deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; - - return Ok(proxy_contract); -} - #[cfg(test)] mod tests { use super::deploy_starknet_sovereign_behind_unsafe_proxy; @@ -119,7 +96,7 @@ mod tests { CoreContractInitData, OperatorTrait, ProxyInitializeData, ProxySupportTrait, StarknetSovereignContractTrait, }, - StarknetCoreContractClient, + StarknetContractClient, }; #[tokio::test] diff --git a/crates/sandbox/src/lib.rs b/crates/sandbox/src/lib.rs index dc39931..0613b87 100644 --- a/crates/sandbox/src/lib.rs +++ b/crates/sandbox/src/lib.rs @@ -15,7 +15,7 @@ use std::time::Duration; /// that is used to make Starknet core contract upgradeable. /// This implementation DOES NOT restrict who can invoke the core contract. /// For more information see https://l2beat.com/scaling/projects/starknet#contracts -pub mod unsafe_proxy; +pub mod deploy; /// Ethers library allows multiple signer backends and transports. /// For simplicity we use local wallet (basically private key) and @@ -29,6 +29,8 @@ const ANVIL_DEFAULT_CHAIN_ID: u64 = 31337; const ANVIL_DEFAULT_PRIVATE_KEY: &str = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; +const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); + #[derive(Debug, thiserror::Error)] pub enum Error { #[error(transparent)] @@ -161,3 +163,19 @@ pub async fn deploy_contract( .await .map_err(Into::>::into)?) } + +/// Deploys new unsafe proxy contract: +/// - Implementation can be set only once at initialization +/// - Traditional (Safe) proxies can be upgraded multiple times +pub async fn deploy_contract_behind_unsafe_proxy( + client: Arc, + contract_path: &str, + constructor_args: T, +) -> Result, LocalWalletSignerMiddleware>, Error> { + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; + + let proxy_contract = + deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; + + return Ok(proxy_contract); +} \ No newline at end of file From 5426c463ee50c0fdd2a4a4d156a2c80695ef48e1 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Wed, 13 Mar 2024 00:36:22 +0530 Subject: [PATCH 22/31] add: withdraw function --- .../src/interfaces/eth_bridge.rs | 1 + .../src/interfaces/token_bridge.rs | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index 252a696..06c8cd2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -16,6 +16,7 @@ abigen!( function setL2TokenBridge(uint256 l2TokenBridge_) external onlyGovernance function deposit(uint256 amount, uint256 l2Recipient) public payable override + function withdraw(uint256 amount, address recipient) public function identify() external pure override returns (string memory) ]"#, diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs index 1e7c937..70e969c 100644 --- a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs @@ -19,7 +19,7 @@ abigen!( function disableWithdrawalLimit(address token) external onlySecurityAdmin function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor - function withdraw(address token, uint256 amount) external + function withdraw(address token, uint256 amount, address recipient) public function registerAppGovernor(address account) external function registerAppRoleAdmin(address account) external function registerGovernanceAdmin(address account) external @@ -47,7 +47,7 @@ pub trait StarknetTokenBridgeTrait { async fn enable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn disable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error>; - async fn withdraw(&self, token: Address, amount: U256) -> Result, Error>; + async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error>; async fn register_app_governor(&self, account: Address) -> Result, Error>; async fn register_app_role_admin(&self, account: Address) -> Result, Error>; async fn register_governance_admin(&self, account: Address) -> Result, Error>; @@ -122,9 +122,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn withdraw(&self, token: Address, amount: U256) -> Result, Error> { + async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error> { self.as_ref() - .withdraw(token, amount) + .withdraw(token, amount, recipient) .send() .await .map_err(Into::>::into)? From 4b4e6e0b2022bc91261e5d8a3e95dc73bddd2d5e Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Wed, 13 Mar 2024 00:45:07 +0530 Subject: [PATCH 23/31] fix --- .../src/interfaces/eth_bridge.rs | 22 +++++++++++++--- .../src/interfaces/token_bridge.rs | 25 ++++++++++--------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs index 06c8cd2..f54065a 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs @@ -1,3 +1,4 @@ +use std::ops::Add; use async_trait::async_trait; use ethers::{ contract::ContractError, @@ -5,9 +6,12 @@ use ethers::{ providers::Middleware, types::{TransactionReceipt, U256}, }; +use ethers::prelude::H160; use crate::Error; +type Address = H160; + abigen!( StarknetEthBridge, r#"[ @@ -27,7 +31,8 @@ pub trait StarknetEthBridgeTrait { async fn set_max_total_balance(&self, max_total_balance: U256) -> Result, Error>; async fn set_max_deposit(&self, max_deposit: U256) -> Result, Error>; async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; - async fn deposit(&self, amount: U256, l2recipient: U256, fee: U256) -> Result, Error>; + async fn deposit(&self, amount: U256, l2_recipient: U256, fee: U256) -> Result, Error>; + async fn withdraw(&self, amount: U256, l1_recipient: Address) -> Result, Error>; async fn identify(&self) -> Result>; } @@ -66,9 +71,9 @@ impl StarknetEthBridgeTrait for T .map_err(Into::into) } - async fn deposit(&self, amount: U256, l2recipient: U256, fee: U256) -> Result, Error> { + async fn deposit(&self, amount: U256, l2_recipient: U256, fee: U256) -> Result, Error> { self.as_ref() - .deposit(amount, l2recipient) + .deposit(amount, l2_recipient) .value(fee) .send() .await @@ -78,6 +83,17 @@ impl StarknetEthBridgeTrait for T } + async fn withdraw(&self, amount: U256, l1_recipient: Address) -> Result, Error> { + self.as_ref() + .withdraw(amount, l1_recipient) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + + } + async fn identify(&self) -> Result> { self.as_ref() .identify() diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs index 70e969c..78e35d7 100644 --- a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs +++ b/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs @@ -14,12 +14,13 @@ abigen!( StarknetTokenBridge, r#"[ function deposit(address token, uint256 amount, uint256 l2Recipient) external payable onlyServicingToken + function withdraw(address token, uint256 amount, address recipient) public + function setL2TokenBridge(uint256 l2TokenBridge_) external onlyAppGovernor function enableWithdrawalLimit(address token) external onlySecurityAgent function disableWithdrawalLimit(address token) external onlySecurityAdmin function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor - function withdraw(address token, uint256 amount, address recipient) public function registerAppGovernor(address account) external function registerAppRoleAdmin(address account) external function registerGovernanceAdmin(address account) external @@ -42,12 +43,12 @@ abigen!( #[async_trait] pub trait StarknetTokenBridgeTrait { async fn deposit(&self, token: Address, amount: U256, l2_recipient: U256, fee: U256) -> Result, Error>; + async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error>; async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error>; async fn enable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn disable_withdrawal_limit(&self, address: Address) -> Result, Error>; async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error>; - async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error>; async fn register_app_governor(&self, account: Address) -> Result, Error>; async fn register_app_role_admin(&self, account: Address) -> Result, Error>; async fn register_governance_admin(&self, account: Address) -> Result, Error>; @@ -82,9 +83,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error> { + async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error> { self.as_ref() - .set_l2_token_bridge(l2_token_bridge) + .withdraw(token, amount, recipient) .send() .await .map_err(Into::>::into)? @@ -92,9 +93,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn enable_withdrawal_limit(&self, token: Address) -> Result, Error> { + async fn set_l2_token_bridge(&self, l2_token_bridge: U256) -> Result, Error> { self.as_ref() - .enable_withdrawal_limit(token) + .set_l2_token_bridge(l2_token_bridge) .send() .await .map_err(Into::>::into)? @@ -102,9 +103,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn disable_withdrawal_limit(&self, token: Address) -> Result, Error> { + async fn enable_withdrawal_limit(&self, token: Address) -> Result, Error> { self.as_ref() - .disable_withdrawal_limit(token) + .enable_withdrawal_limit(token) .send() .await .map_err(Into::>::into)? @@ -112,9 +113,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error> { + async fn disable_withdrawal_limit(&self, token: Address) -> Result, Error> { self.as_ref() - .set_max_total_balance(token, max_total_balance) + .disable_withdrawal_limit(token) .send() .await .map_err(Into::>::into)? @@ -122,9 +123,9 @@ impl StarknetTokenBridgeTrait for T .map_err(Into::into) } - async fn withdraw(&self, token: Address, amount: U256, recipient: Address) -> Result, Error> { + async fn set_max_total_balance(&self, token: Address, max_total_balance: U256) -> Result, Error> { self.as_ref() - .withdraw(token, amount, recipient) + .set_max_total_balance(token, max_total_balance) .send() .await .map_err(Into::>::into)? From 59234b88ee6faf9ec39cd1ba1f6474658a7763f4 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Wed, 13 Mar 2024 11:32:06 +0530 Subject: [PATCH 24/31] remove .idea --- .idea/.gitignore | 8 -------- .idea/modules.xml | 8 -------- .idea/vcs.xml | 10 ---------- .idea/zaun.iml | 13 ------------- 4 files changed, 39 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/zaun.iml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index f837c17..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index bc51efb..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/zaun.iml b/.idea/zaun.iml deleted file mode 100644 index 556bb8c..0000000 --- a/.idea/zaun.iml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file From 452e5f8a9c22ed7042c886e35aafbf8fdfc3e7e0 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Apr 2024 13:56:24 +0530 Subject: [PATCH 25/31] zaun module updates (#2) * feat : added ethereum client for custom input * feat : code refactoring | module splitting * fixes : pr #1 * fixes : pr #1 | iter 2 * fixes : pr #1 | proxy client update * fixes : pr #1 | proxy client update | ethereum instance * fixes : pr #1 | proxy client update | ethereum instance * fix : starkgate_manager_client modules * feat : updated the deps and visibility * feat : updated abis --- Cargo.lock | 120 +++++++++++++-- Cargo.toml | 2 +- README.md | 22 +-- .../{sandbox => ethereum-instance}/Cargo.toml | 4 +- .../{sandbox => ethereum-instance}/src/lib.rs | 70 +++++---- .../sandbox/artifacts/StarkgateManager.json | 1 - .../sandbox/artifacts/StarkgateRegistry.json | 1 - .../artifacts/StarknetTokenBridge.json | 1 - crates/sandbox/src/deploy.rs | 137 ------------------ crates/starkgate-manager-client/Cargo.toml | 17 +++ .../src/artifacts/StarkgateManager.json | 1 + .../src/clients/mod.rs | 2 + .../src/clients/starkgate_manager.rs | 6 +- .../src/interfaces/manager.rs | 2 +- .../src/interfaces/mod.rs | 1 + crates/starkgate-manager-client/src/lib.rs | 21 +++ crates/starkgate-registry-client/Cargo.toml | 17 +++ .../src/artifacts/StarkgateRegistry.json | 1 + .../src/clients/mod.rs | 2 + .../src/clients/starkgate_registry.rs | 6 +- .../src/interfaces/mod.rs | 1 + .../src/interfaces/registry.rs | 2 +- crates/starkgate-registry-client/src/lib.rs | 22 +++ .../starknet-core-contract-client/Cargo.toml | 2 + .../src}/artifacts/Starknet.json | 0 .../src/clients/dai_erc20.rs | 35 ----- .../src/clients/mod.rs | 11 -- .../src/clients/sovereign.rs | 11 +- .../src/clients/validity.rs | 8 +- .../src/interfaces/governance.rs | 2 +- .../src/interfaces/governed_finalizable.rs | 2 +- .../src/interfaces/messaging.rs | 2 +- .../src/interfaces/mod.rs | 16 +- .../src/interfaces/operator.rs | 2 +- .../src/interfaces/sovereign_core_contract.rs | 2 +- .../src/interfaces/validity_core_contract.rs | 2 +- .../starknet-core-contract-client/src/lib.rs | 33 +++-- crates/starknet-erc20-client/Cargo.toml | 18 +++ .../src/artifacts/ERC20Token.json} | 0 .../src/clients/erc20.rs | 34 +++++ .../starknet-erc20-client/src/clients/mod.rs | 2 + .../src/interfaces/erc20.rs} | 10 +- .../src/interfaces/mod.rs | 1 + crates/starknet-erc20-client/src/lib.rs | 23 +++ crates/starknet-eth-bridge-client/Cargo.toml | 17 +++ .../src}/artifacts/StarknetLegacyBridge.json | 0 .../src/clients/eth_bridge.rs | 4 +- .../src/clients/mod.rs | 1 + .../src/interfaces/eth_bridge.rs | 3 +- .../src/interfaces/mod.rs | 2 + crates/starknet-eth-bridge-client/src/lib.rs | 21 +++ crates/starknet-proxy-client/Cargo.toml | 18 +++ .../src}/artifacts/UnsafeProxy.json | 0 crates/starknet-proxy-client/src/deploy.rs | 44 ++++++ crates/starknet-proxy-client/src/lib.rs | 2 + .../src}/proxy_support.rs | 2 +- .../starknet-token-bridge-client/Cargo.toml | 17 +++ .../src/artifacts/StarknetTokenBridge.json | 1 + .../src/clients/mod.rs | 2 + .../src/clients/token_bridge.rs | 6 +- .../src/interfaces/mod.rs | 1 + .../src/interfaces/token_bridge.rs | 2 +- .../starknet-token-bridge-client/src/lib.rs | 22 +++ crates/utils/Cargo.toml | 16 ++ .../src/error.rs => utils/src/errors.rs} | 0 crates/utils/src/lib.rs | 13 ++ 66 files changed, 555 insertions(+), 314 deletions(-) rename crates/{sandbox => ethereum-instance}/Cargo.toml (78%) rename crates/{sandbox => ethereum-instance}/src/lib.rs (77%) delete mode 100644 crates/sandbox/artifacts/StarkgateManager.json delete mode 100644 crates/sandbox/artifacts/StarkgateRegistry.json delete mode 100644 crates/sandbox/artifacts/StarknetTokenBridge.json delete mode 100644 crates/sandbox/src/deploy.rs create mode 100644 crates/starkgate-manager-client/Cargo.toml create mode 100644 crates/starkgate-manager-client/src/artifacts/StarkgateManager.json create mode 100644 crates/starkgate-manager-client/src/clients/mod.rs rename crates/{starknet-core-contract-client => starkgate-manager-client}/src/clients/starkgate_manager.rs (86%) rename crates/{starknet-core-contract-client => starkgate-manager-client}/src/interfaces/manager.rs (99%) create mode 100644 crates/starkgate-manager-client/src/interfaces/mod.rs create mode 100644 crates/starkgate-manager-client/src/lib.rs create mode 100644 crates/starkgate-registry-client/Cargo.toml create mode 100644 crates/starkgate-registry-client/src/artifacts/StarkgateRegistry.json create mode 100644 crates/starkgate-registry-client/src/clients/mod.rs rename crates/{starknet-core-contract-client => starkgate-registry-client}/src/clients/starkgate_registry.rs (86%) create mode 100644 crates/starkgate-registry-client/src/interfaces/mod.rs rename crates/{starknet-core-contract-client => starkgate-registry-client}/src/interfaces/registry.rs (98%) create mode 100644 crates/starkgate-registry-client/src/lib.rs rename crates/{sandbox => starknet-core-contract-client/src}/artifacts/Starknet.json (100%) delete mode 100644 crates/starknet-core-contract-client/src/clients/dai_erc20.rs create mode 100644 crates/starknet-erc20-client/Cargo.toml rename crates/{sandbox/artifacts/DaiERC20Token.json => starknet-erc20-client/src/artifacts/ERC20Token.json} (100%) create mode 100644 crates/starknet-erc20-client/src/clients/erc20.rs create mode 100644 crates/starknet-erc20-client/src/clients/mod.rs rename crates/{starknet-core-contract-client/src/interfaces/dai_erc20.rs => starknet-erc20-client/src/interfaces/erc20.rs} (93%) create mode 100644 crates/starknet-erc20-client/src/interfaces/mod.rs create mode 100644 crates/starknet-erc20-client/src/lib.rs create mode 100644 crates/starknet-eth-bridge-client/Cargo.toml rename crates/{sandbox => starknet-eth-bridge-client/src}/artifacts/StarknetLegacyBridge.json (100%) rename crates/{starknet-core-contract-client => starknet-eth-bridge-client}/src/clients/eth_bridge.rs (87%) create mode 100644 crates/starknet-eth-bridge-client/src/clients/mod.rs rename crates/{starknet-core-contract-client => starknet-eth-bridge-client}/src/interfaces/eth_bridge.rs (98%) create mode 100644 crates/starknet-eth-bridge-client/src/interfaces/mod.rs create mode 100644 crates/starknet-eth-bridge-client/src/lib.rs create mode 100644 crates/starknet-proxy-client/Cargo.toml rename crates/{sandbox => starknet-proxy-client/src}/artifacts/UnsafeProxy.json (100%) create mode 100644 crates/starknet-proxy-client/src/deploy.rs create mode 100644 crates/starknet-proxy-client/src/lib.rs rename crates/{starknet-core-contract-client/src/interfaces => starknet-proxy-client/src}/proxy_support.rs (99%) create mode 100644 crates/starknet-token-bridge-client/Cargo.toml create mode 100644 crates/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json create mode 100644 crates/starknet-token-bridge-client/src/clients/mod.rs rename crates/{starknet-core-contract-client => starknet-token-bridge-client}/src/clients/token_bridge.rs (87%) create mode 100644 crates/starknet-token-bridge-client/src/interfaces/mod.rs rename crates/{starknet-core-contract-client => starknet-token-bridge-client}/src/interfaces/token_bridge.rs (99%) create mode 100644 crates/starknet-token-bridge-client/src/lib.rs create mode 100644 crates/utils/Cargo.toml rename crates/{starknet-core-contract-client/src/error.rs => utils/src/errors.rs} (100%) create mode 100644 crates/utils/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index a991e29..e1a01eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -747,6 +747,19 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "ethereum-instance" +version = "0.1.0" +dependencies = [ + "dirs", + "ethers", + "hex", + "serde_json", + "thiserror", + "tokio", + "utils", +] + [[package]] name = "ethereum-types" version = "0.14.1" @@ -2491,19 +2504,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "sandbox" -version = "0.1.0" -dependencies = [ - "dirs", - "ethers", - "hex", - "serde_json", - "starknet-core-contract-client", - "thiserror", - "tokio", -] - [[package]] name = "scale-info" version = "2.10.0" @@ -2764,6 +2764,32 @@ dependencies = [ "der", ] +[[package]] +name = "starkgate-manager-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethers", + "log", + "num-traits", + "starknet-proxy-client", + "thiserror", + "utils", +] + +[[package]] +name = "starkgate-registry-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethers", + "log", + "num-traits", + "starknet-proxy-client", + "thiserror", + "utils", +] + [[package]] name = "starknet-core-contract-client" version = "0.1.0" @@ -2772,7 +2798,63 @@ dependencies = [ "ethers", "log", "num-traits", + "starknet-proxy-client", + "thiserror", + "utils", +] + +[[package]] +name = "starknet-erc20-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethereum-instance", + "ethers", + "log", + "num-traits", + "starknet-proxy-client", + "thiserror", + "utils", +] + +[[package]] +name = "starknet-eth-bridge-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethers", + "log", + "num-traits", + "starknet-proxy-client", "thiserror", + "utils", +] + +[[package]] +name = "starknet-proxy-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethereum-instance", + "ethers", + "log", + "num-traits", + "serde_json", + "thiserror", + "utils", +] + +[[package]] +name = "starknet-token-bridge-client" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethers", + "log", + "num-traits", + "starknet-proxy-client", + "thiserror", + "utils", ] [[package]] @@ -3254,6 +3336,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "async-trait", + "ethers", + "log", + "num-traits", + "serde_json", + "thiserror", +] + [[package]] name = "uuid" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 3c31b8c..8e20fd6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ resolver = "2" members = [ "crates/starknet-core-contract-client", - "crates/sandbox", + "crates/ethereum-instance", "crates/starknet-eth-bridge-client", "crates/starknet-token-bridge-client", "crates/starkgate-manager-client", "crates/utils", "crates/starknet-erc20-client", "crates/starkgate-registry-client", "crates/starknet-proxy-client", ] [workspace.package] diff --git a/README.md b/README.md index b590368..3c96060 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,52 @@ # Zaun -A development environment for Starknet Solidity contracts. -### Setup: +This repository contains interfaces and functions to interact with starknet solidity contracts. + +## Setup ```bash curl -L https://foundry.paradigm.xyz | bash foundryup ``` -### Testing: +## Testing Unit + ```bash forge test -vv ``` ### Devnet -Start Avnvil as background process w/ Core Contracts and STARK token: +Start Anvil as background process w/ Core Contracts and STARK token: + ```bash ./script/sn-base-dev.sh ``` Kill Anvil deployment: + ```bash ./script/sn-base-kill.sh ``` -### Artifacts +## Artifacts -Zaun sandbox crate can be used as dev dependency in external projects for integration testing. -If any changes made to the Solidity contracts, one has to re-generate Ethers bindings (this won't be done automatically). +Zaun sandbox crate can be used as dev dependency in external projects. If any changes made to the Solidity contracts, one has to re-generate Ethers bindings (this won't be done automatically). ```bash make artifacts ``` -### StarkNet Consensus Protocol Contracts +## StarkNet Consensus Protocol Contracts PoC solidity implementation of the following Starknet Decentralized Protocol proposal: + - [I - Introduction](https://community.starknet.io/t/starknet-decentralized-protocol-i-introduction/2671/1) - [II - Candidate for Leader Elections](https://community.starknet.io/t/starknet-decentralized-protocol-ii-candidate-for-leader-elections/4751) - [III - Consensus](https://community.starknet.io/t/starknet-decentralized-protocol-iii-consensus/5386) - [IV - Proofs in the Protocol](https://community.starknet.io/t/starknet-decentralized-protocol-iv-proofs-in-the-protocol/6030) - [V - Checkpoints for Fast Finality](https://community.starknet.io/t/starknet-decentralized-protocol-v-checkpoints-for-fast-finality/6032) - [VI - The Buffer Problem](https://community.starknet.io/t/starknet-decentralized-protocol-vi-the-buffer-problem/7098) -- [VII - Chained Proof Protocols & Braiding](https://community.starknet.io/t/starknet-decentralized-protocol-vii-chained-proof-protocols-braiding/18831) \ No newline at end of file +- [VII - Chained Proof Protocols & Braiding](https://community.starknet.io/t/starknet-decentralized-protocol-vii-chained-proof-protocols-braiding/18831) diff --git a/crates/sandbox/Cargo.toml b/crates/ethereum-instance/Cargo.toml similarity index 78% rename from crates/sandbox/Cargo.toml rename to crates/ethereum-instance/Cargo.toml index b80fa72..f0c102a 100644 --- a/crates/sandbox/Cargo.toml +++ b/crates/ethereum-instance/Cargo.toml @@ -1,16 +1,16 @@ [package] -name = "sandbox" +name = "ethereum-instance" edition.workspace = true version.workspace = true authors.workspace = true [dependencies] -starknet-core-contract-client = { path = "../starknet-core-contract-client" } ethers = { workspace = true } dirs = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } hex = { workspace = true } +utils = { path = "../utils" } [dev-dependencies] tokio = { version = "1.29.1", features = ["rt", "macros", "parking_lot"] } diff --git a/crates/sandbox/src/lib.rs b/crates/ethereum-instance/src/lib.rs similarity index 77% rename from crates/sandbox/src/lib.rs rename to crates/ethereum-instance/src/lib.rs index 0613b87..b5178b9 100644 --- a/crates/sandbox/src/lib.rs +++ b/crates/ethereum-instance/src/lib.rs @@ -1,26 +1,20 @@ use ethers::abi::Tokenize; -use ethers::contract::ContractError; +use ethers::contract::{ContractError, ContractFactory, ContractInstance}; use ethers::prelude::SignerMiddleware; -use ethers::prelude::{ContractFactory, ContractInstance}; use ethers::providers::{Http, Provider, ProviderError}; use ethers::signers::{LocalWallet, Signer}; -use ethers::types::Bytes; -use ethers::utils::hex::FromHex; use ethers::utils::{Anvil, AnvilInstance}; +use ethers::types::Bytes; +use hex::FromHex; use std::path::PathBuf; use std::sync::Arc; use std::time::Duration; -/// Unsafe proxy is a straightforward implementation of the delegate proxy contract -/// that is used to make Starknet core contract upgradeable. -/// This implementation DOES NOT restrict who can invoke the core contract. -/// For more information see https://l2beat.com/scaling/projects/starknet#contracts -pub mod deploy; /// Ethers library allows multiple signer backends and transports. /// For simplicity we use local wallet (basically private key) and /// HTTP transport in this crate. -pub use starknet_core_contract_client::LocalWalletSignerMiddleware; +pub use utils::LocalWalletSignerMiddleware; /// Sandbox is typically used for E2E scenarios so we need to speed things up const POLLING_INTERVAL_MS: u64 = 10; @@ -29,8 +23,6 @@ const ANVIL_DEFAULT_CHAIN_ID: u64 = 31337; const ANVIL_DEFAULT_PRIVATE_KEY: &str = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; -const UNSAFE_PROXY: &str = include_str!("../artifacts/UnsafeProxy.json"); - #[derive(Debug, thiserror::Error)] pub enum Error { #[error(transparent)] @@ -49,15 +41,15 @@ pub enum Error { ContractBuildArtifacts(&'static str), } -/// A convenient wrapper over an already running or spawned Anvil local devnet -pub struct EthereumSandbox { +/// A convenient wrapper over an already running or spawned Anvil local devnet or ethereum +pub struct EthereumClient { /// If initialized keeps an Anvil instance to properly shutdown it at the end _anvil: Option, /// Pre-configured local signer - client: Arc, + signer: Arc, } -impl EthereumSandbox { +impl EthereumClient { /// Creates a new sandbox instance. /// Will try to attach to already running Anvil instance using one /// of the following endpoints: @@ -87,7 +79,7 @@ impl EthereumSandbox { Ok(Self { _anvil: None, - client: Arc::new(client), + signer: Arc::new(client), }) } @@ -117,19 +109,39 @@ impl EthereumSandbox { Self { _anvil: Some(anvil), - client: Arc::new(client), + signer: Arc::new(client), } } /// Returns local client configured for the running Anvil instance + pub fn signer(&self) -> Arc { + self.signer.clone() + } +} + + +/// Wrapper For Spawning a ethereum instance using the provider +/// Used for deploying on the main network purposes +pub struct EthereumInstance { + client: Arc +} + +impl EthereumInstance { + pub fn spawn(rpc_url: String, priv_key: String, chain_id: u64) -> Self { + + let provider = Provider::::try_from(rpc_url).expect("Failed to connect to the given rpc url"); + let wallet: LocalWallet = priv_key.parse::().unwrap(); + + let client = SignerMiddleware::new(provider.clone(), wallet.with_chain_id(chain_id)); + + Self { client: Arc::new(client) } + } + pub fn client(&self) -> Arc { self.client.clone() } } -/// Deploys new smart contract using: -/// - Forge build artifacts (JSON file contents) -/// - Constructor args (use () if no args expected) pub async fn deploy_contract( client: Arc, contract_build_artifacts: &str, @@ -162,20 +174,4 @@ pub async fn deploy_contract( .send() .await .map_err(Into::>::into)?) -} - -/// Deploys new unsafe proxy contract: -/// - Implementation can be set only once at initialization -/// - Traditional (Safe) proxies can be upgraded multiple times -pub async fn deploy_contract_behind_unsafe_proxy( - client: Arc, - contract_path: &str, - constructor_args: T, -) -> Result, LocalWalletSignerMiddleware>, Error> { - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; - - let proxy_contract = - deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; - - return Ok(proxy_contract); } \ No newline at end of file diff --git a/crates/sandbox/artifacts/StarkgateManager.json b/crates/sandbox/artifacts/StarkgateManager.json deleted file mode 100644 index 77d1897..0000000 --- a/crates/sandbox/artifacts/StarkgateManager.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"ExistingBridgeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenBlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"TokenEnrolled","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge_","type":"address"}],"name":"addExistingBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"blockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"deactivateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enrollTokenBridge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f805160206200286a8339815191525f9081525f80516020620028aa8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f805160206200286a83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620028ca83398151915262000486565b620002685f80516020620028ca8339815191525f805160206200286a83398151915262000486565b620002825f805160206200286a8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620028ca83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620028ca83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200286a83398151915262000486565b5f805160206200288a8339815191525f9081525f80516020620028aa8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f805160206200288a8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200288a83398151915262000486565b6200003a5f805160206200288a833981519152825b5f8281525f80516020620028aa833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620028aa833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620028aa8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05161236b620004ff5f395f6106ca01525f61075c015261236b5ff3fe6080604052600436106101e6575f3560e01c8063726176e811610108578063cdd1f70d1161009d578063ed9ef16a1161006d578063ed9ef16a14610555578063ee0e680714610574578063eeb7286614610593578063fa0f73ba146105de578063fad8b32a146105fd575f80fd5b8063cdd1f70d146104d9578063d08fb6cb146104f8578063d9fa709114610517578063deec9c5a14610536575f80fd5b80639463629a116100d85780639463629a14610469578063a2bdde3d14610488578063c1d220fe146104a7578063cb1cccce146104ba575f80fd5b8063726176e8146103ed578063757bd9ab1461040c5780638101b64c1461042b5780638e5224ff1461044a575f80fd5b80634ee165d61161017e57806368173bcf1161014e57806368173bcf146103715780636c04d9d5146103905780636d70f7ae146103af5780636fc97cbf146103ce575f80fd5b80634ee165d6146102e85780635a5d1bb9146103075780635ab1bd531461032657806362a1437614610352575f80fd5b806333eeb147116101b957806333eeb1471461026857806336568abe1461028b5780633682a450146102aa578063439fab91146102c9575f80fd5b80630b3a2d21146101ea5780630e770f231461020b578063178963831461022a5780632f95198514610249575b5f80fd5b3480156101f5575f80fd5b50610209610204366004611df8565b61061c565b005b348015610216575f80fd5b50610209610225366004611df8565b610636565b348015610235575f80fd5b50610209610244366004611df8565b61064d565b348015610254575f80fd5b50610209610263366004611df8565b610664565b348015610273575f80fd5b505f5b60405190151581526020015b60405180910390f35b348015610296575f80fd5b506102096102a5366004611e13565b6106b1565b3480156102b5575f80fd5b506102096102c4366004611df8565b610742565b3480156102d4575f80fd5b506102096102e3366004611e41565b610759565b3480156102f3575f80fd5b50610209610302366004611ead565b610905565b348015610312575f80fd5b50610276610321366004611df8565b610a46565b348015610331575f80fd5b5061033a610a64565b6040516001600160a01b039091168152602001610282565b34801561035d575f80fd5b5061020961036c366004611df8565b610a72565b34801561037c575f80fd5b5061020961038b366004611df8565b610a89565b34801561039b575f80fd5b506102766103aa366004611df8565b610d8c565b3480156103ba575f80fd5b506102766103c9366004611df8565b610da4565b3480156103d9575f80fd5b506102096103e8366004611df8565b610dbc565b3480156103f8575f80fd5b50610209610407366004611df8565b610dd3565b348015610417575f80fd5b50610276610426366004611df8565b610fe8565b348015610436575f80fd5b50610209610445366004611df8565b611000565b348015610455575f80fd5b50610276610464366004611df8565b611040565b348015610474575f80fd5b50610209610483366004611df8565b611058565b348015610493575f80fd5b506102766104a2366004611df8565b61106f565b6102096104b5366004611df8565b611087565b3480156104c5575f80fd5b506102766104d4366004611df8565b61123f565b3480156104e4575f80fd5b506102096104f3366004611df8565b611257565b348015610503575f80fd5b50610276610512366004611df8565b61126e565b348015610522575f80fd5b50610209610531366004611df8565b611286565b348015610541575f80fd5b50610209610550366004611df8565b61129d565b348015610560575f80fd5b5061020961056f366004611df8565b6112b4565b34801561057f575f80fd5b5061020961058e366004611df8565b6112cb565b34801561059e575f80fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102829190611efb565b3480156105e9575f80fd5b506102096105f8366004611df8565b61130b565b348015610608575f80fd5b50610209610617366004611df8565b611322565b6106335f8051602061231683398151915282611339565b50565b6106335f8051602061229583398151915282611339565b6106335f805160206122b583398151915282611339565b80336001600160a01b038216036106965760405162461bcd60e51b815260040161068d90611f2d565b60405180910390fd5b6106ad5f805160206122b583398151915283611355565b5050565b5f805160206121d2833981519152821480156106eb57507f0000000000000000000000000000000000000000000000000000000000000000155b156107385760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e604482015260640161068d565b6106ad8282611371565b6106335f805160206122f683398151915282611339565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107ca5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b604482015260640161068d565b5f6107d6816020611f71565b90505f6107e4826020611f88565b90508083101561082c5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b604482015260640161068d565b5f61083982848688611f9b565b8101906108469190611df8565b9050365f6108568582888a611f9b565b91509150365f6108688887818c611f9b565b90925090506001600160a01b03851615610892576108878583836113eb565b505050505050505050565b61089a611529565b156108e95780156108e45760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b604482015260640161068d565b610887565b6108f38282611543565b6108fd828261165f565b610887611683565b61090e3361106f565b61092a5760405162461bcd60e51b815260040161068d90611fc2565b806001600160a01b031661093c61168e565b6001600160a01b0316036109a35760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b606482015260840161068d565b6109ab6116b0565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f906044015f604051808303815f87803b1580156109f5575f80fd5b505af1158015610a07573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef0905f90a35050565b5f610a5e5f80516020612212833981519152836116d2565b92915050565b5f610a6d6116b0565b905090565b6106335f805160206121f283398151915282611339565b610a923361106f565b610aae5760405162461bcd60e51b815260040161068d90611fc2565b5f610ab76116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b249190611ffc565b90506001600160a01b038116610b715760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b604482015260640161068d565b5f196001600160a01b03821601610c7b57604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610bc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bef919081019061202b565b5115610c30576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610c5f565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b815260040161068d9190611efb565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e8906024015f604051808303815f87803b158015610cef575f80fd5b505af1158015610d01573d5f803e3d5ffd5b50505050610d0d61168e565b6001600160a01b0316816001600160a01b031603610d8757610d2d61168e565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b5f604051808303815f87803b158015610d70575f80fd5b505af1158015610d82573d5f803e3d5ffd5b505050505b505050565b5f610a5e5f80516020612232833981519152836116d2565b5f610a5e5f805160206122f6833981519152836116d2565b6106335f8051602061223283398151915282611339565b610ddc3361106f565b610df85760405162461bcd60e51b815260040161068d90611fc2565b5f610e016116b0565b60405163f44c7c8f60e01b81526001600160a01b0384811660048301529192505f9183169063f44c7c8f90602401602060405180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611ffc565b90506001600160a01b038116610ee15760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e9905f90a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610d59565b5f196001600160a01b03821601610fa057604051632ab899fb60e11b81526001600160a01b0384811660048301525f919084169063557133f6906024015f60405180830381865afa158015610f38573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f5f919081019061202b565b5115610c30576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610c5f565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f53455256494345000000604482015260640161068d565b5f610a5e5f80516020612295833981519152836116d2565b80336001600160a01b038216036110295760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121f283398151915283611355565b5f610a5e5f805160206122b5833981519152836116d2565b6106335f805160206121d283398151915282611339565b5f610a5e5f80516020612316833981519152836116d2565b5f6110906116b0565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa1580156110da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ffc565b6001600160a01b03160361114b5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b604482015260640161068d565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee4905f90a3806001600160a01b031663a3ecff8f8361119861168e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044015f604051808303815f87803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b505050506111fb61168e565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024015f604051808303818588803b158015610d70575f80fd5b5f610a5e5f805160206121d2833981519152836116d2565b6106335f8051602061221283398151915282611339565b5f610a5e5f805160206121f2833981519152836116d2565b6106335f8051602061229583398151915282611355565b6106335f8051602061221283398151915282611355565b6106335f8051602061223283398151915282611355565b80336001600160a01b038216036112f45760405162461bcd60e51b815260040161068d90611f2d565b6106ad5f805160206121d283398151915283611355565b6106335f8051602061231683398151915282611355565b6106335f805160206122f683398151915282611355565b61134282611708565b61134b81611728565b610d878383611732565b61135e82611708565b61136781611728565b610d8783836117a6565b6001600160a01b03811633146113e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161068d565b6106ad82826117a6565b6001600160a01b0383163b6114375760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b604482015260640161068d565b5f80846001600160a01b031663439fab9160e01b858560405160240161145e9291906120eb565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161149c9190612119565b5f60405180830381855af49150503d805f81146114d4576040519150601f19603f3d011682016040523d82523d5f602084013e6114d9565b606091505b50915091508181906114fe5760405162461bcd60e51b815260040161068d9190611efb565b5080518190156115215760405162461bcd60e51b815260040161068d9190611efb565b505050505050565b5f806115336116b0565b6001600160a01b03161415905090565b604081146115875760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b604482015260640161068d565b5f8061159583850185611ead565b915091506115ac826001600160a01b03163b151590565b6116025760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b606482015260840161068d565b6001600160a01b0381163b6116595760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f4144445245535300604482015260640161068d565b50505050565b5f8061166d83850185611ead565b9150915061167a82611818565b6116598161183a565b33610633818061185c565b5f610a6d6040518060600160405280602181526020016122d56021913961195e565b5f610a6d6040518060600160405280602381526020016122726023913961195e565b5f9182525f80516020612252833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f9081525f80516020612252833981519152602052604090206001015490565b6106338133611991565b61173c82826116d2565b6106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6117b082826116d2565b156106ad575f8281525f80516020612252833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61063360405180606001604052806023815260200161227260239139826119f5565b6106336040518060600160405280602181526020016122d560219139826119f5565b611864611a4d565b156118d1576118805f805160206121d2833981519152836116d2565b6118cc5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a454400000000000000604482015260640161068d565b6118da565b6118da82611a6c565b6118e2611b4e565b15611955576118fe5f805160206121f2833981519152826116d2565b6106ad5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840161068d565b6106ad81611b66565b5f80826040516020016119719190612119565b60408051601f198184030181529190528051602090910120549392505050565b61199b82826116d2565b6106ad576119b3816001600160a01b03166014611bb8565b6119be836020611bb8565b6040516020016119cf929190612134565b60408051601f198184030181529082905262461bcd60e51b825261068d91600401611efb565b5f6119ff8361195e565b6001600160a01b031614611a435760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b604482015260640161068d565b6106ad8282611d55565b5f80611a655f805160206121d2833981519152611708565b1415905090565b611a835f805160206121d283398151915282611732565b611aa75f805160206122128339815191525f805160206122b5833981519152611d87565b611acb5f805160206122b58339815191525f805160206121d2833981519152611d87565b611ae25f805160206121d283398151915280611d87565b611b065f805160206122f68339815191525f805160206122b5833981519152611d87565b611b2a5f805160206123168339815191525f805160206122b5833981519152611d87565b6106335f805160206122328339815191525f805160206121d2833981519152611d87565b5f80611a655f805160206121f2833981519152611708565b611b7d5f805160206121f283398151915280611d87565b611ba15f805160206122958339815191525f805160206121f2833981519152611d87565b6106335f805160206121f283398151915282611732565b60605f611bc6836002611f71565b611bd1906002611f88565b67ffffffffffffffff811115611be957611be9612017565b6040519080825280601f01601f191660200182016040528015611c13576020820181803683370190505b509050600360fc1b815f81518110611c2d57611c2d6121a8565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c5b57611c5b6121a8565b60200101906001600160f81b03191690815f1a9053505f611c7d846002611f71565b611c88906001611f88565b90505b6001811115611cff576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611cbc57611cbc6121a8565b1a60f81b828281518110611cd257611cd26121a8565b60200101906001600160f81b03191690815f1a90535060049490941c93611cf8816121bc565b9050611c8b565b508315611d4e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161068d565b9392505050565b5f82604051602001611d679190612119565b604051602081830303815290604052805190602001209050818155505050565b5f611d9183611708565b5f8481525f805160206122528339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b0381168114610633575f80fd5b5f60208284031215611e08575f80fd5b8135611d4e81611de4565b5f8060408385031215611e24575f80fd5b823591506020830135611e3681611de4565b809150509250929050565b5f8060208385031215611e52575f80fd5b823567ffffffffffffffff80821115611e69575f80fd5b818501915085601f830112611e7c575f80fd5b813581811115611e8a575f80fd5b866020828501011115611e9b575f80fd5b60209290920196919550909350505050565b5f8060408385031215611ebe575f80fd5b8235611ec981611de4565b91506020830135611e3681611de4565b5f5b83811015611ef3578181015183820152602001611edb565b50505f910152565b602081525f8251806020840152611f19816040850160208701611ed9565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a5e57610a5e611f5d565b80820180821115610a5e57610a5e611f5d565b5f8085851115611fa9575f80fd5b83861115611fb5575f80fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b8051611ff781611de4565b919050565b5f6020828403121561200c575f80fd5b8151611d4e81611de4565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561203c575f80fd5b825167ffffffffffffffff80821115612053575f80fd5b818501915085601f830112612066575f80fd5b81518181111561207857612078612017565b8060051b604051601f19603f8301168101818110858211171561209d5761209d612017565b6040529182528482019250838101850191888311156120ba575f80fd5b938501935b828510156120df576120d085611fec565b845293850193928501926120bf565b98975050505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f825161212a818460208701611ed9565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161216b816017850160208801611ed9565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161219c816028840160208801611ed9565b01602801949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f816121ca576121ca611f5d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cb1577839fa45486ce36a627b49fba427a2568bbb02379033a13dddb31a849b664736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/artifacts/StarkgateRegistry.json b/crates/sandbox/artifacts/StarkgateRegistry.json deleted file mode 100644 index deb6160..0000000 --- a/crates/sandbox/artifacts/StarkgateRegistry.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"TokenEnlisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"TokenSelfRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenStatusBlocked","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"blockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"enlistToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getWithdrawalBridges","outputs":[{"internalType":"address[]","name":"bridges","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"selfRemove","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f80516020620023ac8339815191525f9081525f80516020620023ec8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f80516020620023ac83398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200240c83398151915262000486565b620002685f805160206200240c8339815191525f80516020620023ac83398151915262000486565b620002825f80516020620023ac8339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200240c83398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200240c83398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620023ac83398151915262000486565b5f80516020620023cc8339815191525f9081525f80516020620023ec8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f80516020620023cc8339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f80516020620023cc83398151915262000486565b6200003a5f80516020620023cc833981519152825b5f8281525f80516020620023ec833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f80516020620023ec833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620023ec8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611ead620004ff5f395f61054401525f6105d60152611ead5ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c8063757bd9ab11610114578063d08fb6cb116100a9578063ee0e680711610079578063ee0e68071461041d578063eeb7286614610430578063f44c7c8f14610445578063fa0f73ba14610470578063fad8b32a14610483575f80fd5b8063d08fb6cb146103d1578063d9fa7091146103e4578063deec9c5a146103f7578063ed9ef16a1461040a575f80fd5b8063a2bdde3d116100e4578063a2bdde3d14610385578063a3ecff8f14610398578063cb1cccce146103ab578063cdd1f70d146103be575f80fd5b8063757bd9ab146103395780638101b64c1461034c5780638e5224ff1461035f5780639463629a14610372575f80fd5b8063557133f61161018a5780636c04d9d51161015a5780636c04d9d5146102ed5780636d70f7ae146103005780636fc97cbf14610313578063726176e814610326575f80fd5b8063557133f6146102945780635a5d1bb9146102b457806362a14376146102c757806365650288146102da575f80fd5b806333eeb147116101c557806333eeb1471461024457806336568abe1461025b5780633682a4501461026e578063439fab9114610281575f80fd5b80630b3a2d21146101f65780630e770f231461020b578063178963831461021e5780632f95198514610231575b5f80fd5b61020961020436600461196a565b610496565b005b61020961021936600461196a565b6104b0565b61020961022c36600461196a565b6104c7565b61020961023f36600461196a565b6104de565b5f5b60405190151581526020015b60405180910390f35b610209610269366004611985565b61052b565b61020961027c36600461196a565b6105bc565b61020961028f3660046119b3565b6105d3565b6102a76102a236600461196a565b61077f565b6040516102529190611a1f565b6102466102c236600461196a565b6107fb565b6102096102d536600461196a565b610819565b6102096102e836600461196a565b610830565b6102466102fb36600461196a565b6109cd565b61024661030e36600461196a565b6109e5565b61020961032136600461196a565b6109fd565b61020961033436600461196a565b610a14565b61024661034736600461196a565b610a9f565b61020961035a36600461196a565b610ab7565b61024661036d36600461196a565b610af7565b61020961038036600461196a565b610b0f565b61024661039336600461196a565b610b26565b6102096103a6366004611a6b565b610b3e565b6102466103b936600461196a565b610d53565b6102096103cc36600461196a565b610d6b565b6102466103df36600461196a565b610d82565b6102096103f236600461196a565b610d9a565b61020961040536600461196a565b610db1565b61020961041836600461196a565b610dc8565b61020961042b36600461196a565b610ddf565b610438610e1f565b6040516102529190611ab9565b61045861045336600461196a565b610e3f565b6040516001600160a01b039091168152602001610252565b61020961047e36600461196a565b610e6a565b61020961049136600461196a565b610e81565b6104ad5f80516020611e5883398151915282610e98565b50565b6104ad5f80516020611d8983398151915282610e98565b6104ad5f80516020611da983398151915282610e98565b80336001600160a01b038216036105105760405162461bcd60e51b815260040161050790611aeb565b60405180910390fd5b6105275f80516020611da983398151915283610eb4565b5050565b5f80516020611cb28339815191528214801561056557507f0000000000000000000000000000000000000000000000000000000000000000155b156105b25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610507565b6105278282610ed0565b6104ad5f80516020611e3883398151915282610e98565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106445760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610507565b5f610650816020611b2f565b90505f61065e826020611b46565b9050808310156106a65760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610507565b5f6106b382848688611b59565b8101906106c0919061196a565b9050365f6106d08582888a611b59565b91509150365f6106e28887818c611b59565b90925090506001600160a01b0385161561070c57610701858383610f4a565b505050505050505050565b610714611088565b1561076357801561075e5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610507565b610701565b61076d82826110a2565b610777828261114c565b61070161117d565b6060610789611188565b6001600160a01b0383165f9081526020918252604090819020805482518185028101850190935280835291929091908301828280156107ef57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116107d1575b50505050509050919050565b5f6108135f80516020611d29833981519152836111af565b92915050565b6104ad5f80516020611cd283398151915282610e98565b336108396111e5565b6001600160a01b038084165f90815260209290925260409091205416146108ae5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610507565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa1580156108f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109149190611b80565b156109615760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610507565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a308905f90a35f61099f6111e5565b6001600160a01b039283165f9081526020919091526040902080546001600160a01b03191691909216179055565b5f6108135f80516020611d49833981519152836111af565b5f6108135f80516020611e38833981519152836111af565b6104ad5f80516020611d4983398151915282610e98565b33610a1d611207565b6001600160a01b031614610a625760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a2905f90a2600161099f6111e5565b5f6108135f80516020611d89833981519152836111af565b80336001600160a01b03821603610ae05760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cd283398151915283610eb4565b5f6108135f80516020611da9833981519152836111af565b6104ad5f80516020611cb283398151915282610e98565b5f6108135f80516020611e58833981519152836111af565b33610b47611207565b6001600160a01b031614610b8c5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610507565b5f610b956111e5565b6001600160a01b038085165f908152602092909252604090912054169050801580610bc957506001600160a01b0381166001145b610c0e5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610507565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c576111e5565b6001600160a01b038581165f908152602092909252604090912080546001600160a01b03191692909116919091179055610d03610c92611188565b6001600160a01b0385165f908152602091825260409081902080548251818502810185019093528083529192909190830182828015610cf857602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610cda575b505050505083611229565b610d4e57610d0f611188565b6001600160a01b038481165f908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b5f6108135f80516020611cb2833981519152836111af565b6104ad5f80516020611d2983398151915282610e98565b5f6108135f80516020611cd2833981519152836111af565b6104ad5f80516020611d8983398151915282610eb4565b6104ad5f80516020611d2983398151915282610eb4565b6104ad5f80516020611d4983398151915282610eb4565b80336001600160a01b03821603610e085760405162461bcd60e51b815260040161050790611aeb565b6105275f80516020611cb283398151915283610eb4565b6060604051806060016040528060218152602001611dc960219139905090565b5f610e486111e5565b6001600160a01b039283165f9081526020919091526040902054909116919050565b6104ad5f80516020611e5883398151915282610eb4565b6104ad5f80516020611e3883398151915282610eb4565b610ea18261128c565b610eaa816112ac565b610d4e83836112b6565b610ebd8261128c565b610ec6816112ac565b610d4e838361132a565b6001600160a01b0381163314610f405760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610507565b610527828261132a565b6001600160a01b0383163b610f965760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610507565b5f80846001600160a01b031663439fab9160e01b8585604051602401610fbd929190611b9f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ffb9190611bcd565b5f60405180830381855af49150503d805f8114611033576040519150601f19603f3d011682016040523d82523d5f602084013e611038565b606091505b509150915081819061105d5760405162461bcd60e51b81526004016105079190611ab9565b5080518190156110805760405162461bcd60e51b81526004016105079190611ab9565b505050505050565b5f80611092611207565b6001600160a01b03161415905090565b602081146110e65760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610507565b5f6110f38284018461196a565b90506001600160a01b0381163b610d4e5760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610507565b5f6111598284018461196a565b9050610d4e604051806060016040528060238152602001611e15602391398261139c565b336104ad81806113f4565b5f6111aa604051806060016040528060378152602001611cf2603791396114f6565b905090565b5f9182525f80516020611d69833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6111aa6040518060600160405280602b8152602001611dea602b91396114f6565b5f6111aa604051806060016040528060238152602001611e1560239139611528565b5f805b835181101561128357826001600160a01b031684828151811061125157611251611be8565b60200260200101516001600160a01b031603611271576001915050610813565b8061127b81611bfc565b91505061122c565b505f9392505050565b5f9081525f80516020611d69833981519152602052604090206001015490565b6104ad813361155b565b6112c082826111af565b610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61133482826111af565b15610527575f8281525f80516020611d69833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6113a683611528565b6001600160a01b0316146113ea5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610507565b61052782826115bf565b6113fc6115f1565b15611469576114185f80516020611cb2833981519152836111af565b6114645760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610507565b611472565b61147282611610565b61147a6116f2565b156114ed576114965f80516020611cd2833981519152826111af565b6105275760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610507565b6105278161170a565b5f80826040516020016115099190611bcd565b60408051601f1981840301815291905280516020909101209392505050565b5f808260405160200161153b9190611bcd565b60408051601f198184030181529190528051602090910120549392505050565b61156582826111af565b6105275761157d816001600160a01b0316601461175c565b61158883602061175c565b604051602001611599929190611c14565b60408051601f198184030181529082905262461bcd60e51b825261050791600401611ab9565b5f826040516020016115d19190611bcd565b604051602081830303815290604052805190602001209050818155505050565b5f806116095f80516020611cb283398151915261128c565b1415905090565b6116275f80516020611cb2833981519152826112b6565b61164b5f80516020611d298339815191525f80516020611da98339815191526118f9565b61166f5f80516020611da98339815191525f80516020611cb28339815191526118f9565b6116865f80516020611cb2833981519152806118f9565b6116aa5f80516020611e388339815191525f80516020611da98339815191526118f9565b6116ce5f80516020611e588339815191525f80516020611da98339815191526118f9565b6104ad5f80516020611d498339815191525f80516020611cb28339815191526118f9565b5f806116095f80516020611cd283398151915261128c565b6117215f80516020611cd2833981519152806118f9565b6117455f80516020611d898339815191525f80516020611cd28339815191526118f9565b6104ad5f80516020611cd2833981519152826112b6565b60605f61176a836002611b2f565b611775906002611b46565b67ffffffffffffffff81111561178d5761178d611c88565b6040519080825280601f01601f1916602001820160405280156117b7576020820181803683370190505b509050600360fc1b815f815181106117d1576117d1611be8565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106117ff576117ff611be8565b60200101906001600160f81b03191690815f1a9053505f611821846002611b2f565b61182c906001611b46565b90505b60018111156118a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061186057611860611be8565b1a60f81b82828151811061187657611876611be8565b60200101906001600160f81b03191690815f1a90535060049490941c9361189c81611c9c565b905061182f565b5083156118f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610507565b9392505050565b5f6119038361128c565b5f8481525f80516020611d698339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104ad575f80fd5b5f6020828403121561197a575f80fd5b81356118f281611956565b5f8060408385031215611996575f80fd5b8235915060208301356119a881611956565b809150509250929050565b5f80602083850312156119c4575f80fd5b823567ffffffffffffffff808211156119db575f80fd5b818501915085601f8301126119ee575f80fd5b8135818111156119fc575f80fd5b866020828501011115611a0d575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015611a5f5783516001600160a01b031683529284019291840191600101611a3a565b50909695505050505050565b5f8060408385031215611a7c575f80fd5b8235611a8781611956565b915060208301356119a881611956565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761081357610813611b1b565b8082018082111561081357610813611b1b565b5f8085851115611b67575f80fd5b83861115611b73575f80fd5b5050820193919092039150565b5f60208284031215611b90575f80fd5b815180151581146118f2575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251611bde818460208701611a97565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611c0d57611c0d611b1b565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611c4b816017850160208801611a97565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611c7c816028840160208801611a97565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f81611caa57611caa611b1b565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea264697066735822122078308b6899eb15cdd38980d8d26f43b44c8b2d344086420211de1281200f105c64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/artifacts/StarknetTokenBridge.json b/crates/sandbox/artifacts/StarknetTokenBridge.json deleted file mode 100644 index 42a2bfa..0000000 --- a/crates/sandbox/artifacts/StarknetTokenBridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositCancelRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"DepositWithMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositWithMessageCancelRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"message","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DepositWithMessageReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetL2TokenBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxTotalBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"TokenDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"deploymentMsgHash","type":"bytes32"}],"name":"TokenEnrollmentInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"WithdrawalLimitDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"WithdrawalLimitEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"checkDeploymentStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"deactivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositCancelRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositReclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"}],"name":"depositWithMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositWithMessageCancelRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"depositWithMessageReclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"disableWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enableWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"enrollToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"estimateDepositFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"estimateEnrollmentFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getMaxTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getRemainingIntradayAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getStatus","outputs":[{"internalType":"enum StarknetTokenStorage.TokenStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isServicingToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"registerUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAppRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeGovernanceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeSecurityAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeTokenAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeUpgradeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l2TokenBridge_","type":"uint256"}],"name":"setL2TokenBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"maxTotalBalance_","type":"uint256"}],"name":"setMaxTotalBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5030608052600160a0819052620000266200002d565b50620004dd565b336200003a81806200003d565b50565b620000476200019c565b15620000df576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000d95760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ea565b620000ea82620001ed565b620000f462000330565b1562000191576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff166200018d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d0565b5050565b6200018d816200037f565b5f8051602062004cf38339815191525f9081525f8051602062004d338339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b620002075f8051602062004cf383398151915282620003e8565b620002407ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062004d5383398151915262000486565b620002685f8051602062004d538339815191525f8051602062004cf383398151915262000486565b620002825f8051602062004cf38339815191528062000486565b620002bc7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062004d5383398151915262000486565b620002f67f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062004d5383398151915262000486565b6200003a7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f8051602062004cf383398151915262000486565b5f8051602062004d138339815191525f9081525f8051602062004d338339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001e6565b620003995f8051602062004d138339815191528062000486565b620003d37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062004d1383398151915262000486565b6200003a5f8051602062004d13833981519152825b5f8281525f8051602062004d33833981519152602090815260408083206001600160a01b038516845290915290205460ff166200018d575f8281525f8051602062004d33833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f8051602062004d338339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516147f4620004ff5f395f610c2a01525f610de501526147f45ff3fe6080604052600436106102bf575f3560e01c8063757bd9ab1161016f578063cdd1f70d116100d8578063deec9c5a11610092578063eeb728661161006d578063eeb7286614610858578063f3fef3a314610879578063fa0f73ba14610898578063fad8b32a146108b7575f80fd5b8063deec9c5a146107fb578063ed9ef16a1461081a578063ee0e680714610839575f80fd5b8063cdd1f70d14610741578063cf50fd1c14610760578063d08fb6cb1461077f578063d12fc1821461079e578063d2b51eea146107bd578063d9fa7091146107dc575f80fd5b8063a6d1d6c611610129578063a6d1d6c6146106aa578063ad8b92b4146106c9578063af8bc15e146106dc578063b5cd0c3c146106f0578063be58b18e1461070f578063cb1cccce14610722575f80fd5b8063757bd9ab146105f05780637fc2ab3e1461060f5780638101b64c1461062e5780638e5224ff1461064d5780639463629a1461066c578063a2bdde3d1461068b575f80fd5b80633ea053eb1161022b5780635a72af89116101e557806369328dec116101c057806369328dec146105745780636c04d9d5146105935780636d70f7ae146105b25780636fc97cbf146105d1575f80fd5b80635a72af89146105235780636083e59a1461054257806362a1437614610555575f80fd5b80633ea053eb14610466578063439fab9114610485578063496ae54c146104a45780634baf43da146104d15780634d8b92a5146104f05780635a5d1bb914610504575f80fd5b806323205c521161027c57806323205c52146103885780632f951985146103a757806330ccebb5146103c657806333eeb1471461041657806336568abe146104285780633682a45014610447575f80fd5b80630b3a2d21146102c35780630c6f8664146102e45780630e770f23146103185780630efe6a8b1461033757806314af98b31461034a5780631789638314610369575b5f80fd5b3480156102ce575f80fd5b506102e26102dd366004613cb5565b6108d6565b005b3480156102ef575f80fd5b506103036102fe366004613cb5565b6108f0565b60405190151581526020015b60405180910390f35b348015610323575f80fd5b506102e2610332366004613cb5565b61094f565b6102e2610345366004613cd0565b610966565b348015610355575f80fd5b506102e2610364366004613cb5565b610a1e565b348015610374575f80fd5b506102e2610383366004613cb5565b610ac4565b348015610393575f80fd5b506102e26103a2366004613d02565b610adb565b3480156103b2575f80fd5b506102e26103c1366004613cb5565b610bcd565b3480156103d1575f80fd5b506104096103e0366004613cb5565b6001600160a01b03165f9081525f8051602061475f833981519152602052604090205460ff1690565b60405161030f9190613d4e565b348015610421575f80fd5b505f610303565b348015610433575f80fd5b506102e2610442366004613d74565b610c11565b348015610452575f80fd5b506102e2610461366004613cb5565b610ca2565b348015610471575f80fd5b506102e2610480366004613cb5565b610cb9565b348015610490575f80fd5b506102e261049f366004613da2565b610de2565b3480156104af575f80fd5b506104c36104be366004613cb5565b610f8e565b60405190815260200161030f565b3480156104dc575f80fd5b506104c36104eb366004613cb5565b610fd2565b3480156104fb575f80fd5b506104c361100e565b34801561050f575f80fd5b5061030361051e366004613cb5565b61101c565b34801561052e575f80fd5b506102e261053d366004613cb5565b611034565b34801561054d575f80fd5b505f196104c3565b348015610560575f80fd5b506102e261056f366004613cb5565b6110d7565b34801561057f575f80fd5b506102e261058e366004613e0e565b6110ee565b34801561059e575f80fd5b506103036105ad366004613cb5565b6111d9565b3480156105bd575f80fd5b506103036105cc366004613cb5565b6111f1565b3480156105dc575f80fd5b506102e26105eb366004613cb5565b611209565b3480156105fb575f80fd5b5061030361060a366004613cb5565b611220565b34801561061a575f80fd5b506102e2610629366004613e4d565b611238565b348015610639575f80fd5b506102e2610648366004613cb5565b61135d565b348015610658575f80fd5b50610303610667366004613cb5565b61139d565b348015610677575f80fd5b506102e2610686366004613cb5565b6113b5565b348015610696575f80fd5b506103036106a5366004613cb5565b6113cc565b3480156106b5575f80fd5b506102e26106c4366004613d02565b6113e4565b6102e26106d7366004613cb5565b6114c1565b3480156106e7575f80fd5b506104c3611704565b3480156106fb575f80fd5b506102e261070a366004613eac565b61170d565b6102e261071d366004613f19565b61183f565b34801561072d575f80fd5b5061030361073c366004613cb5565b61194c565b34801561074c575f80fd5b506102e261075b366004613cb5565b611964565b34801561076b575f80fd5b506102e261077a366004613eac565b61197b565b34801561078a575f80fd5b50610303610799366004613cb5565b611a92565b3480156107a9575f80fd5b506102e26107b8366004613cb5565b611aaa565b3480156107c8575f80fd5b506102e26107d7366004613f7e565b611cbf565b3480156107e7575f80fd5b506102e26107f6366004613cb5565b611dc5565b348015610806575f80fd5b506102e2610815366004613cb5565b611ddc565b348015610825575f80fd5b506102e2610834366004613cb5565b611df3565b348015610844575f80fd5b506102e2610853366004613cb5565b611e0a565b348015610863575f80fd5b5061086c611e4a565b60405161030f9190613fca565b348015610884575f80fd5b506102e2610893366004613f7e565b611e6a565b3480156108a3575f80fd5b506102e26108b2366004613cb5565b611e75565b3480156108c2575f80fd5b506102e26108d1366004613cb5565b611e8c565b6108ed5f8051602061479f83398151915282611ea3565b50565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600181600381111561092b5761092b613d3a565b14806109485750600281600381111561094657610946613d3a565b145b9392505050565b6108ed5f805160206146ae83398151915282611ea3565b82610970816108f0565b6109b65760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b604080515f80825260208201909252906109d08686611ec4565b90505f6109ee878787865f8051602061473f83398151915287611fa4565b9050610a0c878787865f8051602061473f8339815191528688612102565b610a1587611aaa565b50505050505050565b610a2733611220565b610a695760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b6108ed5f805160206146ce83398151915282611ea3565b610ae3612215565b6001600160a01b0316636170ff1b610af9612237565b5f8051602061473f833981519152610b12888888612259565b856040518563ffffffff1660e01b8152600401610b329493929190614049565b6020604051808303815f875af1158015610b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190614078565b50610b7e848433612282565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610bf65760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f805160206146ce8339815191528361228d565b5050565b5f8051602061457d83398151915282148015610c4b57507f0000000000000000000000000000000000000000000000000000000000000000155b15610c985760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ad565b610c0d82826122a9565b6108ed5f8051602061477f83398151915282611ea3565b33610cc2612323565b6001600160a01b031614610d075760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff166003811115610d3f57610d3f613d3a565b03610d7c5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610e535760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ad565b5f610e5f8160206140d3565b90505f610e6d8260206140ea565b905080831015610eb55760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ad565b5f610ec2828486886140fd565b810190610ecf9190613cb5565b9050365f610edf8582888a6140fd565b91509150365f610ef18887818c6140fd565b90925090506001600160a01b03851615610f1b57610f10858383612345565b505050505050505050565b610f23612483565b15610f72578015610f6d5760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ad565b610f10565b610f7c828261249d565b610f8682826125b4565b610f106125e2565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206004015460ff16610fc3575f19610fcc565b610fcc826125ed565b92915050565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081206003015480156110055780610948565b5f199392505050565b5f61101761260d565b905090565b5f610fcc5f805160206146078339815191528361261b565b61103d33611a92565b61107f5760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ad565b6001600160a01b0381165f8181525f8051602061475f8339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b6108ed5f8051602061459d83398151915282611ea3565b6001600160a01b0381166111385760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b611143838383612651565b6001600160a01b0383165f9081525f8051602061475f833981519152602052604090206004015460ff161561117c5761117c83836127e9565b611187838383612282565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516111cc91815260200190565b60405180910390a3505050565b5f610fcc5f805160206146278339815191528361261b565b5f610fcc5f8051602061477f8339815191528361261b565b6108ed5f8051602061462783398151915282611ea3565b5f610fcc5f805160206146ae8339815191528361261b565b6112413361101c565b6112815760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b611289612483565b6112d55760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ad565b6112de81612858565b6113245760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b61132d8161287a565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610dd7565b80336001600160a01b038216036113865760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061459d8339815191528361228d565b5f610fcc5f805160206146ce8339815191528361261b565b6108ed5f8051602061457d83398151915282611ea3565b5f610fcc5f8051602061479f8339815191528361261b565b6113ec612215565b6001600160a01b0316637a98660b611402612237565b5f8051602061473f83398151915261141b888888612259565b856040518563ffffffff1660e01b815260040161143b9493929190614049565b6020604051808303815f875af1158015611457573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147b9190614078565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610bbf565b336114ca612323565b6001600160a01b03161461150f5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ad565b6001600160a01b0381165f9081525f8051602061475f833981519152602052604081205460ff16600381111561154757611547613d3a565b1461158d5760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ad565b5f6115978261289c565b90505f6115a2612215565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b81526004016115cf91815260200190565b602060405180830381865afa1580156115ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190614078565b1161165b5760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ad565b6001600160a01b0382165f9081525f8051602061475f83398151915260205260409020805460ff1916600190811782550181905561169c62069780426140ea565b5f8051602061475f8339815191526001600160a01b0384165f81815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b5f61101761297c565b611715612215565b6001600160a01b0316636170ff1b61172b612237565b5f8051602061468e8339815191526117798a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b81526004016117999493929190614049565b6020604051808303815f875af11580156117b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d99190614078565b506117e5868633612282565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f738887878760405161182f9493929190614124565b60405180910390a4505050505050565b84611849816108f0565b61188a5760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ad565b5f6118958787611ec4565b90505f6118e78888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250899150611fa49050565b90506119398888888888808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505f8051602061468e8339815191529250889150899050612102565b61194288611aaa565b5050505050505050565b5f610fcc5f8051602061457d8339815191528361261b565b6108ed5f8051602061460783398151915282611ea3565b611983612215565b6001600160a01b0316637a98660b611999612237565b5f8051602061468e8339815191526119e78a8a8a60018b8b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061298992505050565b856040518563ffffffff1660e01b8152600401611a079493929190614049565b6020604051808303815f875af1158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614078565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd50576038608887878760405161182f9493929190614124565b5f610fcc5f8051602061459d8339815191528361261b565b6001600160a01b0381165f9081525f8051602061475f8339815191526020526040902054819060019060ff166003811115611ae757611ae7613d3a565b14611af0575050565b6001600160a01b0382165f9081525f8051602061475f833981519152602052604090206001810154611b20612215565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611b4d91815260200190565b602060405180830381865afa158015611b68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8c9190614078565b5f03611ba257815460ff19166002178255611cb9565b8160020154421115611cb9576001600160a01b0384165f9081525f8051602061475f83398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611c04612323565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c639190614168565b604051630caca05160e31b81526001600160a01b038781166004830152919250908216906365650288906024015f604051808303815f87803b158015611ca7575f80fd5b505af1158015610f10573d5f803e3d5ffd5b50505050565b611cc83361101c565b611d085760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ad565b805f03611d575760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ad565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611d9291815260200190565b60405180910390a26001600160a01b03919091165f9081525f8051602061475f8339815191526020526040902060030155565b6108ed5f805160206146ae8339815191528261228d565b6108ed5f805160206146078339815191528261228d565b6108ed5f805160206146278339815191528261228d565b80336001600160a01b03821603611e335760405162461bcd60e51b81526004016109ad9061408f565b610c0d5f8051602061457d8339815191528361228d565b60606040518060600160405280602381526020016145bd60239139905090565b610c0d8282336110ee565b6108ed5f8051602061479f8339815191528261228d565b6108ed5f8051602061477f8339815191528261228d565b611eac82612bd4565b611eb581612bf4565b611ebf8383612bfe565b505050565b5f611ece34612c72565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f369190614078565b9050611f4184610fd2565b611f4b84836140ea565b1115611f905760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ad565b611f9b843385612c83565b50349392505050565b5f611fad612237565b5f03611fcb5760405162461bcd60e51b81526004016109ad90614183565b5f86116120095760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ad565b61201285612858565b6120585760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ad565b5f8051602061468e83398151915283145f612071612215565b6001600160a01b0316633e3aa6c585612088612237565b886120968e8e8e8a8f612989565b6040518563ffffffff1660e01b81526004016120b4939291906141ae565b604080518083038185885af11580156120cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120f491906141cc565b9a9950505050505050505050565b5f8051602061473f833981519152830361216b57604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a15565b5f8051602061468e83398151915283146121ba5760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ad565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f18988878760405161220494939291906141ee565b60405180910390a450505050505050565b5f61101760405180606001604052806028815260200161455560289139612e71565b5f61101760405180606001604052806027815260200161466760279139612e71565b604080515f80825260208201909252606091506122798585855f85612989565b95945050505050565b611ebf838284612ea4565b61229682612bd4565b61229f81612bf4565b611ebf8383612fdb565b6001600160a01b03811633146123195760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ad565b610c0d8282612fdb565b5f6110176040518060600160405280602681526020016146ee60269139612e71565b6001600160a01b0383163b6123915760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ad565b5f80846001600160a01b031663439fab9160e01b85856040516024016123b8929190614219565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123f69190614247565b5f60405180830381855af49150503d805f811461242e576040519150601f19603f3d011682016040523d82523d5f602084013e612433565b606091505b50915091508181906124585760405162461bcd60e51b81526004016109ad9190613fca565b50805181901561247b5760405162461bcd60e51b81526004016109ad9190613fca565b505050505050565b5f8061248d612215565b6001600160a01b03161415905090565b604081146124e15760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ad565b5f806124ef83850185614262565b91509150612506816001600160a01b03163b151590565b61255d5760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ad565b6001600160a01b0382163b611cb95760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ad565b5f806125c283850185614262565b915091506125cf8161304d565b6125d88261306f565b611cb96005613091565b336108ed81806130b3565b5f6125f7826131b5565b61260457610fcc826131e0565b610fcc8261328f565b5f61101748620186a06140d3565b5f9182525f80516020614647833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612659612237565b5f036126775760405162461bcd60e51b81526004016109ad90614183565b60408051600580825260c082019092525f916020820160a0803683370190505090505f815f815181106126ac576126ac61428e565b602002602001018181525050816001600160a01b0316816001815181106126d5576126d561428e565b602002602001018181525050836001600160a01b0316816002815181106126fe576126fe61428e565b6020908102919091010152600161271760806002614382565b612721919061438d565b8316816003815181106127365761273661428e565b602002602001018181525050608083901c8160048151811061275a5761275a61428e565b60200260200101818152505061276e612215565b6001600160a01b0316632c9dd5c0612784612237565b836040518363ffffffff1660e01b81526004016127a29291906143a0565b6020604051808303815f875af11580156127be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614078565b5050505050565b5f6127f3836125ed565b9050818110156128455760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ad565b611ebf83612853848461438d565b6132bc565b5f8115801590610fcc5750610fcc82600167080000000000001160c01b011190565b6108ed60405180606001604052806027815260200161466760279139826132ed565b5f6128a5612237565b5f036128c35760405162461bcd60e51b81526004016109ad90614183565b6128cc3461333b565b5f6128d5612215565b6001600160a01b0316633e3aa6c5346128ec612237565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc61291688613347565b6040518563ffffffff1660e01b8152600401612934939291906141ae565b604080518083038185885af115801561294f573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061297491906141cc565b509392505050565b5f61101748614e206140d3565b60605f836129985760056129a4565b6129a4600160056140ea565b90505f8351826129b491906140ea565b67ffffffffffffffff8111156129cc576129cc613ffc565b6040519080825280602002602001820160405280156129f5578160200160208202803683370190505b509050876001600160a01b0316815f81518110612a1457612a1461428e565b602002602001018181525050336001600160a01b031681600181518110612a3d57612a3d61428e565b6020026020010181815250508581600281518110612a5d57612a5d61428e565b60209081029190910101526001612a7660806002614382565b612a80919061438d565b871681600381518110612a9557612a9561428e565b602002602001018181525050608087901c81600481518110612ab957612ab961428e565b6020026020010181815250508415612bc957835181612ad960018561438d565b81518110612ae957612ae961428e565b6020026020010181815250505f5b8451811015612bc757612b30858281518110612b1557612b1561428e565b6020026020010151600167080000000000001160c01b011190565b612b735760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ad565b848181518110612b8557612b8561428e565b6020026020010151828483612b9a91906140ea565b81518110612baa57612baa61428e565b602090810291909101015280612bbf816143b8565b915050612af7565b505b979650505050505050565b5f9081525f80516020614647833981519152602052604090206001015490565b6108ed8133613504565b612c08828261261b565b610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6108ed81612c7e61297c565b613568565b805f03612c8f57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf99190614078565b90505f612d0684836140ea565b905081811015612d435760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ad565b6040516001600160a01b0386166024820152306044820152606481018590525f906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612db86001600160a01b0388168261363d565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614078565b90508281146119425760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ad565b5f8082604051602001612e849190614247565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b038216612eee5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ad565b805f03612efa57505050565b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614078565b90505f612f71848361438d565b905081811115612faf5760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ad565b6040516001600160a01b0386166024820152604481018590525f9063a9059cbb60e01b90606401612d71565b612fe5828261261b565b15610c0d575f8281525f80516020614647833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108ed604051806060016040528060288152602001614555602891398261375d565b6108ed6040518060600160405280602681526020016146ee602691398261375d565b6108ed6040518060600160405280602b8152602001614714602b9139826137ab565b6130bb6137dd565b15613128576130d75f8051602061457d8339815191528361261b565b6131235760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ad565b613131565b613131826137fc565b6131396138de565b156131ac576131555f8051602061459d8339815191528261261b565b610c0d5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ad565b610c0d816138f6565b5f6131be613948565b5f6131c88461396a565b81526020019081526020015f20545f14159050919050565b5f8062455447196001600160a01b038416016131fd575047613266565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561323f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132639190614078565b90505b5f61326f6139b6565b9050606461327d82846140d3565b61328791906143d0565b949350505050565b5f600161329a613948565b5f6132a48561396a565b81526020019081526020015f2054610fcc919061438d565b6132c76001826140ea565b6132cf613948565b5f6132d98561396a565b815260208101919091526040015f20555050565b6132f682612e71565b156133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b610c0d82826137ab565b6108ed81612c7e61260d565b60408051600480825260a0820190925260609183915f9160208201608080368337019050509050836001600160a01b0316815f8151811061338a5761338a61428e565b602002602001018181525050613400826001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fb91908101906143ef565b6139d8565b816001815181106134135761341361428e565b60200260200101818152505061345d826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133d4573d5f803e3d5ffd5b816002815181106134705761347061428e565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134dc919061448c565b60ff16816003815181106134f2576134f261428e565b60209081029190910101529392505050565b61350e828261261b565b610c0d57613526816001600160a01b031660146139f8565b6135318360206139f8565b6040516020016135429291906144ac565b60408051601f198184030181529082905262461bcd60e51b82526109ad91600401613fca565b600181901c61357b620186a060056140ea565b81106135935761358e620186a08261438d565b613596565b60055b90505f6135ad600184901b655af3107a40006140ea565b9050818410156135f85760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ad565b80841115611cb95760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ad565b813b61367f5760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ad565b5f80836001600160a01b0316836040516136999190614247565b5f604051808303815f865af19150503d805f81146136d2576040519150601f19603f3d011682016040523d82523d5f602084013e6136d7565b606091505b50915091508181906136fc5760405162461bcd60e51b81526004016109ad9190613fca565b50805115611cb957808060200190518101906137189190614520565b611cb95760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ad565b5f61376783612e71565b6001600160a01b0316146133315760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ad565b5f826040516020016137bd9190614247565b604051602081830303815290604052805190602001209050818155505050565b5f806137f55f8051602061457d833981519152612bd4565b1415905090565b6138135f8051602061457d83398151915282612bfe565b6138375f805160206146078339815191525f805160206146ce833981519152613b8e565b61385b5f805160206146ce8339815191525f8051602061457d833981519152613b8e565b6138725f8051602061457d83398151915280613b8e565b6138965f8051602061477f8339815191525f805160206146ce833981519152613b8e565b6138ba5f8051602061479f8339815191525f805160206146ce833981519152613b8e565b6108ed5f805160206146278339815191525f8051602061457d833981519152613b8e565b5f806137f55f8051602061459d833981519152612bd4565b61390d5f8051602061459d83398151915280613b8e565b6139315f805160206146ae8339815191525f8051602061459d833981519152613b8e565b6108ed5f8051602061459d83398151915282612bfe565b5f6110176040518060600160405280602781526020016145e060279139613beb565b5f8061397962015180426143d0565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b5f6110176040518060600160405280602b8152602001614714602b9139612e71565b5f806139ec601f6139e7855190565b613c1d565b90506109488382613c32565b60605f613a068360026140d3565b613a119060026140ea565b67ffffffffffffffff811115613a2957613a29613ffc565b6040519080825280601f01601f191660200182016040528015613a53576020820181803683370190505b509050600360fc1b815f81518110613a6d57613a6d61428e565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613a9b57613a9b61428e565b60200101906001600160f81b03191690815f1a9053505f613abd8460026140d3565b613ac89060016140ea565b90505b6001811115613b3f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613afc57613afc61428e565b1a60f81b828281518110613b1257613b1261428e565b60200101906001600160f81b03191690815f1a90535060049490941c93613b388161453f565b9050613acb565b5083156109485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ad565b5f613b9883612bd4565b5f8481525f805160206146478339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f8082604051602001613bfe9190614247565b60408051601f1981840301815291905280516020909101209392505050565b5f818310613c2b5781610948565b5090919050565b5f601f821115613c765760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ad565b602083810151905f90613c8a90859061438d565b613c959060086140d3565b9190911c949350505050565b6001600160a01b03811681146108ed575f80fd5b5f60208284031215613cc5575f80fd5b813561094881613ca1565b5f805f60608486031215613ce2575f80fd5b8335613ced81613ca1565b95602085013595506040909401359392505050565b5f805f8060808587031215613d15575f80fd5b8435613d2081613ca1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d6e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8060408385031215613d85575f80fd5b823591506020830135613d9781613ca1565b809150509250929050565b5f8060208385031215613db3575f80fd5b823567ffffffffffffffff80821115613dca575f80fd5b818501915085601f830112613ddd575f80fd5b813581811115613deb575f80fd5b866020828501011115613dfc575f80fd5b60209290920196919550909350505050565b5f805f60608486031215613e20575f80fd5b8335613e2b81613ca1565b9250602084013591506040840135613e4281613ca1565b809150509250925092565b5f60208284031215613e5d575f80fd5b5035919050565b5f8083601f840112613e74575f80fd5b50813567ffffffffffffffff811115613e8b575f80fd5b6020830191508360208260051b8501011115613ea5575f80fd5b9250929050565b5f805f805f8060a08789031215613ec1575f80fd5b8635613ecc81613ca1565b95506020870135945060408701359350606087013567ffffffffffffffff811115613ef5575f80fd5b613f0189828a01613e64565b979a9699509497949695608090950135949350505050565b5f805f805f60808688031215613f2d575f80fd5b8535613f3881613ca1565b94506020860135935060408601359250606086013567ffffffffffffffff811115613f61575f80fd5b613f6d88828901613e64565b969995985093965092949392505050565b5f8060408385031215613f8f575f80fd5b8235613f9a81613ca1565b946020939093013593505050565b5f5b83811015613fc2578181015183820152602001613faa565b50505f910152565b602081525f8251806020840152613fe8816040850160208701613fa8565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602080850194508084015f5b8381101561403e57815187529582019590820190600101614022565b509495945050505050565b848152836020820152608060408201525f6140676080830185614010565b905082606083015295945050505050565b5f60208284031215614088575f80fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fcc57610fcc6140bf565b80820180821115610fcc57610fcc6140bf565b5f808585111561410b575f80fd5b83861115614117575f80fd5b5050820193919092039150565b84815260606020820181905281018390525f6001600160fb1b03841115614149575f80fd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215614178575f80fd5b815161094881613ca1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b838152826020820152606060408201525f6122796060830184614010565b5f80604083850312156141dd575f80fd5b505080516020909101519092909150565b848152608060208201525f6142066080830186614010565b6040830194909452506060015292915050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f8251614258818460208701613fa8565b9190910192915050565b5f8060408385031215614273575f80fd5b823561427e81613ca1565b91506020830135613d9781613ca1565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156142dc57815f19048211156142c2576142c26140bf565b808516156142cf57918102915b93841c93908002906142a7565b509250929050565b5f826142f257506001610fcc565b816142fe57505f610fcc565b8160018114614314576002811461431e5761433a565b6001915050610fcc565b60ff84111561432f5761432f6140bf565b50506001821b610fcc565b5060208310610133831016604e8410600b841016171561435d575081810a610fcc565b61436783836142a2565b805f190482111561437a5761437a6140bf565b029392505050565b5f61094883836142e4565b81810381811115610fcc57610fcc6140bf565b828152604060208201525f6132876040830184614010565b5f600182016143c9576143c96140bf565b5060010190565b5f826143ea57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156143ff575f80fd5b815167ffffffffffffffff80821115614416575f80fd5b818401915084601f830112614429575f80fd5b81518181111561443b5761443b613ffc565b604051601f8201601f19908116603f0116810190838211818310171561446357614463613ffc565b8160405282815287602084870101111561447b575f80fd5b612bc9836020830160208801613fa8565b5f6020828403121561449c575f80fd5b815160ff81168114610948575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144e3816017850160208801613fa8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614514816028840160208801613fa8565b01602801949350505050565b5f60208284031215614530575f80fd5b81518015158114610948575f80fd5b5f8161454d5761454d6140bf565b505f19019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f54414757495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212206198f661161ddb1b3ff32c20d8a182bb9de54615cd22c909aedb0f6d8074eb0f64736f6c6343000814003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99"}} diff --git a/crates/sandbox/src/deploy.rs b/crates/sandbox/src/deploy.rs deleted file mode 100644 index 4d45168..0000000 --- a/crates/sandbox/src/deploy.rs +++ /dev/null @@ -1,137 +0,0 @@ -use std::sync::Arc; -use starknet_core_contract_client::clients::{StarknetSovereignContractClient, StarknetEthBridgeContractClient, StarknetTokenBridgeContractClient, StarkgateManagerContractClient, StarkgateRegistryContractClient, DaiERC20ContractClient}; - -use crate::{deploy_contract, deploy_contract_behind_unsafe_proxy, Error, LocalWalletSignerMiddleware}; - -const STARKNET_SOVEREIGN: &str = include_str!("../artifacts/Starknet.json"); - -const STARKNET_ETH_BRIDGE: &str = include_str!("../artifacts/StarknetLegacyBridge.json"); - -const STARKGATE_MANAGER: &str = include_str!("../artifacts/StarkgateManager.json"); -const STARKGATE_REGISTRY: &str = include_str!("../artifacts/StarkgateRegistry.json"); -const STARKNET_TOKEN_BRIDGE: &str = include_str!("../artifacts/StarknetTokenBridge.json"); -const DAI_ERC20_TOKEN: &str = include_str!("../artifacts/DaiERC20Token.json"); - - -/// Deploy Starknet sovereign contract and unsafe proxy for it. -/// Cached forge artifacts are used for deployment, make sure they are up to date. -pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( - client: Arc, -) -> Result { - // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; - - Ok(StarknetSovereignContractClient::new( - core_contract.address(), - client.clone(), - )) -} - -pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( - client: Arc -) -> Result { - // Deploy the Eth Bridge contract (no explicit constructor) - let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; - - Ok(StarknetEthBridgeContractClient::new( - eth_bridge_contract.address(), - client.clone(), - )) -} - -pub async fn deploy_starkgate_manager_behind_unsafe_proxy( - client: Arc -) -> Result { - // Deploy the Starkgate Manager contract (no explicit constructor) - let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; - - Ok(StarkgateManagerContractClient::new( - manager_contract.address(), - client.clone(), - )) -} - -pub async fn deploy_starkgate_registry_behind_unsafe_proxy( - client: Arc -) -> Result { - // Deploy the Starkgate Registry contract (no explicit constructor) - let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; - - Ok(StarkgateRegistryContractClient::new( - registry_contract.address(), - client.clone(), - )) -} - -pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( - client: Arc -) -> Result { - // Deploy the Starknet Token Bridge contract (no explicit constructor) - let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; - - Ok(StarknetTokenBridgeContractClient::new( - token_bridge_contract.address(), - client.clone(), - )) -} - -pub async fn deploy_dai_erc20_behind_unsafe_proxy( - client: Arc -) -> Result { - // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, ()).await?; - - Ok(DaiERC20ContractClient::new( - contract.address(), - client.clone(), - )) -} - -#[cfg(test)] -mod tests { - use super::deploy_starknet_sovereign_behind_unsafe_proxy; - use crate::EthereumSandbox; - use starknet_core_contract_client::{ - interfaces::{ - CoreContractInitData, OperatorTrait, ProxyInitializeData, ProxySupportTrait, - StarknetSovereignContractTrait, - }, - StarknetContractClient, - }; - - #[tokio::test] - async fn test_starknet_sovereign_contract_initialized_in_anvil() { - let sandbox = EthereumSandbox::spawn(None); - let starknet = deploy_starknet_sovereign_behind_unsafe_proxy(sandbox.client()) - .await - .expect("Failed to deploy"); - - let data = ProxyInitializeData::<0> { - sub_contract_addresses: [], - eic_address: Default::default(), - init_data: CoreContractInitData { - program_hash: 1u64.into(), // zero program hash would be deemed invalid - ..Default::default() - }, - }; - - // Initialize state & governance - starknet - .initialize_with(data) - .await - .expect("Failed to initialize"); - - // Register as operator - starknet - .register_operator(starknet.client().address()) - .await - .expect("Failed to register as operator"); - - // Check that contract is initialized - let program_hash = starknet - .program_hash() - .await - .expect("Failed to query program hash"); - assert_eq!(program_hash, 1u64.into()); - } -} diff --git a/crates/starkgate-manager-client/Cargo.toml b/crates/starkgate-manager-client/Cargo.toml new file mode 100644 index 0000000..4b0ba4e --- /dev/null +++ b/crates/starkgate-manager-client/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "starkgate-manager-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} diff --git a/crates/starkgate-manager-client/src/artifacts/StarkgateManager.json b/crates/starkgate-manager-client/src/artifacts/StarkgateManager.json new file mode 100644 index 0000000..621b50a --- /dev/null +++ b/crates/starkgate-manager-client/src/artifacts/StarkgateManager.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"addExistingBridge","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"bridge_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"blockToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deactivateToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enrollTokenBridge","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"getRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"identify","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"initialize","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isFrozen","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExistingBridgeAdded","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"bridge","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenBlocked","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenDeactivated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenEnrolled","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60c06040523480156200001157600080fd5b5030608052600160a0819052620000276200002e565b50620004f7565b336200003b81806200003e565b50565b620000486200019f565b15620000e1576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000db5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ec565b620000ec82620001f3565b620000f66200033e565b1562000194576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001905760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d2565b5050565b620001908162000390565b600080516020620029628339815191526000908152600080516020620029a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200020e6000805160206200296283398151915282620003fc565b620002487ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068600080516020620029c28339815191526200049e565b62000272600080516020620029c2833981519152600080516020620029628339815191526200049e565b6200028d60008051602062002962833981519152806200049e565b620002c87f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7600080516020620029c28339815191526200049e565b620003037f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e600080516020620029c28339815191526200049e565b6200003b7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228600080516020620029628339815191526200049e565b600080516020620029828339815191526000908152600080516020620029a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001ec565b620003ab60008051602062002982833981519152806200049e565b620003e67f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96600080516020620029828339815191526200049e565b6200003b60008051602062002982833981519152825b6000828152600080516020620029a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000190576000828152600080516020620029a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600080516020620029a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a0516124456200051d60003960006106f90152600061078c01526124456000f3fe6080604052600436106101ee5760003560e01c8063726176e81161010d578063cdd1f70d116100a0578063ed9ef16a1161006f578063ed9ef16a1461057a578063ee0e68071461059a578063eeb72866146105ba578063fa0f73ba14610606578063fad8b32a1461062657600080fd5b8063cdd1f70d146104fa578063d08fb6cb1461051a578063d9fa70911461053a578063deec9c5a1461055a57600080fd5b80639463629a116100dc5780639463629a14610487578063a2bdde3d146104a7578063c1d220fe146104c7578063cb1cccce146104da57600080fd5b8063726176e814610407578063757bd9ab146104275780638101b64c146104475780638e5224ff1461046757600080fd5b80634ee165d61161018557806368173bcf1161015457806368173bcf146103875780636c04d9d5146103a75780636d70f7ae146103c75780636fc97cbf146103e757600080fd5b80634ee165d6146102fa5780635a5d1bb91461031a5780635ab1bd531461033a57806362a143761461036757600080fd5b806333eeb147116101c157806333eeb1471461027557806336568abe1461029a5780633682a450146102ba578063439fab91146102da57600080fd5b80630b3a2d21146101f35780630e770f231461021557806317896383146102355780632f95198514610255575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611eae565b610646565b005b34801561022157600080fd5b50610213610230366004611eae565b610661565b34801561024157600080fd5b50610213610250366004611eae565b610679565b34801561026157600080fd5b50610213610270366004611eae565b610691565b34801561028157600080fd5b5060005b60405190151581526020015b60405180910390f35b3480156102a657600080fd5b506102136102b5366004611ecb565b6106df565b3480156102c657600080fd5b506102136102d5366004611eae565b610771565b3480156102e657600080fd5b506102136102f5366004611efb565b610789565b34801561030657600080fd5b50610213610315366004611f6d565b61093a565b34801561032657600080fd5b50610285610335366004611eae565b610a81565b34801561034657600080fd5b5061034f610aa1565b6040516001600160a01b039091168152602001610291565b34801561037357600080fd5b50610213610382366004611eae565b610ab0565b34801561039357600080fd5b506102136103a2366004611eae565b610ac8565b3480156103b357600080fd5b506102856103c2366004611eae565b610de0565b3480156103d357600080fd5b506102856103e2366004611eae565b610dfa565b3480156103f357600080fd5b50610213610402366004611eae565b610e14565b34801561041357600080fd5b50610213610422366004611eae565b610e2c565b34801561043357600080fd5b50610285610442366004611eae565b61104c565b34801561045357600080fd5b50610213610462366004611eae565b611066565b34801561047357600080fd5b50610285610482366004611eae565b6110a7565b34801561049357600080fd5b506102136104a2366004611eae565b6110c1565b3480156104b357600080fd5b506102856104c2366004611eae565b6110d9565b6102136104d5366004611eae565b6110f3565b3480156104e657600080fd5b506102856104f5366004611eae565b6112b6565b34801561050657600080fd5b50610213610515366004611eae565b6112d0565b34801561052657600080fd5b50610285610535366004611eae565b6112e8565b34801561054657600080fd5b50610213610555366004611eae565b611302565b34801561056657600080fd5b50610213610575366004611eae565b61131a565b34801561058657600080fd5b50610213610595366004611eae565b611332565b3480156105a657600080fd5b506102136105b5366004611eae565b61134a565b3480156105c657600080fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102919190611fbf565b34801561061257600080fd5b50610213610621366004611eae565b61138b565b34801561063257600080fd5b50610213610641366004611eae565b6113a3565b61065e6000805160206123f0833981519152826113bb565b50565b61065e60008051602061236f833981519152826113bb565b61065e60008051602061238f833981519152826113bb565b80336001600160a01b038216036106c35760405162461bcd60e51b81526004016106ba90611ff2565b60405180910390fd5b6106db60008051602061238f833981519152836113d7565b5050565b6000805160206122ac8339815191528214801561071a57507f0000000000000000000000000000000000000000000000000000000000000000155b156107675760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016106ba565b6106db82826113f3565b61065e6000805160206123d0833981519152826113bb565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107fa5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106ba565b6000610807816020612038565b9050600061081682602061204f565b90508083101561085e5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106ba565b600061086c82848688612062565b8101906108799190611eae565b905036600061088a8582888a612062565b9150915036600061089d8887818c612062565b90925090506001600160a01b038516156108c7576108bc85838361146d565b505050505050505050565b6108cf6115af565b1561091e5780156109195760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106ba565b6108bc565b61092882826115ca565b61093282826116e7565b6108bc61170c565b610943336110d9565b61095f5760405162461bcd60e51b81526004016106ba9061208c565b806001600160a01b0316610971611717565b6001600160a01b0316036109d85760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b60648201526084016106ba565b6109e061173a565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef090600090a35050565b6000610a9b6000805160206122ec8339815191528361175d565b92915050565b6000610aab61173a565b905090565b61065e6000805160206122cc833981519152826113bb565b610ad1336110d9565b610aed5760405162461bcd60e51b81526004016106ba9061208c565b6000610af761173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906120c6565b90506001600160a01b038116610bb45760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b60448201526064016106ba565b6000196001600160a01b03821601610cc457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c3891908101906120f9565b5115610c79576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610ca8565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b81526004016106ba9190611fbf565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff90600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b50505050610d5c611717565b6001600160a01b0316816001600160a01b031603610ddb57610d7c611717565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b600060405180830381600087803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b505050505b505050565b6000610a9b60008051602061230c8339815191528361175d565b6000610a9b6000805160206123d08339815191528361175d565b61065e60008051602061230c833981519152826113bb565b610e35336110d9565b610e515760405162461bcd60e51b81526004016106ba9061208c565b6000610e5b61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906120c6565b90506001600160a01b038116610f3f5760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e990600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610da8565b6000196001600160a01b0382160161100457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fc391908101906120f9565b5115610c79576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610ca8565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f5345525649434500000060448201526064016106ba565b6000610a9b60008051602061236f8339815191528361175d565b80336001600160a01b0382160361108f5760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122cc833981519152836113d7565b6000610a9b60008051602061238f8339815191528361175d565b61065e6000805160206122ac833981519152826113bb565b6000610a9b6000805160206123f08339815191528361175d565b60006110fd61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906120c6565b6001600160a01b0316036111ba5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b60448201526064016106ba565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee490600090a3806001600160a01b031663a3ecff8f83611208611717565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b50505050611270611717565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024016000604051808303818588803b158015610dc257600080fd5b6000610a9b6000805160206122ac8339815191528361175d565b61065e6000805160206122ec833981519152826113bb565b6000610a9b6000805160206122cc8339815191528361175d565b61065e60008051602061236f833981519152826113d7565b61065e6000805160206122ec833981519152826113d7565b61065e60008051602061230c833981519152826113d7565b80336001600160a01b038216036113735760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122ac833981519152836113d7565b61065e6000805160206123f0833981519152826113d7565b61065e6000805160206123d0833981519152826113d7565b6113c482611795565b6113cd816117b7565b610ddb83836117c1565b6113e082611795565b6113e9816117b7565b610ddb8383611837565b6001600160a01b03811633146114635760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ba565b6106db8282611837565b6001600160a01b0383163b6114b95760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106ba565b600080846001600160a01b031663439fab9160e01b85856040516024016114e19291906121be565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161151f91906121ed565b600060405180830381855af49150503d806000811461155a576040519150601f19603f3d011682016040523d82523d6000602084013e61155f565b606091505b50915091508181906115845760405162461bcd60e51b81526004016106ba9190611fbf565b5080518190156115a75760405162461bcd60e51b81526004016106ba9190611fbf565b505050505050565b6000806115ba61173a565b6001600160a01b03161415905090565b6040811461160e5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016106ba565b60008061161d83850185611f6d565b91509150611634826001600160a01b03163b151590565b61168a5760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b60648201526084016106ba565b6001600160a01b0381163b6116e15760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f414444524553530060448201526064016106ba565b50505050565b6000806116f683850185611f6d565b91509150611703826118ab565b6116e1816118cd565b3361065e81806118ef565b6000610aab6040518060600160405280602181526020016123af602191396119f3565b6000610aab60405180606001604052806023815260200161234c602391396119f3565b600091825260008051602061232c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260008051602061232c833981519152602052604090206001015490565b61065e8133611a27565b6117cb828261175d565b6106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611841828261175d565b156106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61065e60405180606001604052806023815260200161234c6023913982611a8b565b61065e6040518060600160405280602181526020016123af6021913982611a8b565b6118f7611ae4565b15611965576119146000805160206122ac8339815191528361175d565b6119605760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016106ba565b61196e565b61196e82611b05565b611976611bf3565b156119ea576119936000805160206122cc8339815191528261175d565b6106db5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016106ba565b6106db81611c0d565b60008082604051602001611a0791906121ed565b60408051601f198184030181529190528051602090910120549392505050565b611a31828261175d565b6106db57611a49816001600160a01b03166014611c63565b611a54836020611c63565b604051602001611a65929190612209565b60408051601f198184030181529082905262461bcd60e51b82526106ba91600401611fbf565b6000611a96836119f3565b6001600160a01b031614611ada5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106ba565b6106db8282611e06565b600080611afe6000805160206122ac833981519152611795565b1415905090565b611b1d6000805160206122ac833981519152826117c1565b611b436000805160206122ec83398151915260008051602061238f833981519152611e39565b611b6960008051602061238f8339815191526000805160206122ac833981519152611e39565b611b816000805160206122ac83398151915280611e39565b611ba76000805160206123d083398151915260008051602061238f833981519152611e39565b611bcd6000805160206123f083398151915260008051602061238f833981519152611e39565b61065e60008051602061230c8339815191526000805160206122ac833981519152611e39565b600080611afe6000805160206122cc833981519152611795565b611c256000805160206122cc83398151915280611e39565b611c4b60008051602061236f8339815191526000805160206122cc833981519152611e39565b61065e6000805160206122cc833981519152826117c1565b60606000611c72836002612038565b611c7d90600261204f565b67ffffffffffffffff811115611c9557611c956120e3565b6040519080825280601f01601f191660200182016040528015611cbf576020820181803683370190505b509050600360fc1b81600081518110611cda57611cda61227e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d0957611d0961227e565b60200101906001600160f81b031916908160001a9053506000611d2d846002612038565b611d3890600161204f565b90505b6001811115611db0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d6c57611d6c61227e565b1a60f81b828281518110611d8257611d8261227e565b60200101906001600160f81b031916908160001a90535060049490941c93611da981612294565b9050611d3b565b508315611dff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ba565b9392505050565b600082604051602001611e1991906121ed565b604051602081830303815290604052805190602001209050818155505050565b6000611e4483611795565b600084815260008051602061232c8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038116811461065e57600080fd5b600060208284031215611ec057600080fd5b8135611dff81611e99565b60008060408385031215611ede57600080fd5b823591506020830135611ef081611e99565b809150509250929050565b60008060208385031215611f0e57600080fd5b823567ffffffffffffffff80821115611f2657600080fd5b818501915085601f830112611f3a57600080fd5b813581811115611f4957600080fd5b866020828501011115611f5b57600080fd5b60209290920196919550909350505050565b60008060408385031215611f8057600080fd5b8235611f8b81611e99565b91506020830135611ef081611e99565b60005b83811015611fb6578181015183820152602001611f9e565b50506000910152565b6020815260008251806020840152611fde816040850160208701611f9b565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9b57610a9b612022565b80820180821115610a9b57610a9b612022565b6000808585111561207257600080fd5b8386111561207f57600080fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b80516120c181611e99565b919050565b6000602082840312156120d857600080fd5b8151611dff81611e99565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561210c57600080fd5b825167ffffffffffffffff8082111561212457600080fd5b818501915085601f83011261213857600080fd5b81518181111561214a5761214a6120e3565b8060051b604051601f19603f8301168101818110858211171561216f5761216f6120e3565b60405291825284820192508381018501918883111561218d57600080fd5b938501935b828510156121b2576121a3856120b6565b84529385019392850192612192565b98975050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600082516121ff818460208701611f9b565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612241816017850160208801611f9b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612272816028840160208801611f9b565b01602801949350505050565b634e487b7160e01b600052603260045260246000fd5b6000816122a3576122a3612022565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cd36da92815ef578b14e116ffb30dc8824458229727a0d3f24d3a4de18c97f6564736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99","sourceMap":"517:5134:29:-:0;;;;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;517:5134:29;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;517:5134:29;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101ee5760003560e01c8063726176e81161010d578063cdd1f70d116100a0578063ed9ef16a1161006f578063ed9ef16a1461057a578063ee0e68071461059a578063eeb72866146105ba578063fa0f73ba14610606578063fad8b32a1461062657600080fd5b8063cdd1f70d146104fa578063d08fb6cb1461051a578063d9fa70911461053a578063deec9c5a1461055a57600080fd5b80639463629a116100dc5780639463629a14610487578063a2bdde3d146104a7578063c1d220fe146104c7578063cb1cccce146104da57600080fd5b8063726176e814610407578063757bd9ab146104275780638101b64c146104475780638e5224ff1461046757600080fd5b80634ee165d61161018557806368173bcf1161015457806368173bcf146103875780636c04d9d5146103a75780636d70f7ae146103c75780636fc97cbf146103e757600080fd5b80634ee165d6146102fa5780635a5d1bb91461031a5780635ab1bd531461033a57806362a143761461036757600080fd5b806333eeb147116101c157806333eeb1471461027557806336568abe1461029a5780633682a450146102ba578063439fab91146102da57600080fd5b80630b3a2d21146101f35780630e770f231461021557806317896383146102355780632f95198514610255575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611eae565b610646565b005b34801561022157600080fd5b50610213610230366004611eae565b610661565b34801561024157600080fd5b50610213610250366004611eae565b610679565b34801561026157600080fd5b50610213610270366004611eae565b610691565b34801561028157600080fd5b5060005b60405190151581526020015b60405180910390f35b3480156102a657600080fd5b506102136102b5366004611ecb565b6106df565b3480156102c657600080fd5b506102136102d5366004611eae565b610771565b3480156102e657600080fd5b506102136102f5366004611efb565b610789565b34801561030657600080fd5b50610213610315366004611f6d565b61093a565b34801561032657600080fd5b50610285610335366004611eae565b610a81565b34801561034657600080fd5b5061034f610aa1565b6040516001600160a01b039091168152602001610291565b34801561037357600080fd5b50610213610382366004611eae565b610ab0565b34801561039357600080fd5b506102136103a2366004611eae565b610ac8565b3480156103b357600080fd5b506102856103c2366004611eae565b610de0565b3480156103d357600080fd5b506102856103e2366004611eae565b610dfa565b3480156103f357600080fd5b50610213610402366004611eae565b610e14565b34801561041357600080fd5b50610213610422366004611eae565b610e2c565b34801561043357600080fd5b50610285610442366004611eae565b61104c565b34801561045357600080fd5b50610213610462366004611eae565b611066565b34801561047357600080fd5b50610285610482366004611eae565b6110a7565b34801561049357600080fd5b506102136104a2366004611eae565b6110c1565b3480156104b357600080fd5b506102856104c2366004611eae565b6110d9565b6102136104d5366004611eae565b6110f3565b3480156104e657600080fd5b506102856104f5366004611eae565b6112b6565b34801561050657600080fd5b50610213610515366004611eae565b6112d0565b34801561052657600080fd5b50610285610535366004611eae565b6112e8565b34801561054657600080fd5b50610213610555366004611eae565b611302565b34801561056657600080fd5b50610213610575366004611eae565b61131a565b34801561058657600080fd5b50610213610595366004611eae565b611332565b3480156105a657600080fd5b506102136105b5366004611eae565b61134a565b3480156105c657600080fd5b5060408051808201825260208082527f537461726b576172655f537461726b676174654d616e616765725f322e305f319082015290516102919190611fbf565b34801561061257600080fd5b50610213610621366004611eae565b61138b565b34801561063257600080fd5b50610213610641366004611eae565b6113a3565b61065e6000805160206123f0833981519152826113bb565b50565b61065e60008051602061236f833981519152826113bb565b61065e60008051602061238f833981519152826113bb565b80336001600160a01b038216036106c35760405162461bcd60e51b81526004016106ba90611ff2565b60405180910390fd5b6106db60008051602061238f833981519152836113d7565b5050565b6000805160206122ac8339815191528214801561071a57507f0000000000000000000000000000000000000000000000000000000000000000155b156107675760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016106ba565b6106db82826113f3565b61065e6000805160206123d0833981519152826113bb565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107fa5760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016106ba565b6000610807816020612038565b9050600061081682602061204f565b90508083101561085e5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016106ba565b600061086c82848688612062565b8101906108799190611eae565b905036600061088a8582888a612062565b9150915036600061089d8887818c612062565b90925090506001600160a01b038516156108c7576108bc85838361146d565b505050505050505050565b6108cf6115af565b1561091e5780156109195760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016106ba565b6108bc565b61092882826115ca565b61093282826116e7565b6108bc61170c565b610943336110d9565b61095f5760405162461bcd60e51b81526004016106ba9061208c565b806001600160a01b0316610971611717565b6001600160a01b0316036109d85760405162461bcd60e51b815260206004820152602860248201527f43414e4e4f545f4144445f4d41494e5f4d554c54495f4252494447455f41535f6044820152674558495354494e4760c01b60648201526084016106ba565b6109e061173a565b60405163a3ecff8f60e01b81526001600160a01b0384811660048301528381166024830152919091169063a3ecff8f90604401600060405180830381600087803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50506040516001600160a01b038085169350851691507ff4b704dd6f08403eab5741ede579b6c3f7f8984842d9ca8ddb2b58efc9a8cef090600090a35050565b6000610a9b6000805160206122ec8339815191528361175d565b92915050565b6000610aab61173a565b905090565b61065e6000805160206122cc833981519152826113bb565b610ad1336110d9565b610aed5760405162461bcd60e51b81526004016106ba9061208c565b6000610af761173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6791906120c6565b90506001600160a01b038116610bb45760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d1539493d313115160721b60448201526064016106ba565b6000196001600160a01b03821601610cc457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c3891908101906120f9565b5115610c79576040518060400160405280601981526020017f544f4b454e5f414c52454144595f444541435449564154454400000000000000815250610ca8565b604051806040016040528060158152602001741513d2d15397d053149150511657d09313d0d2d151605a1b8152505b90508060405162461bcd60e51b81526004016106ba9190611fbf565b60405133906001600160a01b038516907e068b447690811e3678da5fdb0b8f068476a81898e529dfc87d3dc69af019ff90600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b50505050610d5c611717565b6001600160a01b0316816001600160a01b031603610ddb57610d7c611717565b604051633ea053eb60e01b81526001600160a01b0385811660048301529190911690633ea053eb906024015b600060405180830381600087803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b505050505b505050565b6000610a9b60008051602061230c8339815191528361175d565b6000610a9b6000805160206123d08339815191528361175d565b61065e60008051602061230c833981519152826113bb565b610e35336110d9565b610e515760405162461bcd60e51b81526004016106ba9061208c565b6000610e5b61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060009183169063f44c7c8f90602401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906120c6565b90506001600160a01b038116610f3f5760405133906001600160a01b038516907f9069e4065b5a726f2c4660d01a195dfe89fec6c66ddeb2820353bc5a7518c7e990600090a3604051630e4c2edd60e31b81526001600160a01b03848116600483015283169063726176e890602401610da8565b6000196001600160a01b0382160161100457604051632ab899fb60e11b81526001600160a01b0384811660048301526000919084169063557133f690602401600060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fc391908101906120f9565b5115610c79576040518060400160405280601e81526020017f43414e4e4f545f424c4f434b5f44454143544956415445445f544f4b454e0000815250610ca8565b60405162461bcd60e51b815260206004820152601d60248201527f43414e4e4f545f424c4f434b5f544f4b454e5f494e5f5345525649434500000060448201526064016106ba565b6000610a9b60008051602061236f8339815191528361175d565b80336001600160a01b0382160361108f5760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122cc833981519152836113d7565b6000610a9b60008051602061238f8339815191528361175d565b61065e6000805160206122ac833981519152826113bb565b6000610a9b6000805160206123f08339815191528361175d565b60006110fd61173a565b60405163f44c7c8f60e01b81526001600160a01b03848116600483015291925060019183169063f44c7c8f90602401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906120c6565b6001600160a01b0316036111ba5760405162461bcd60e51b815260206004820152601460248201527343414e4e4f545f4445504c4f595f42524944474560601b60448201526064016106ba565b60405133906001600160a01b038416907f22a7d63273ca5d74f19d48b49212c82be27729cc3353449d494d000fc435bee490600090a3806001600160a01b031663a3ecff8f83611208611717565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b50505050611270611717565b604051632b62e4ad60e21b81526001600160a01b038481166004830152919091169063ad8b92b49034906024016000604051808303818588803b158015610dc257600080fd5b6000610a9b6000805160206122ac8339815191528361175d565b61065e6000805160206122ec833981519152826113bb565b6000610a9b6000805160206122cc8339815191528361175d565b61065e60008051602061236f833981519152826113d7565b61065e6000805160206122ec833981519152826113d7565b61065e60008051602061230c833981519152826113d7565b80336001600160a01b038216036113735760405162461bcd60e51b81526004016106ba90611ff2565b6106db6000805160206122ac833981519152836113d7565b61065e6000805160206123f0833981519152826113d7565b61065e6000805160206123d0833981519152826113d7565b6113c482611795565b6113cd816117b7565b610ddb83836117c1565b6113e082611795565b6113e9816117b7565b610ddb8383611837565b6001600160a01b03811633146114635760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106ba565b6106db8282611837565b6001600160a01b0383163b6114b95760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016106ba565b600080846001600160a01b031663439fab9160e01b85856040516024016114e19291906121be565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161151f91906121ed565b600060405180830381855af49150503d806000811461155a576040519150601f19603f3d011682016040523d82523d6000602084013e61155f565b606091505b50915091508181906115845760405162461bcd60e51b81526004016106ba9190611fbf565b5080518190156115a75760405162461bcd60e51b81526004016106ba9190611fbf565b505050505050565b6000806115ba61173a565b6001600160a01b03161415905090565b6040811461160e5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016106ba565b60008061161d83850185611f6d565b91509150611634826001600160a01b03163b151590565b61168a5760405162461bcd60e51b815260206004820152602160248201527f494e56414c49445f52454749535452595f434f4e54524143545f4144445245536044820152605360f81b60648201526084016106ba565b6001600160a01b0381163b6116e15760405162461bcd60e51b815260206004820152601f60248201527f494e56414c49445f4252494447455f434f4e54524143545f414444524553530060448201526064016106ba565b50505050565b6000806116f683850185611f6d565b91509150611703826118ab565b6116e1816118cd565b3361065e81806118ef565b6000610aab6040518060600160405280602181526020016123af602191396119f3565b6000610aab60405180606001604052806023815260200161234c602391396119f3565b600091825260008051602061232c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600090815260008051602061232c833981519152602052604090206001015490565b61065e8133611a27565b6117cb828261175d565b6106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611841828261175d565b156106db57600082815260008051602061232c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61065e60405180606001604052806023815260200161234c6023913982611a8b565b61065e6040518060600160405280602181526020016123af6021913982611a8b565b6118f7611ae4565b15611965576119146000805160206122ac8339815191528361175d565b6119605760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016106ba565b61196e565b61196e82611b05565b611976611bf3565b156119ea576119936000805160206122cc8339815191528261175d565b6106db5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016106ba565b6106db81611c0d565b60008082604051602001611a0791906121ed565b60408051601f198184030181529190528051602090910120549392505050565b611a31828261175d565b6106db57611a49816001600160a01b03166014611c63565b611a54836020611c63565b604051602001611a65929190612209565b60408051601f198184030181529082905262461bcd60e51b82526106ba91600401611fbf565b6000611a96836119f3565b6001600160a01b031614611ada5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016106ba565b6106db8282611e06565b600080611afe6000805160206122ac833981519152611795565b1415905090565b611b1d6000805160206122ac833981519152826117c1565b611b436000805160206122ec83398151915260008051602061238f833981519152611e39565b611b6960008051602061238f8339815191526000805160206122ac833981519152611e39565b611b816000805160206122ac83398151915280611e39565b611ba76000805160206123d083398151915260008051602061238f833981519152611e39565b611bcd6000805160206123f083398151915260008051602061238f833981519152611e39565b61065e60008051602061230c8339815191526000805160206122ac833981519152611e39565b600080611afe6000805160206122cc833981519152611795565b611c256000805160206122cc83398151915280611e39565b611c4b60008051602061236f8339815191526000805160206122cc833981519152611e39565b61065e6000805160206122cc833981519152826117c1565b60606000611c72836002612038565b611c7d90600261204f565b67ffffffffffffffff811115611c9557611c956120e3565b6040519080825280601f01601f191660200182016040528015611cbf576020820181803683370190505b509050600360fc1b81600081518110611cda57611cda61227e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d0957611d0961227e565b60200101906001600160f81b031916908160001a9053506000611d2d846002612038565b611d3890600161204f565b90505b6001811115611db0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d6c57611d6c61227e565b1a60f81b828281518110611d8257611d8261227e565b60200101906001600160f81b031916908160001a90535060049490941c93611da981612294565b9050611d3b565b508315611dff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106ba565b9392505050565b600082604051602001611e1991906121ed565b604051602081830303815290604052805190602001209050818155505050565b6000611e4483611795565b600084815260008051602061232c8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038116811461065e57600080fd5b600060208284031215611ec057600080fd5b8135611dff81611e99565b60008060408385031215611ede57600080fd5b823591506020830135611ef081611e99565b809150509250929050565b60008060208385031215611f0e57600080fd5b823567ffffffffffffffff80821115611f2657600080fd5b818501915085601f830112611f3a57600080fd5b813581811115611f4957600080fd5b866020828501011115611f5b57600080fd5b60209290920196919550909350505050565b60008060408385031215611f8057600080fd5b8235611f8b81611e99565b91506020830135611ef081611e99565b60005b83811015611fb6578181015183820152602001611f9e565b50506000910152565b6020815260008251806020840152611fde816040850160208701611f9b565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9b57610a9b612022565b80820180821115610a9b57610a9b612022565b6000808585111561207257600080fd5b8386111561207f57600080fd5b5050820193919092039150565b60208082526010908201526f27a7262cafaa27a5a2a72fa0a226a4a760811b604082015260600190565b80516120c181611e99565b919050565b6000602082840312156120d857600080fd5b8151611dff81611e99565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561210c57600080fd5b825167ffffffffffffffff8082111561212457600080fd5b818501915085601f83011261213857600080fd5b81518181111561214a5761214a6120e3565b8060051b604051601f19603f8301168101818110858211171561216f5761216f6120e3565b60405291825284820192508381018501918883111561218d57600080fd5b938501935b828510156121b2576121a3856120b6565b84529385019392850192612192565b98975050505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600082516121ff818460208701611f9b565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612241816017850160208801611f9b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612272816028840160208801611f9b565b01602801949350505050565b634e487b7160e01b600052603260045260246000fd5b6000816122a3576122a3612022565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b300d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b474154455f4d414e414745525f52454749535452595f534c4f545f544147037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b474154455f4d414e414745525f4252494447455f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea2646970667358221220cd36da92815ef578b14e116ffb30dc8824458229727a0d3f24d3a4de18c97f6564736f6c63430008170033","sourceMap":"517:5134:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;;;;;-1:-1:-1;3283:116:44;;;;;:::i;:::-;;:::i;:::-;;3155:122;;;;;;;;;;-1:-1:-1;3155:122:44;;;;;:::i;:::-;;:::i;2651:121::-;;;;;;;;;;-1:-1:-1;2651:121:44;;;;;:::i;:::-;;:::i;3680:137::-;;;;;;;;;;-1:-1:-1;3680:137:44;;;;;:::i;:::-;;:::i;757:86:49:-;;;;;;;;;;-1:-1:-1;808:4:49;757:86;;;567:14:60;;560:22;542:41;;530:2;515:18;757:86:49;;;;;;;;4632:247:44;;;;;;;;;;-1:-1:-1;4632:247:44;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;;;;;-1:-1:-1;2910:111:44;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;;;;;-1:-1:-1;1465:1033:49;;;;;:::i;:::-;;:::i;2982:290:29:-;;;;;;;;;;-1:-1:-1;2982:290:29;;;;;:::i;:::-;;:::i;1359:135:44:-;;;;;;;;;;-1:-1:-1;1359:135:44;;;;;:::i;:::-;;:::i;1118:89:29:-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2067:32:60;;;2049:51;;2037:2;2022:18;1118:89:29;1903:203:60;3027:122:44;;;;;;;;;;-1:-1:-1;3027:122:44;;;;;:::i;:::-;;:::i;3534:763:29:-;;;;;;;;;;-1:-1:-1;3534:763:29;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;;;;;-1:-1:-1;2356:143:44;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;;;;;-1:-1:-1;1793:128:44;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;;;;;-1:-1:-1;3405:126:44;;;;;:::i;:::-;;:::i;4523:708:29:-;;;;;;;;;;-1:-1:-1;4523:708:29;;;;;:::i;:::-;;:::i;2072:139:44:-;;;;;;;;;;-1:-1:-1;2072:139:44;;;;;:::i;:::-;;:::i;4087:138::-;;;;;;;;;;-1:-1:-1;4087:138:44;;;;;:::i;:::-;;:::i;1500:::-;;;;;;;;;;-1:-1:-1;1500:138:44;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;;;;;-1:-1:-1;2778:126:44;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;;;;;-1:-1:-1;2217:133:44;;;;;:::i;:::-;;:::i;5237:412:29:-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;;;;;-1:-1:-1;1644:143:44;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;;;;;-1:-1:-1;2527:118:44;;;;;:::i;:::-;;:::i;1927:139::-;;;;;;;;;;-1:-1:-1;1927:139:44;;;;;:::i;:::-;;:::i;4231:121::-;;;;;;;;;;-1:-1:-1;4231:121:44;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;;;;;-1:-1:-1;3557:117:44;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;;;;;-1:-1:-1;4479:125:44;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;;;;;-1:-1:-1;3823:142:44;;;;;:::i;:::-;;:::i;1782:125:29:-;;;;;;;;;;-1:-1:-1;1859:41:29;;;;;;;;;;;;;;;;;1782:125;;;;1859:41;1782:125;:::i;4358:115:44:-;;;;;;;;;;-1:-1:-1;4358:115:44;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;;;;;-1:-1:-1;3971:110:44;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;3155:122::-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;2651:121::-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;3680:137::-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;;;;;;;;;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;3320:2:60;4769:42:44;;;3302:21:60;;;3339:18;;;3332:30;3398:34;3378:18;;;3371:62;3450:18;;4769:42:44;3118:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;3681:2:60;536:57:45;;;3663:21:60;3720:2;3700:18;;;3693:30;-1:-1:-1;;;3739:18:60;;;3732:52;3801:18;;536:57:45;3479:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;4467:2:60;1648:63:49::1;::::0;::::1;4449:21:60::0;4506:2;4486:18;;;4479:30;-1:-1:-1;;;4525:18:60;;;4518:49;4584:18;;1648:63:49::1;4265:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;5411:2:60;2240:53:49::1;::::0;::::1;5393:21:60::0;5450:2;5430:18;;;5423:30;-1:-1:-1;;;5469:18:60;;;5462:50;5529:18;;2240:53:49::1;5209:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;2982:290:29:-:0;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;3095:7:29::1;-1:-1:-1::0;;;;;3083:19:29::1;:8;:6;:8::i;:::-;-1:-1:-1::0;;;;;3083:19:29::1;::::0;3075:72:::1;;;::::0;-1:-1:-1;;;3075:72:29;;6105:2:60;3075:72:29::1;::::0;::::1;6087:21:60::0;6144:2;6124:18;;;6117:30;6183:34;6163:18;;;6156:62;-1:-1:-1;;;6234:18:60;;;6227:38;6282:19;;3075:72:29::1;5903:404:60::0;3075:72:29::1;3176:10;:8;:10::i;:::-;3157:58;::::0;-1:-1:-1;;;3157:58:29;;-1:-1:-1;;;;;6542:15:60;;;3157:58:29::1;::::0;::::1;6524:34:60::0;6594:15;;;6574:18;;;6567:43;3157:42:29;;;::::1;::::0;::::1;::::0;6459:18:60;;3157:58:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3230:35:29::1;::::0;-1:-1:-1;;;;;3230:35:29;;::::1;::::0;-1:-1:-1;3230:35:29;::::1;::::0;-1:-1:-1;3230:35:29::1;::::0;;;::::1;2982:290:::0;;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;:::-;1436:51;1359:135;-1:-1:-1;;1359:135:44:o;1118:89:29:-;1164:7;1190:10;:8;:10::i;:::-;1183:17;;1118:89;:::o;3027:122:44:-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;3534:763:29:-;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;3608:35:29::1;3665:10;:8;:10::i;:::-;3711:33;::::0;-1:-1:-1;;;3711:33:29;;-1:-1:-1;;;;;2067:32:60;;;3711:33:29::1;::::0;::::1;2049:51:60::0;3608:68:29;;-1:-1:-1;3686:22:29::1;::::0;3711:26;::::1;::::0;::::1;::::0;2022:18:60;;3711:33:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3686:58:::0;-1:-1:-1;;;;;;3763:28:29;::::1;3755:59;;;::::0;-1:-1:-1;;;3755:59:29;;7222:2:60;3755:59:29::1;::::0;::::1;7204:21:60::0;7261:2;7241:18;;;7234:30;-1:-1:-1;;;7280:18:60;;;7273:48;7338:18;;3755:59:29::1;7020:342:60::0;3755:59:29::1;-1:-1:-1::0;;;;;;;3828:31:29;::::1;::::0;3824:263:::1;;3901:44;::::0;-1:-1:-1;;;3901:44:29;;-1:-1:-1;;;;;2067:32:60;;;3901:44:29::1;::::0;::::1;2049:51:60::0;3875:23:29::1;::::0;3901:37;;::::1;::::0;::::1;::::0;2022:18:60;;3901:44:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;3901:44:29::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;:51:::0;:56;:144:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;3901:144:29::1;;::::0;::::1;3875:170;;4066:9;4059:17;;-1:-1:-1::0;;;4059:17:29::1;;;;;;;;:::i;3824:263::-;4101:35;::::0;4125:10:::1;::::0;-1:-1:-1;;;;;4101:35:29;::::1;::::0;::::1;::::0;;;::::1;4146:34;::::0;-1:-1:-1;;;4146:34:29;;-1:-1:-1;;;;;2067:32:60;;;4146:34:29::1;::::0;::::1;2049:51:60::0;4146:27:29;::::1;::::0;::::1;::::0;2022:18:60;;4146:34:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4212:8;:6;:8::i;:::-;-1:-1:-1::0;;;;;4194:26:29::1;:14;-1:-1:-1::0;;;;;4194:26:29::1;::::0;4190:101:::1;;4253:8;:6;:8::i;:::-;4236:44;::::0;-1:-1:-1;;;4236:44:29;;-1:-1:-1;;;;;2067:32:60;;;4236:44:29::1;::::0;::::1;2049:51:60::0;4236:37:29;;;::::1;::::0;::::1;::::0;2022:18:60;;4236:44:29::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4190:101;3598:699;;3534:763:::0;:::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;4523:708:29:-;966:40:44;3290:10:50;2217:133:44;:::i;966:40::-;958:69;;;;-1:-1:-1;;;958:69:44;;;;;;;:::i;:::-;4592:35:29::1;4649:10;:8;:10::i;:::-;4695:33;::::0;-1:-1:-1;;;4695:33:29;;-1:-1:-1;;;;;2067:32:60;;;4695:33:29::1;::::0;::::1;2049:51:60::0;4592:68:29;;-1:-1:-1;4670:22:29::1;::::0;4695:26;::::1;::::0;::::1;::::0;2022:18:60;;4695:33:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4670:58:::0;-1:-1:-1;;;;;;4742:28:29;::::1;4738:487;;4791:31;::::0;4811:10:::1;::::0;-1:-1:-1;;;;;4791:31:29;::::1;::::0;::::1;::::0;;;::::1;4836:34;::::0;-1:-1:-1;;;4836:34:29;;-1:-1:-1;;;;;2067:32:60;;;4836:34:29::1;::::0;::::1;2049:51:60::0;4836:27:29;::::1;::::0;::::1;::::0;2022:18:60;;4836:34:29::1;1903:203:60::0;4738:487:29::1;-1:-1:-1::0;;;;;;;4891:31:29;::::1;::::0;4887:338:::1;;4964:44;::::0;-1:-1:-1;;;4964:44:29;;-1:-1:-1;;;;;2067:32:60;;;4964:44:29::1;::::0;::::1;2049:51:60::0;4938:23:29::1;::::0;4964:37;;::::1;::::0;::::1;::::0;2022:18:60;;4964:44:29::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;4964:44:29::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;:51:::0;:56;:149:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;4887:338;5175:39;::::0;-1:-1:-1;;;5175:39:29;;8835:2:60;5175:39:29::1;::::0;::::1;8817:21:60::0;8874:2;8854:18;;;8847:30;8913:31;8893:18;;;8886:59;8962:18;;5175:39:29::1;8633:353:60::0;2072:139:44;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;4087:138::-;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;5237:412:29:-;5306:35;5363:10;:8;:10::i;:::-;5392:33;;-1:-1:-1;;;5392:33:29;;-1:-1:-1;;;;;2067:32:60;;;5392:33:29;;;2049:51:60;5306:68:29;;-1:-1:-1;858:3:28;;5392:26:29;;;;;2022:18:60;;5392:33:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5392:50:29;;5384:83;;;;-1:-1:-1;;;5384:83:29;;9193:2:60;5384:83:29;;;9175:21:60;9232:2;9212:18;;;9205:30;-1:-1:-1;;;9251:18:60;;;9244:50;9311:18;;5384:83:29;8991:344:60;5384:83:29;5482:32;;5503:10;;-1:-1:-1;;;;;5482:32:29;;;;;;;;5524:16;-1:-1:-1;;;;;5524:28:29;;5553:5;5560:8;:6;:8::i;:::-;5524:45;;-1:-1:-1;;;;;;5524:45:29;;;;;;;-1:-1:-1;;;;;6542:15:60;;;5524:45:29;;;6524:34:60;6594:15;;6574:18;;;6567:43;6459:18;;5524:45:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5596:8;:6;:8::i;:::-;5579:63;;-1:-1:-1;;;5579:63:29;;-1:-1:-1;;;;;2067:32:60;;;5579:63:29;;;2049:51:60;5579:38:29;;;;;;;5625:9;;2022:18:60;;5579:63:29;;;;;;;;;;;;;;;;;;;1644:143:44;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;1927:139::-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;4231:121::-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;4358:115::-:0;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;6702:132::-:0;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;9542:2:60;7422:83:50;;;9524:21:60;9581:2;9561:18;;;9554:30;9620:34;9600:18;;;9593:62;-1:-1:-1;;;9671:18:60;;;9664:45;9726:19;;7422:83:50;9340:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;9958:2:60;2624:67:49;;;9940:21:60;9997:2;9977:18;;;9970:30;-1:-1:-1;;;10016:18:60;;;10009:48;10074:18;;2624:67:49;9756:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;2189:111:29:-;2246:4;;2269:10;:8;:10::i;:::-;-1:-1:-1;;;;;2269:24:29;;;2262:31;;2189:111;:::o;2597:379::-;2708:2;2693:17;;2685:47;;;;-1:-1:-1;;;2685:47:29;;10990:2:60;2685:47:29;;;10972:21:60;11029:2;11009:18;;;11002:30;-1:-1:-1;;;11048:18:60;;;11041:47;11105:18;;2685:47:29;10788:341:60;2685:47:29;2743:17;;2781:36;;;;2792:4;2781:36;:::i;:::-;2742:75;;;;2835:22;:9;-1:-1:-1;;;;;2835:20:29;474::51;520:8;;;345:190;2835:22:29;2827:68;;;;-1:-1:-1;;;2827:68:29;;11745:2:60;2827:68:29;;;11727:21:60;11784:2;11764:18;;;11757:30;11823:34;11803:18;;;11796:62;-1:-1:-1;;;11874:18:60;;;11867:31;11915:19;;2827:68:29;11543:397:60;2827:68:29;-1:-1:-1;;;;;2913:18:29;;474:20:51;2905:64:29;;;;-1:-1:-1;;;2905:64:29;;12147:2:60;2905:64:29;;;12129:21:60;12186:2;12166:18;;;12159:30;12225:33;12205:18;;;12198:61;12276:18;;2905:64:29;11945:355:60;2905:64:29;2675:301;;2597:379;;:::o;1959:224::-;2042:17;;2080:36;;;;2091:4;2080:36;:::i;:::-;2041:75;;;;2126:22;2138:9;2126:11;:22::i;:::-;2158:18;2168:7;2158:9;:18::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;1384:114:29:-;1425:7;1451:40;1480:10;;;;;;;;;;;;;;;;;1451:28;:40::i;1260:118::-;1303:7;1329:42;1358:12;;;;;;;;;;;;;;;;;1329:28;:42::i;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;5911:116::-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;9216:228::-;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;1528:123:29:-;1587:57;1620:12;;;;;;;;;;;;;;;;;1634:9;1587:32;:57::i;1657:119::-;1714:55;1747:10;;;;;;;;;;;;;;;;;1759:9;1714:32;:55::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;12507:2:60;3037:144:53;;;12489:21:60;12546:2;12526:18;;;12519:30;12585:27;12565:18;;;12558:55;12630:18;;3037:144:53;12305:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;12861:2:60;3494:151:53;;;12843:21:60;12900:2;12880:18;;;12873:30;12939:34;12919:18;;;12912:62;-1:-1:-1;;;12990:18:60;;;12983:32;13032:19;;3494:151:53;12659:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;3268:212:52:-;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;3687:189:52:-;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;14375:2:60;3770:61:52;;;14357:21:60;14414:2;14394:18;;;14387:30;-1:-1:-1;;;14433:18:60;;;14426:41;14484:18;;3770:61:52;14173:335:60;3770:61:52;3841:28;3857:4;3863:5;3841:15;:28::i;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;14988:2:60;2000:55:59;;;14970:21:60;;;15007:18;;;15000:30;15066:34;15046:18;;;15039:62;15118:18;;2000:55:59;14786:356:60;2000:55:59;2079:6;1652:441;-1:-1:-1;;;1652:441:59:o;3486:195:52:-;3565:12;3607:4;3590:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3580:33;;;;;;3565:48;;3659:5;3653:4;3646:19;3632:43;3486:195;;:::o;8433:241:50:-;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:315::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;775:9;762:23;752:33;;835:2;824:9;820:18;807:32;848:31;873:5;848:31;:::i;:::-;898:5;888:15;;;594:315;;;;;:::o;914:591::-;984:6;992;1045:2;1033:9;1024:7;1020:23;1016:32;1013:52;;;1061:1;1058;1051:12;1013:52;1101:9;1088:23;1130:18;1171:2;1163:6;1160:14;1157:34;;;1187:1;1184;1177:12;1157:34;1225:6;1214:9;1210:22;1200:32;;1270:7;1263:4;1259:2;1255:13;1251:27;1241:55;;1292:1;1289;1282:12;1241:55;1332:2;1319:16;1358:2;1350:6;1347:14;1344:34;;;1374:1;1371;1364:12;1344:34;1419:7;1414:2;1405:6;1401:2;1397:15;1393:24;1390:37;1387:57;;;1440:1;1437;1430:12;1387:57;1471:2;1463:11;;;;;1493:6;;-1:-1:-1;914:591:60;;-1:-1:-1;;;;914:591:60:o;1510:388::-;1578:6;1586;1639:2;1627:9;1618:7;1614:23;1610:32;1607:52;;;1655:1;1652;1645:12;1607:52;1694:9;1681:23;1713:31;1738:5;1713:31;:::i;:::-;1763:5;-1:-1:-1;1820:2:60;1805:18;;1792:32;1833:33;1792:32;1833:33;:::i;2111:250::-;2196:1;2206:113;2220:6;2217:1;2214:13;2206:113;;;2296:11;;;2290:18;2277:11;;;2270:39;2242:2;2235:10;2206:113;;;-1:-1:-1;;2353:1:60;2335:16;;2328:27;2111:250::o;2366:396::-;2515:2;2504:9;2497:21;2478:4;2547:6;2541:13;2590:6;2585:2;2574:9;2570:18;2563:34;2606:79;2678:6;2673:2;2662:9;2658:18;2653:2;2645:6;2641:15;2606:79;:::i;:::-;2746:2;2725:15;-1:-1:-1;;2721:29:60;2706:45;;;;2753:2;2702:54;;2366:396;-1:-1:-1;;2366:396:60:o;2767:346::-;2969:2;2951:21;;;3008:2;2988:18;;;2981:30;-1:-1:-1;;;3042:2:60;3027:18;;3020:52;3104:2;3089:18;;2767:346::o;3830:127::-;3891:10;3886:3;3882:20;3879:1;3872:31;3922:4;3919:1;3912:15;3946:4;3943:1;3936:15;3962:168;4035:9;;;4066;;4083:15;;;4077:22;;4063:37;4053:71;;4104:18;;:::i;4135:125::-;4200:9;;;4221:10;;;4218:36;;;4234:18;;:::i;4613:331::-;4718:9;4729;4771:8;4759:10;4756:24;4753:44;;;4793:1;4790;4783:12;4753:44;4822:6;4812:8;4809:20;4806:40;;;4842:1;4839;4832:12;4806:40;-1:-1:-1;;4868:23:60;;;4913:25;;;;;-1:-1:-1;4613:331:60:o;5558:340::-;5760:2;5742:21;;;5799:2;5779:18;;;5772:30;-1:-1:-1;;;5833:2:60;5818:18;;5811:46;5889:2;5874:18;;5558:340::o;6621:138::-;6700:13;;6722:31;6700:13;6722:31;:::i;:::-;6621:138;;;:::o;6764:251::-;6834:6;6887:2;6875:9;6866:7;6862:23;6858:32;6855:52;;;6903:1;6900;6893:12;6855:52;6935:9;6929:16;6954:31;6979:5;6954:31;:::i;7367:127::-;7428:10;7423:3;7419:20;7416:1;7409:31;7459:4;7456:1;7449:15;7483:4;7480:1;7473:15;7499:1129;7594:6;7625:2;7668;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7717:9;7711:16;7746:18;7787:2;7779:6;7776:14;7773:34;;;7803:1;7800;7793:12;7773:34;7841:6;7830:9;7826:22;7816:32;;7886:7;7879:4;7875:2;7871:13;7867:27;7857:55;;7908:1;7905;7898:12;7857:55;7937:2;7931:9;7959:2;7955;7952:10;7949:36;;;7965:18;;:::i;:::-;8011:2;8008:1;8004:10;8043:2;8037:9;8106:2;8102:7;8097:2;8093;8089:11;8085:25;8077:6;8073:38;8161:6;8149:10;8146:22;8141:2;8129:10;8126:18;8123:46;8120:72;;;8172:18;;:::i;:::-;8208:2;8201:22;8258:18;;;8292:15;;;;-1:-1:-1;8334:11:60;;;8330:20;;;8362:19;;;8359:39;;;8394:1;8391;8384:12;8359:39;8418:11;;;;8438:159;8454:6;8449:3;8446:15;8438:159;;;8520:34;8550:3;8520:34;:::i;:::-;8508:47;;8471:12;;;;8575;;;;8438:159;;;8616:6;7499:1129;-1:-1:-1;;;;;;;;7499:1129:60:o;10103:388::-;10260:2;10249:9;10242:21;10299:6;10294:2;10283:9;10279:18;10272:34;10356:6;10348;10343:2;10332:9;10328:18;10315:48;10412:1;10383:22;;;10407:2;10379:31;;;10372:42;;;;10475:2;10454:15;;;-1:-1:-1;;10450:29:60;10435:45;10431:54;;10103:388;-1:-1:-1;10103:388:60:o;10496:287::-;10625:3;10663:6;10657:13;10679:66;10738:6;10733:3;10726:4;10718:6;10714:17;10679:66;:::i;:::-;10761:16;;;;;10496:287;-1:-1:-1;;10496:287:60:o;13356:812::-;13767:25;13762:3;13755:38;13737:3;13822:6;13816:13;13838:75;13906:6;13901:2;13896:3;13892:12;13885:4;13877:6;13873:17;13838:75;:::i;:::-;-1:-1:-1;;;13972:2:60;13932:16;;;13964:11;;;13957:40;14022:13;;14044:76;14022:13;14106:2;14098:11;;14091:4;14079:17;;14044:76;:::i;:::-;14140:17;14159:2;14136:26;;13356:812;-1:-1:-1;;;;13356:812:60:o;14513:127::-;14574:10;14569:3;14565:20;14562:1;14555:31;14605:4;14602:1;14595:15;14629:4;14626:1;14619:15;14645:136;14684:3;14712:5;14702:39;;14721:18;;:::i;:::-;-1:-1:-1;;;14757:18:60;;14645:136::o","linkReferences":{},"immutableReferences":{"47467":[{"start":1785,"length":32}],"47936":[{"start":1932,"length":32}]}},"methodIdentifiers":{"addExistingBridge(address,address)":"4ee165d6","blockToken(address)":"726176e8","deactivateToken(address)":"68173bcf","enrollTokenBridge(address)":"c1d220fe","getRegistry()":"5ab1bd53","identify()":"eeb72866","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isFrozen()":"33eeb147","isGovernanceAdmin(address)":"cb1cccce","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"ExistingBridgeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenBlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"TokenEnrolled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge_\",\"type\":\"address\"}],\"name\":\"addExistingBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"blockToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"deactivateToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enrollTokenBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockToken(address)\":{\"notice\":\"Block token from being bridged. A blocked token cannot be deployed. Note: Only an unserviced token can be blocked. In order to deactivate a serviced tokens see 'deactivateToken'.\"},\"deactivateToken(address)\":{\"notice\":\"Deactivates bridging of a specific token. A deactivated token is blocked for deposits and cannot be re-deployed. Note: Only serviced tokens can be deactivated. In order to block an unserviced tokens see 'blockToken'.\"},\"enrollTokenBridge(address)\":{\"notice\":\"Enrolls a token bridge for a specific token.\"},\"getRegistry()\":{\"notice\":\"Returns the address of the Starkgate Registry contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarkgateManager.sol\":\"StarkgateManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/IStarkgateBridge.sol\":{\"keccak256\":\"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004\",\"dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn\"]},\"src/solidity/IStarkgateManager.sol\":{\"keccak256\":\"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8\",\"dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT\"]},\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateManager.sol\":{\"keccak256\":\"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975\",\"dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"bridge","type":"address","indexed":true}],"type":"event","name":"ExistingBridgeAdded","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"TokenBlocked","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"TokenDeactivated","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"TokenEnrolled","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"addExistingBridge"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"blockToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deactivateToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"payable","type":"function","name":"enrollTokenBridge"},{"inputs":[],"stateMutability":"view","type":"function","name":"getRegistry","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"blockToken(address)":{"notice":"Block token from being bridged. A blocked token cannot be deployed. Note: Only an unserviced token can be blocked. In order to deactivate a serviced tokens see 'deactivateToken'."},"deactivateToken(address)":{"notice":"Deactivates bridging of a specific token. A deactivated token is blocked for deposits and cannot be re-deployed. Note: Only serviced tokens can be deactivated. In order to block an unserviced tokens see 'blockToken'."},"enrollTokenBridge(address)":{"notice":"Enrolls a token bridge for a specific token."},"getRegistry()":{"notice":"Returns the address of the Starkgate Registry contract."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/solidity/StarkgateManager.sol":"StarkgateManager"},"evmVersion":"paris","libraries":{}},"sources":{"src/solidity/IStarkgateBridge.sol":{"keccak256":"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878","urls":["bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004","dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn"],"license":"Apache-2.0."},"src/solidity/IStarkgateManager.sol":{"keccak256":"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c","urls":["bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8","dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT"],"license":"Apache-2.0."},"src/solidity/IStarkgateRegistry.sol":{"keccak256":"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2","urls":["bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172","dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7"],"license":"Apache-2.0."},"src/solidity/StarkgateConstants.sol":{"keccak256":"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642","urls":["bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c","dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx"],"license":"Apache-2.0."},"src/solidity/StarkgateManager.sol":{"keccak256":"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927","urls":["bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975","dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X"],"license":"Apache-2.0."},"starkware/solidity/components/Roles.sol":{"keccak256":"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf","urls":["bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3","dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv"],"license":"Apache-2.0."},"starkware/solidity/interfaces/BlockDirectCall.sol":{"keccak256":"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6","urls":["bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3","dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ContractInitializer.sol":{"keccak256":"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a","urls":["bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6","dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7"],"license":"Apache-2.0."},"starkware/solidity/interfaces/Identity.sol":{"keccak256":"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08","urls":["bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888","dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ProxySupport.sol":{"keccak256":"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a","urls":["bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6","dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4"],"license":"Apache-2.0."},"starkware/solidity/libraries/AccessControl.sol":{"keccak256":"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32","urls":["bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074","dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e"],"license":"MIT"},"starkware/solidity/libraries/Addresses.sol":{"keccak256":"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179","urls":["bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89","dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS"],"license":"Apache-2.0."},"starkware/solidity/libraries/NamedStorage.sol":{"keccak256":"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e","urls":["bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a","dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi"],"license":"Apache-2.0."},"starkware/solidity/libraries/RolesLib.sol":{"keccak256":"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0","urls":["bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb","dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL"],"license":"Apache-2.0."},"third_party/open_zeppelin/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"}},"version":1},"id":29} \ No newline at end of file diff --git a/crates/starkgate-manager-client/src/clients/mod.rs b/crates/starkgate-manager-client/src/clients/mod.rs new file mode 100644 index 0000000..64c5e79 --- /dev/null +++ b/crates/starkgate-manager-client/src/clients/mod.rs @@ -0,0 +1,2 @@ +pub mod starkgate_manager; +pub use starkgate_manager::*; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/clients/starkgate_manager.rs b/crates/starkgate-manager-client/src/clients/starkgate_manager.rs similarity index 86% rename from crates/starknet-core-contract-client/src/clients/starkgate_manager.rs rename to crates/starkgate-manager-client/src/clients/starkgate_manager.rs index ec503be..0678c0b 100644 --- a/crates/starknet-core-contract-client/src/clients/starkgate_manager.rs +++ b/crates/starkgate-manager-client/src/clients/starkgate_manager.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use crate::{interfaces::{ - StarkgateManager, ProxySupport -}, LocalWalletSignerMiddleware, StarknetContractClient}; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; +use crate::interfaces::manager::StarkgateManager; use ethers::types::Address; diff --git a/crates/starknet-core-contract-client/src/interfaces/manager.rs b/crates/starkgate-manager-client/src/interfaces/manager.rs similarity index 99% rename from crates/starknet-core-contract-client/src/interfaces/manager.rs rename to crates/starkgate-manager-client/src/interfaces/manager.rs index 534ac66..1bd35d8 100644 --- a/crates/starknet-core-contract-client/src/interfaces/manager.rs +++ b/crates/starkgate-manager-client/src/interfaces/manager.rs @@ -6,7 +6,7 @@ use ethers::{ types::{TransactionReceipt, H160, U256}, }; -use crate::Error; +use utils::errors::Error; type Address = H160; diff --git a/crates/starkgate-manager-client/src/interfaces/mod.rs b/crates/starkgate-manager-client/src/interfaces/mod.rs new file mode 100644 index 0000000..ddabadc --- /dev/null +++ b/crates/starkgate-manager-client/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod manager; \ No newline at end of file diff --git a/crates/starkgate-manager-client/src/lib.rs b/crates/starkgate-manager-client/src/lib.rs new file mode 100644 index 0000000..dae42cd --- /dev/null +++ b/crates/starkgate-manager-client/src/lib.rs @@ -0,0 +1,21 @@ +use std::sync::Arc; + +use clients::starkgate_manager::StarkgateManagerContractClient; +use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; +use utils::LocalWalletSignerMiddleware; +pub mod clients; +pub mod interfaces; + +const STARKGATE_MANAGER: &str = include_str!("./artifacts/StarkgateManager.json"); + +pub async fn deploy_starkgate_manager_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Starkgate Manager contract (no explicit constructor) + let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; + + Ok(StarkgateManagerContractClient::new( + manager_contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/starkgate-registry-client/Cargo.toml b/crates/starkgate-registry-client/Cargo.toml new file mode 100644 index 0000000..dfeac31 --- /dev/null +++ b/crates/starkgate-registry-client/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "starkgate-registry-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} diff --git a/crates/starkgate-registry-client/src/artifacts/StarkgateRegistry.json b/crates/starkgate-registry-client/src/artifacts/StarkgateRegistry.json new file mode 100644 index 0000000..7669df0 --- /dev/null +++ b/crates/starkgate-registry-client/src/artifacts/StarkgateRegistry.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"blockToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enlistToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"bridge","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getBridge","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawalBridges","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"bridges","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"identify","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"initialize","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isFrozen","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"selfRemove","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenEnlisted","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"bridge","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenSelfRemoved","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"bridge","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenStatusBlocked","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60c06040523480156200001157600080fd5b5030608052600160a0819052620000276200002e565b50620004f7565b336200003b81806200003e565b50565b620000486200019f565b15620000e1576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000db5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b620000ec565b620000ec82620001f3565b620000f66200033e565b1562000194576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001905760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000d2565b5050565b620001908162000390565b600080516020620024458339815191526000908152600080516020620024858339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200020e6000805160206200244583398151915282620003fc565b620002487ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068600080516020620024a58339815191526200049e565b62000272600080516020620024a5833981519152600080516020620024458339815191526200049e565b6200028d60008051602062002445833981519152806200049e565b620002c87f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7600080516020620024a58339815191526200049e565b620003037f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e600080516020620024a58339815191526200049e565b6200003b7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228600080516020620024458339815191526200049e565b600080516020620024658339815191526000908152600080516020620024858339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c24548190620001ec565b620003ab60008051602062002465833981519152806200049e565b620003e67f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96600080516020620024658339815191526200049e565b6200003b60008051602062002465833981519152825b600082815260008051602062002485833981519152602090815260408083206001600160a01b038516845290915290205460ff166200019057600082815260008051602062002485833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600080516020620024858339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a051611f286200051d6000396000610554015260006105e70152611f286000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063757bd9ab1161011a578063d08fb6cb116100ad578063ee0e68071161007c578063ee0e680714610428578063eeb728661461043b578063f44c7c8f14610450578063fa0f73ba1461047b578063fad8b32a1461048e57600080fd5b8063d08fb6cb146103dc578063d9fa7091146103ef578063deec9c5a14610402578063ed9ef16a1461041557600080fd5b8063a2bdde3d116100e9578063a2bdde3d14610390578063a3ecff8f146103a3578063cb1cccce146103b6578063cdd1f70d146103c957600080fd5b8063757bd9ab146103445780638101b64c146103575780638e5224ff1461036a5780639463629a1461037d57600080fd5b8063557133f6116101925780636c04d9d5116101615780636c04d9d5146102f85780636d70f7ae1461030b5780636fc97cbf1461031e578063726176e81461033157600080fd5b8063557133f61461029f5780635a5d1bb9146102bf57806362a14376146102d257806365650288146102e557600080fd5b806333eeb147116101ce57806333eeb1471461024e57806336568abe146102665780633682a45014610279578063439fab911461028c57600080fd5b80630b3a2d21146102005780630e770f231461021557806317896383146102285780632f9519851461023b575b600080fd5b61021361020e3660046119dc565b6104a1565b005b6102136102233660046119dc565b6104bc565b6102136102363660046119dc565b6104d4565b6102136102493660046119dc565b6104ec565b60005b60405190151581526020015b60405180910390f35b6102136102743660046119f9565b61053a565b6102136102873660046119dc565b6105cc565b61021361029a366004611a29565b6105e4565b6102b26102ad3660046119dc565b610795565b60405161025d9190611a9b565b6102516102cd3660046119dc565b610814565b6102136102e03660046119dc565b610834565b6102136102f33660046119dc565b61084c565b6102516103063660046119dc565b6109ef565b6102516103193660046119dc565b610a09565b61021361032c3660046119dc565b610a23565b61021361033f3660046119dc565b610a3b565b6102516103523660046119dc565b610ac7565b6102136103653660046119dc565b610ae1565b6102516103783660046119dc565b610b22565b61021361038b3660046119dc565b610b3c565b61025161039e3660046119dc565b610b54565b6102136103b1366004611ae8565b610b6e565b6102516103c43660046119dc565b610d8a565b6102136103d73660046119dc565b610da4565b6102516103ea3660046119dc565b610dbc565b6102136103fd3660046119dc565b610dd6565b6102136104103660046119dc565b610dee565b6102136104233660046119dc565b610e06565b6102136104363660046119dc565b610e1e565b610443610e5f565b60405161025d9190611b3a565b61046361045e3660046119dc565b610e7f565b6040516001600160a01b03909116815260200161025d565b6102136104893660046119dc565b610eac565b61021361049c3660046119dc565b610ec4565b6104b9600080516020611ed383398151915282610edc565b50565b6104b9600080516020611e0483398151915282610edc565b6104b9600080516020611e2483398151915282610edc565b80336001600160a01b0382160361051e5760405162461bcd60e51b815260040161051590611b6d565b60405180910390fd5b610536600080516020611e2483398151915283610ef8565b5050565b600080516020611d2d8339815191528214801561057557507f0000000000000000000000000000000000000000000000000000000000000000155b156105c25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610515565b6105368282610f14565b6104b9600080516020611eb383398151915282610edc565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106555760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610515565b6000610662816020611bb3565b90506000610671826020611bca565b9050808310156106b95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610515565b60006106c782848688611bdd565b8101906106d491906119dc565b90503660006106e58582888a611bdd565b915091503660006106f88887818c611bdd565b90925090506001600160a01b0385161561072257610717858383610f8e565b505050505050505050565b61072a6110d0565b156107795780156107745760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610515565b610717565b61078382826110eb565b61078d8282611196565b6107176111c8565b606061079f6111d3565b6001600160a01b038316600090815260209182526040908190208054825181850281018501909352808352919290919083018282801561080857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575b50505050509050919050565b600061082e600080516020611da4833981519152836111fb565b92915050565b6104b9600080516020611d4d83398151915282610edc565b33610855611233565b6001600160a01b03808416600090815260209290925260409091205416146108cb5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610515565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611c07565b156109805760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610515565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a30890600090a360006109c0611233565b6001600160a01b0392831660009081526020919091526040902080546001600160a01b03191691909216179055565b600061082e600080516020611dc4833981519152836111fb565b600061082e600080516020611eb3833981519152836111fb565b6104b9600080516020611dc483398151915282610edc565b33610a44611256565b6001600160a01b031614610a895760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a290600090a260016109c0611233565b600061082e600080516020611e04833981519152836111fb565b80336001600160a01b03821603610b0a5760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d4d83398151915283610ef8565b600061082e600080516020611e24833981519152836111fb565b6104b9600080516020611d2d83398151915282610edc565b600061082e600080516020611ed3833981519152836111fb565b33610b77611256565b6001600160a01b031614610bbc5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6000610bc6611233565b6001600160a01b038085166000908152602092909252604090912054169050801580610bfb57506001600160a01b0381166001145b610c405760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610515565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c89611233565b6001600160a01b038581166000908152602092909252604090912080546001600160a01b03191692909116919091179055610d39610cc56111d3565b6001600160a01b0385166000908152602091825260409081902080548251818502810185019093528083529192909190830182828015610d2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d10575b505050505083611279565b610d8557610d456111d3565b6001600160a01b038481166000908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b600061082e600080516020611d2d833981519152836111fb565b6104b9600080516020611da483398151915282610edc565b600061082e600080516020611d4d833981519152836111fb565b6104b9600080516020611e0483398151915282610ef8565b6104b9600080516020611da483398151915282610ef8565b6104b9600080516020611dc483398151915282610ef8565b80336001600160a01b03821603610e475760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d2d83398151915283610ef8565b6060604051806060016040528060218152602001611e4460219139905090565b6000610e89611233565b6001600160a01b0392831660009081526020919091526040902054909116919050565b6104b9600080516020611ed383398151915282610ef8565b6104b9600080516020611eb383398151915282610ef8565b610ee5826112d4565b610eee816112f6565b610d858383611300565b610f01826112d4565b610f0a816112f6565b610d858383611376565b6001600160a01b0381163314610f845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610515565b6105368282611376565b6001600160a01b0383163b610fda5760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610515565b600080846001600160a01b031663439fab9160e01b8585604051602401611002929190611c29565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110409190611c58565b600060405180830381855af49150503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b50915091508181906110a55760405162461bcd60e51b81526004016105159190611b3a565b5080518190156110c85760405162461bcd60e51b81526004016105159190611b3a565b505050505050565b6000806110db611256565b6001600160a01b03161415905090565b6020811461112f5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610515565b600061113d828401846119dc565b90506001600160a01b0381163b610d855760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610515565b60006111a4828401846119dc565b9050610d85604051806060016040528060238152602001611e9060239139826113ea565b336104b98180611443565b60006111f6604051806060016040528060378152602001611d6d60379139611547565b905090565b6000918252600080516020611de4833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006111f66040518060600160405280602b8152602001611e65602b9139611547565b60006111f6604051806060016040528060238152602001611e906023913961157a565b6000805b83518110156112ca57826001600160a01b03168482815181106112a2576112a2611c74565b60200260200101516001600160a01b0316036112c257600191505061082e565b60010161127d565b5060009392505050565b6000908152600080516020611de4833981519152602052604090206001015490565b6104b981336115ae565b61130a82826111fb565b610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61138082826111fb565b15610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006113f58361157a565b6001600160a01b0316146114395760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610515565b6105368282611612565b61144b611645565b156114b957611468600080516020611d2d833981519152836111fb565b6114b45760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610515565b6114c2565b6114c282611666565b6114ca611754565b1561153e576114e7600080516020611d4d833981519152826111fb565b6105365760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610515565b6105368161176e565b6000808260405160200161155b9190611c58565b60408051601f1981840301815291905280516020909101209392505050565b6000808260405160200161158e9190611c58565b60408051601f198184030181529190528051602090910120549392505050565b6115b882826111fb565b610536576115d0816001600160a01b031660146117c4565b6115db8360206117c4565b6040516020016115ec929190611c8a565b60408051601f198184030181529082905262461bcd60e51b825261051591600401611b3a565b6000826040516020016116259190611c58565b604051602081830303815290604052805190602001209050818155505050565b60008061165f600080516020611d2d8339815191526112d4565b1415905090565b61167e600080516020611d2d83398151915282611300565b6116a4600080516020611da4833981519152600080516020611e24833981519152611967565b6116ca600080516020611e24833981519152600080516020611d2d833981519152611967565b6116e2600080516020611d2d83398151915280611967565b611708600080516020611eb3833981519152600080516020611e24833981519152611967565b61172e600080516020611ed3833981519152600080516020611e24833981519152611967565b6104b9600080516020611dc4833981519152600080516020611d2d833981519152611967565b60008061165f600080516020611d4d8339815191526112d4565b611786600080516020611d4d83398151915280611967565b6117ac600080516020611e04833981519152600080516020611d4d833981519152611967565b6104b9600080516020611d4d83398151915282611300565b606060006117d3836002611bb3565b6117de906002611bca565b67ffffffffffffffff8111156117f6576117f6611cff565b6040519080825280601f01601f191660200182016040528015611820576020820181803683370190505b509050600360fc1b8160008151811061183b5761183b611c74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061186a5761186a611c74565b60200101906001600160f81b031916908160001a905350600061188e846002611bb3565b611899906001611bca565b90505b6001811115611911576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118cd576118cd611c74565b1a60f81b8282815181106118e3576118e3611c74565b60200101906001600160f81b031916908160001a90535060049490941c9361190a81611d15565b905061189c565b5083156119605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610515565b9392505050565b6000611972836112d4565b6000848152600080516020611de48339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104b957600080fd5b6000602082840312156119ee57600080fd5b8135611960816119c7565b60008060408385031215611a0c57600080fd5b823591506020830135611a1e816119c7565b809150509250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff80821115611a5457600080fd5b818501915085601f830112611a6857600080fd5b813581811115611a7757600080fd5b866020828501011115611a8957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015611adc5783516001600160a01b031683529284019291840191600101611ab7565b50909695505050505050565b60008060408385031215611afb57600080fd5b8235611b06816119c7565b91506020830135611a1e816119c7565b60005b83811015611b31578181015183820152602001611b19565b50506000910152565b6020815260008251806020840152611b59816040850160208701611b16565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082e5761082e611b9d565b8082018082111561082e5761082e611b9d565b60008085851115611bed57600080fd5b83861115611bfa57600080fd5b5050820193919092039150565b600060208284031215611c1957600080fd5b8151801515811461196057600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251611c6a818460208701611b16565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611cc2816017850160208801611b16565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cf3816028840160208801611b16565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600081611d2457611d24611b9d565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212201c915e23942801f08009e20abe4df8c33135e94c07eb138deeb652be137d340b64736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99","sourceMap":"423:4745:30:-:0;;;;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;423:4745:30;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;423:4745:30;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063757bd9ab1161011a578063d08fb6cb116100ad578063ee0e68071161007c578063ee0e680714610428578063eeb728661461043b578063f44c7c8f14610450578063fa0f73ba1461047b578063fad8b32a1461048e57600080fd5b8063d08fb6cb146103dc578063d9fa7091146103ef578063deec9c5a14610402578063ed9ef16a1461041557600080fd5b8063a2bdde3d116100e9578063a2bdde3d14610390578063a3ecff8f146103a3578063cb1cccce146103b6578063cdd1f70d146103c957600080fd5b8063757bd9ab146103445780638101b64c146103575780638e5224ff1461036a5780639463629a1461037d57600080fd5b8063557133f6116101925780636c04d9d5116101615780636c04d9d5146102f85780636d70f7ae1461030b5780636fc97cbf1461031e578063726176e81461033157600080fd5b8063557133f61461029f5780635a5d1bb9146102bf57806362a14376146102d257806365650288146102e557600080fd5b806333eeb147116101ce57806333eeb1471461024e57806336568abe146102665780633682a45014610279578063439fab911461028c57600080fd5b80630b3a2d21146102005780630e770f231461021557806317896383146102285780632f9519851461023b575b600080fd5b61021361020e3660046119dc565b6104a1565b005b6102136102233660046119dc565b6104bc565b6102136102363660046119dc565b6104d4565b6102136102493660046119dc565b6104ec565b60005b60405190151581526020015b60405180910390f35b6102136102743660046119f9565b61053a565b6102136102873660046119dc565b6105cc565b61021361029a366004611a29565b6105e4565b6102b26102ad3660046119dc565b610795565b60405161025d9190611a9b565b6102516102cd3660046119dc565b610814565b6102136102e03660046119dc565b610834565b6102136102f33660046119dc565b61084c565b6102516103063660046119dc565b6109ef565b6102516103193660046119dc565b610a09565b61021361032c3660046119dc565b610a23565b61021361033f3660046119dc565b610a3b565b6102516103523660046119dc565b610ac7565b6102136103653660046119dc565b610ae1565b6102516103783660046119dc565b610b22565b61021361038b3660046119dc565b610b3c565b61025161039e3660046119dc565b610b54565b6102136103b1366004611ae8565b610b6e565b6102516103c43660046119dc565b610d8a565b6102136103d73660046119dc565b610da4565b6102516103ea3660046119dc565b610dbc565b6102136103fd3660046119dc565b610dd6565b6102136104103660046119dc565b610dee565b6102136104233660046119dc565b610e06565b6102136104363660046119dc565b610e1e565b610443610e5f565b60405161025d9190611b3a565b61046361045e3660046119dc565b610e7f565b6040516001600160a01b03909116815260200161025d565b6102136104893660046119dc565b610eac565b61021361049c3660046119dc565b610ec4565b6104b9600080516020611ed383398151915282610edc565b50565b6104b9600080516020611e0483398151915282610edc565b6104b9600080516020611e2483398151915282610edc565b80336001600160a01b0382160361051e5760405162461bcd60e51b815260040161051590611b6d565b60405180910390fd5b610536600080516020611e2483398151915283610ef8565b5050565b600080516020611d2d8339815191528214801561057557507f0000000000000000000000000000000000000000000000000000000000000000155b156105c25760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610515565b6105368282610f14565b6104b9600080516020611eb383398151915282610edc565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036106555760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b6044820152606401610515565b6000610662816020611bb3565b90506000610671826020611bca565b9050808310156106b95760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b6044820152606401610515565b60006106c782848688611bdd565b8101906106d491906119dc565b90503660006106e58582888a611bdd565b915091503660006106f88887818c611bdd565b90925090506001600160a01b0385161561072257610717858383610f8e565b505050505050505050565b61072a6110d0565b156107795780156107745760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b6044820152606401610515565b610717565b61078382826110eb565b61078d8282611196565b6107176111c8565b606061079f6111d3565b6001600160a01b038316600090815260209182526040908190208054825181850281018501909352808352919290919083018282801561080857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575b50505050509050919050565b600061082e600080516020611da4833981519152836111fb565b92915050565b6104b9600080516020611d4d83398151915282610edc565b33610855611233565b6001600160a01b03808416600090815260209290925260409091205416146108cb5760405162461bcd60e51b815260206004820152602360248201527f4252494447455f4d49534d415443485f43414e4e4f545f52454d4f56455f544f60448201526225a2a760e91b6064820152608401610515565b60405163031be19960e21b81526001600160a01b03821660048201523390630c6f866490602401602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611c07565b156109805760405162461bcd60e51b815260206004820152601760248201527f544f4b454e5f49535f5354494c4c5f53455256494345440000000000000000006044820152606401610515565b60405133906001600160a01b038316907f0d8ce137b708fa1f68a42ceb628ec64227e0381c4ecfd1c920804fa9e718a30890600090a360006109c0611233565b6001600160a01b0392831660009081526020919091526040902080546001600160a01b03191691909216179055565b600061082e600080516020611dc4833981519152836111fb565b600061082e600080516020611eb3833981519152836111fb565b6104b9600080516020611dc483398151915282610edc565b33610a44611256565b6001600160a01b031614610a895760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6040516001600160a01b038216907f8f41c4654c849cdf55aec592405d4ed6fcad4c16895633c4e8ff23bb4ebdd2a290600090a260016109c0611233565b600061082e600080516020611e04833981519152836111fb565b80336001600160a01b03821603610b0a5760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d4d83398151915283610ef8565b600061082e600080516020611e24833981519152836111fb565b6104b9600080516020611d2d83398151915282610edc565b600061082e600080516020611ed3833981519152836111fb565b33610b77611256565b6001600160a01b031614610bbc5760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b6044820152606401610515565b6000610bc6611233565b6001600160a01b038085166000908152602092909252604090912054169050801580610bfb57506001600160a01b0381166001145b610c405760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b6044820152606401610515565b816001600160a01b0316836001600160a01b03167f169097aa60be141cd725083125ddf0d1330273f15ba137cf74914d24b4c6d36260405160405180910390a381610c89611233565b6001600160a01b038581166000908152602092909252604090912080546001600160a01b03191692909116919091179055610d39610cc56111d3565b6001600160a01b0385166000908152602091825260409081902080548251818502810185019093528083529192909190830182828015610d2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d10575b505050505083611279565b610d8557610d456111d3565b6001600160a01b038481166000908152602092835260408120805460018101825590825292902090910180546001600160a01b0319169184169190911790555b505050565b600061082e600080516020611d2d833981519152836111fb565b6104b9600080516020611da483398151915282610edc565b600061082e600080516020611d4d833981519152836111fb565b6104b9600080516020611e0483398151915282610ef8565b6104b9600080516020611da483398151915282610ef8565b6104b9600080516020611dc483398151915282610ef8565b80336001600160a01b03821603610e475760405162461bcd60e51b815260040161051590611b6d565b610536600080516020611d2d83398151915283610ef8565b6060604051806060016040528060218152602001611e4460219139905090565b6000610e89611233565b6001600160a01b0392831660009081526020919091526040902054909116919050565b6104b9600080516020611ed383398151915282610ef8565b6104b9600080516020611eb383398151915282610ef8565b610ee5826112d4565b610eee816112f6565b610d858383611300565b610f01826112d4565b610f0a816112f6565b610d858383611376565b6001600160a01b0381163314610f845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610515565b6105368282611376565b6001600160a01b0383163b610fda5760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b6044820152606401610515565b600080846001600160a01b031663439fab9160e01b8585604051602401611002929190611c29565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110409190611c58565b600060405180830381855af49150503d806000811461107b576040519150601f19603f3d011682016040523d82523d6000602084013e611080565b606091505b50915091508181906110a55760405162461bcd60e51b81526004016105159190611b3a565b5080518190156110c85760405162461bcd60e51b81526004016105159190611b3a565b505050505050565b6000806110db611256565b6001600160a01b03161415905090565b6020811461112f5760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b6044820152606401610515565b600061113d828401846119dc565b90506001600160a01b0381163b610d855760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f414444524553536044820152606401610515565b60006111a4828401846119dc565b9050610d85604051806060016040528060238152602001611e9060239139826113ea565b336104b98180611443565b60006111f6604051806060016040528060378152602001611d6d60379139611547565b905090565b6000918252600080516020611de4833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006111f66040518060600160405280602b8152602001611e65602b9139611547565b60006111f6604051806060016040528060238152602001611e906023913961157a565b6000805b83518110156112ca57826001600160a01b03168482815181106112a2576112a2611c74565b60200260200101516001600160a01b0316036112c257600191505061082e565b60010161127d565b5060009392505050565b6000908152600080516020611de4833981519152602052604090206001015490565b6104b981336115ae565b61130a82826111fb565b610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61138082826111fb565b15610536576000828152600080516020611de4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006113f58361157a565b6001600160a01b0316146114395760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b6044820152606401610515565b6105368282611612565b61144b611645565b156114b957611468600080516020611d2d833981519152836111fb565b6114b45760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a4544000000000000006044820152606401610515565b6114c2565b6114c282611666565b6114ca611754565b1561153e576114e7600080516020611d4d833981519152826111fb565b6105365760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401610515565b6105368161176e565b6000808260405160200161155b9190611c58565b60408051601f1981840301815291905280516020909101209392505050565b6000808260405160200161158e9190611c58565b60408051601f198184030181529190528051602090910120549392505050565b6115b882826111fb565b610536576115d0816001600160a01b031660146117c4565b6115db8360206117c4565b6040516020016115ec929190611c8a565b60408051601f198184030181529082905262461bcd60e51b825261051591600401611b3a565b6000826040516020016116259190611c58565b604051602081830303815290604052805190602001209050818155505050565b60008061165f600080516020611d2d8339815191526112d4565b1415905090565b61167e600080516020611d2d83398151915282611300565b6116a4600080516020611da4833981519152600080516020611e24833981519152611967565b6116ca600080516020611e24833981519152600080516020611d2d833981519152611967565b6116e2600080516020611d2d83398151915280611967565b611708600080516020611eb3833981519152600080516020611e24833981519152611967565b61172e600080516020611ed3833981519152600080516020611e24833981519152611967565b6104b9600080516020611dc4833981519152600080516020611d2d833981519152611967565b60008061165f600080516020611d4d8339815191526112d4565b611786600080516020611d4d83398151915280611967565b6117ac600080516020611e04833981519152600080516020611d4d833981519152611967565b6104b9600080516020611d4d83398151915282611300565b606060006117d3836002611bb3565b6117de906002611bca565b67ffffffffffffffff8111156117f6576117f6611cff565b6040519080825280601f01601f191660200182016040528015611820576020820181803683370190505b509050600360fc1b8160008151811061183b5761183b611c74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061186a5761186a611c74565b60200101906001600160f81b031916908160001a905350600061188e846002611bb3565b611899906001611bca565b90505b6001811115611911576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118cd576118cd611c74565b1a60f81b8282815181106118e3576118e3611c74565b60200101906001600160f81b031916908160001a90535060049490941c9361190a81611d15565b905061189c565b5083156119605760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610515565b9392505050565b6000611972836112d4565b6000848152600080516020611de48339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b03811681146104b957600080fd5b6000602082840312156119ee57600080fd5b8135611960816119c7565b60008060408385031215611a0c57600080fd5b823591506020830135611a1e816119c7565b809150509250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff80821115611a5457600080fd5b818501915085601f830112611a6857600080fd5b813581811115611a7757600080fd5b866020828501011115611a8957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015611adc5783516001600160a01b031683529284019291840191600101611ab7565b50909695505050505050565b60008060408385031215611afb57600080fd5b8235611b06816119c7565b91506020830135611a1e816119c7565b60005b83811015611b31578181015183820152602001611b19565b50506000910152565b6020815260008251806020840152611b59816040850160208701611b16565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082e5761082e611b9d565b8082018082111561082e5761082e611b9d565b60008085851115611bed57600080fd5b83861115611bfa57600080fd5b5050820193919092039150565b600060208284031215611c1957600080fd5b8151801515811461196057600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251611c6a818460208701611b16565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611cc2816017850160208801611b16565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cf3816028840160208801611b16565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600081611d2457611d24611b9d565b50600019019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3535441524b474154455f52454749535452595f544f4b454e5f544f5f5749544844524157414c5f425249444745535f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99537461726b576172655f537461726b6761746552656769737472795f322e305f31535441524b474154455f52454749535452595f544f4b454e5f544f5f4252494447455f534c4f545f544147535441524b474154455f52454749535452595f4d414e414745525f534c4f545f544147023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212201c915e23942801f08009e20abe4df8c33135e94c07eb138deeb652be137d340b64736f6c63430008170033","sourceMap":"423:4745:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;:::i;:::-;;:::i;:::-;;3155:122;;;;;;:::i;:::-;;:::i;2651:121::-;;;;;;:::i;:::-;;:::i;3680:137::-;;;;;;:::i;:::-;;:::i;757:86:49:-;808:4;757:86;;;567:14:60;;560:22;542:41;;530:2;515:18;757:86:49;;;;;;;;4632:247:44;;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;:::i;:::-;;:::i;4161:151:30:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1359:135:44:-;;;;;;:::i;:::-;;:::i;3027:122::-;;;;;;:::i;:::-;;:::i;4511:342:30:-;;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;:::i;:::-;;:::i;4004:151:30:-;;;;;;:::i;:::-;;:::i;2072:139:44:-;;;;;;:::i;:::-;;:::i;4087:138::-;;;;;;:::i;:::-;;:::i;1500:::-;;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;:::i;:::-;;:::i;3373:505:30:-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;:::i;:::-;;:::i;1927:139::-;;;;;;:::i;:::-;;:::i;4231:121::-;;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;:::i;:::-;;:::i;2071:126:30:-;;;:::i;:::-;;;;;;;:::i;3142:112::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3386:32:60;;;3368:51;;3356:2;3341:18;3142:112:30;3222:203:60;4358:115:44;;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;3155:122::-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;2651:121::-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;3680:137::-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;;;;;;;;;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;3983:2:60;4769:42:44;;;3965:21:60;;;4002:18;;;3995:30;4061:34;4041:18;;;4034:62;4113:18;;4769:42:44;3781:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;4344:2:60;536:57:45;;;4326:21:60;4383:2;4363:18;;;4356:30;-1:-1:-1;;;4402:18:60;;;4395:52;4464:18;;536:57:45;4142:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;5130:2:60;1648:63:49::1;::::0;::::1;5112:21:60::0;5169:2;5149:18;;;5142:30;-1:-1:-1;;;5188:18:60;;;5181:49;5247:18;;1648:63:49::1;4928:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;6074:2:60;2240:53:49::1;::::0;::::1;6056:21:60::0;6113:2;6093:18;;;6086:30;-1:-1:-1;;;6132:18:60;;;6125:50;6192:18;;2240:53:49::1;5872:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;4161:151:30:-:0;4229:24;4272:26;:24;:26::i;:::-;-1:-1:-1;;;;;4272:33:30;;;;;;;;;;;;;;;4265:40;;;;;;;;;;;;;;;;;;;4272:33;;4265:40;;;4272:33;4265:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4265:40:30;;;;;;;;;;;;;;;;;;;;;;;4161:151;;;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;:::-;1436:51;1359:135;-1:-1:-1;;1359:135:44:o;3027:122::-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;4511:342:30:-;4599:10;4573:15;:13;:15::i;:::-;-1:-1:-1;;;;;4573:22:30;;;;;;;;;;;;;;;;;;:36;4565:84;;;;-1:-1:-1;;;4565:84:30;;6423:2:60;4565:84:30;;;6405:21:60;6462:2;6442:18;;;6435:30;6501:34;6481:18;;;6474:62;-1:-1:-1;;;6552:18:60;;;6545:33;6595:19;;4565:84:30;6221:399:60;4565:84:30;4668:53;;-1:-1:-1;;;4668:53:30;;-1:-1:-1;;;;;3386:32:60;;4668:53:30;;;3368:51:60;4686:10:30;;4668:46;;3341:18:60;;4668:53:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4667:54;4659:90;;;;-1:-1:-1;;;4659:90:30;;7109:2:60;4659:90:30;;;7091:21:60;7148:2;7128:18;;;7121:30;7187:25;7167:18;;;7160:53;7230:18;;4659:90:30;6907:347:60;4659:90:30;4764:35;;4788:10;;-1:-1:-1;;;;;4764:35:30;;;;;;;;4842:3;4809:15;:13;:15::i;:::-;-1:-1:-1;;;;;4809:22:30;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;;;;4809:37:30;;;;;;;;4511:342::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;4004:151:30:-;2020:10;2007:9;:7;:9::i;:::-;-1:-1:-1;;;;;2007:23:30;;1999:48;;;;-1:-1:-1;;;1999:48:30;;7461:2:60;1999:48:30;;;7443:21:60;7500:2;7480:18;;;7473:30;-1:-1:-1;;;7519:18:60;;;7512:42;7571:18;;1999:48:30;7259:336:60;1999:48:30;4075:25:::1;::::0;-1:-1:-1;;;;;4075:25:30;::::1;::::0;::::1;::::0;;;::::1;858:3:28;4110:15:30;:13;:15::i;2072:139:44:-:0;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;4087:138::-;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;3373:505:30:-;2020:10;2007:9;:7;:9::i;:::-;-1:-1:-1;;;;;2007:23:30;;1999:48;;;;-1:-1:-1;;;1999:48:30;;7461:2:60;1999:48:30;;;7443:21:60;7500:2;7480:18;;;7473:30;-1:-1:-1;;;7519:18:60;;;7512:42;7571:18;;1999:48:30;7259:336:60;1999:48:30;3456:21:::1;3480:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;3480:22:30;;::::1;;::::0;;;::::1;::::0;;;;;;;;;::::1;::::0;-1:-1:-1;3533:27:30;;;:61:::1;;-1:-1:-1::0;;;;;;3564:30:30;::::1;858:3:28;3564:30:30;3533:61;3512:130;;;::::0;-1:-1:-1;;;3512:130:30;;7802:2:60;3512:130:30::1;::::0;::::1;7784:21:60::0;7841:2;7821:18;;;7814:30;-1:-1:-1;;;7860:18:60;;;7853:52;7922:18;;3512:130:30::1;7600:346:60::0;3512:130:30::1;3678:6;-1:-1:-1::0;;;;;3657:28:30::1;3671:5;-1:-1:-1::0;;;;;3657:28:30::1;;;;;;;;;;;3720:6;3695:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;3695:22:30;;::::1;;::::0;;;::::1;::::0;;;;;;;;:31;;-1:-1:-1;;;;;;3695:31:30::1;::::0;;;::::1;::::0;;;::::1;::::0;;3741:58:::1;3757:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;3757:33:30;::::1;;::::0;;;::::1;::::0;;;;;;;;3741:58;;;;;;::::1;::::0;;;;;;;;;;;;3757:33;;3741:58;;::::1;3757:33:::0;3741:58;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;3741:58:30::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;3792:6;3741:15;:58::i;:::-;3736:136;;3815:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;3815:33:30;;::::1;;::::0;;;::::1;::::0;;;;;;:46;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;3815:46:30::1;::::0;;::::1;::::0;;;::::1;::::0;;3736:136:::1;3446:432;3373:505:::0;;:::o;1644:143:44:-;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;1927:139::-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;4231:121::-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;2071:126:30:-:0;2123:13;2148:42;;;;;;;;;;;;;;;;;;;2071:126;:::o;3142:112::-;3199:7;3225:15;:13;:15::i;:::-;-1:-1:-1;;;;;3225:22:30;;;;;;;;;;;;;;;;;;;;3142:112;-1:-1:-1;3142:112:30:o;4358:115:44:-;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;6702:132::-:0;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;8153:2:60;7422:83:50;;;8135:21:60;8192:2;8172:18;;;8165:30;8231:34;8211:18;;;8204:62;-1:-1:-1;;;8282:18:60;;;8275:45;8337:19;;7422:83:50;7951:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;8569:2:60;2624:67:49;;;8551:21:60;8608:2;8588:18;;;8581:30;-1:-1:-1;;;8627:18:60;;;8620:48;8685:18;;2624:67:49;8367:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;2455:110:30:-;2512:4;;2535:9;:7;:9::i;:::-;-1:-1:-1;;;;;2535:23:30;;;2528:30;;2455:110;:::o;2862:274::-;2973:2;2958:17;;2950:47;;;;-1:-1:-1;;;2950:47:30;;9601:2:60;2950:47:30;;;9583:21:60;9640:2;9620:18;;;9613:30;-1:-1:-1;;;9659:18:60;;;9652:47;9716:18;;2950:47:30;9399:341:60;2950:47:30;3007:16;3026:27;;;;3037:4;3026:27;:::i;:::-;3007:46;-1:-1:-1;;;;;;3071:19:30;;474:20:51;3063:66:30;;;;-1:-1:-1;;;3063:66:30;;9947:2:60;3063:66:30;;;9929:21:60;;;9966:18;;;9959:30;10025:34;10005:18;;;9998:62;10077:18;;3063:66:30;9745:356:60;2249:200:30;2331:16;2350:27;;;;2361:4;2350:27;:::i;:::-;2331:46;;2387:55;2420:11;;;;;;;;;;;;;;;;;2433:8;2387:32;:55::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;1737:223:30:-;1820:37;1880:73;1921:31;;;;;;;;;;;;;;;;;1880:40;:73::i;:::-;1873:80;;1737:223;:::o;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;1389:166:30:-;1437:35;1491:57;1528:19;;;;;;;;;;;;;;;;;1491:36;:57::i;1102:116::-;1144:7;1170:41;1199:11;;;;;;;;;;;;;;;;;1170:28;:41::i;4859:307::-;4975:4;;4995:143;5019:9;:16;5015:1;:20;4995:143;;;5076:6;-1:-1:-1;;;;;5060:22:30;:9;5070:1;5060:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5060:22:30;;5056:72;;5109:4;5102:11;;;;;5056:72;5037:3;;4995:143;;;-1:-1:-1;5154:5:30;;4859:307;-1:-1:-1;;;4859:307:30:o;5911:116:50:-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;9216:228::-;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;3687:189:52:-;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;10440:2:60;3770:61:52;;;10422:21:60;10479:2;10459:18;;;10452:30;-1:-1:-1;;;10498:18:60;;;10491:41;10549:18;;3770:61:52;10238:335:60;3770:61:52;3841:28;3857:4;3863:5;3841:15;:28::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;10780:2:60;3037:144:53;;;10762:21:60;10819:2;10799:18;;;10792:30;10858:27;10838:18;;;10831:55;10903:18;;3037:144:53;10578:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;11134:2:60;3494:151:53;;;11116:21:60;11173:2;11153:18;;;11146:30;11212:34;11192:18;;;11185:62;-1:-1:-1;;;11263:18:60;;;11256:32;11305:19;;3494:151:53;10932:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;2072:304:52:-;2176:52;2244:16;2290:4;2273:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2273:22:52;;;;;;;;;2263:33;;2273:22;2263:33;;;;;2072:304;-1:-1:-1;;;2072:304:52:o;3268:212::-;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;3486:195:52:-;3565:12;3607:4;3590:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3580:33;;;;;;3565:48;;3659:5;3653:4;3646:19;3632:43;3486:195;;:::o;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;12921:2:60;2000:55:59;;;12903:21:60;;;12940:18;;;12933:30;12999:34;12979:18;;;12972:62;13051:18;;2000:55:59;12719:356:60;2000:55:59;2079:6;1652:441;-1:-1:-1;;;1652:441:59:o;8433:241:50:-;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:315::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;775:9;762:23;752:33;;835:2;824:9;820:18;807:32;848:31;873:5;848:31;:::i;:::-;898:5;888:15;;;594:315;;;;;:::o;914:591::-;984:6;992;1045:2;1033:9;1024:7;1020:23;1016:32;1013:52;;;1061:1;1058;1051:12;1013:52;1101:9;1088:23;1130:18;1171:2;1163:6;1160:14;1157:34;;;1187:1;1184;1177:12;1157:34;1225:6;1214:9;1210:22;1200:32;;1270:7;1263:4;1259:2;1255:13;1251:27;1241:55;;1292:1;1289;1282:12;1241:55;1332:2;1319:16;1358:2;1350:6;1347:14;1344:34;;;1374:1;1371;1364:12;1344:34;1419:7;1414:2;1405:6;1401:2;1397:15;1393:24;1390:37;1387:57;;;1440:1;1437;1430:12;1387:57;1471:2;1463:11;;;;;1493:6;;-1:-1:-1;914:591:60;;-1:-1:-1;;;;914:591:60:o;1510:658::-;1681:2;1733:21;;;1803:13;;1706:18;;;1825:22;;;1652:4;;1681:2;1904:15;;;;1878:2;1863:18;;;1652:4;1947:195;1961:6;1958:1;1955:13;1947:195;;;2026:13;;-1:-1:-1;;;;;2022:39:60;2010:52;;2117:15;;;;2082:12;;;;2058:1;1976:9;1947:195;;;-1:-1:-1;2159:3:60;;1510:658;-1:-1:-1;;;;;;1510:658:60:o;2173:388::-;2241:6;2249;2302:2;2290:9;2281:7;2277:23;2273:32;2270:52;;;2318:1;2315;2308:12;2270:52;2357:9;2344:23;2376:31;2401:5;2376:31;:::i;:::-;2426:5;-1:-1:-1;2483:2:60;2468:18;;2455:32;2496:33;2455:32;2496:33;:::i;2566:250::-;2651:1;2661:113;2675:6;2672:1;2669:13;2661:113;;;2751:11;;;2745:18;2732:11;;;2725:39;2697:2;2690:10;2661:113;;;-1:-1:-1;;2808:1:60;2790:16;;2783:27;2566:250::o;2821:396::-;2970:2;2959:9;2952:21;2933:4;3002:6;2996:13;3045:6;3040:2;3029:9;3025:18;3018:34;3061:79;3133:6;3128:2;3117:9;3113:18;3108:2;3100:6;3096:15;3061:79;:::i;:::-;3201:2;3180:15;-1:-1:-1;;3176:29:60;3161:45;;;;3208:2;3157:54;;2821:396;-1:-1:-1;;2821:396:60:o;3430:346::-;3632:2;3614:21;;;3671:2;3651:18;;;3644:30;-1:-1:-1;;;3705:2:60;3690:18;;3683:52;3767:2;3752:18;;3430:346::o;4493:127::-;4554:10;4549:3;4545:20;4542:1;4535:31;4585:4;4582:1;4575:15;4609:4;4606:1;4599:15;4625:168;4698:9;;;4729;;4746:15;;;4740:22;;4726:37;4716:71;;4767:18;;:::i;4798:125::-;4863:9;;;4884:10;;;4881:36;;;4897:18;;:::i;5276:331::-;5381:9;5392;5434:8;5422:10;5419:24;5416:44;;;5456:1;5453;5446:12;5416:44;5485:6;5475:8;5472:20;5469:40;;;5505:1;5502;5495:12;5469:40;-1:-1:-1;;5531:23:60;;;5576:25;;;;;-1:-1:-1;5276:331:60:o;6625:277::-;6692:6;6745:2;6733:9;6724:7;6720:23;6716:32;6713:52;;;6761:1;6758;6751:12;6713:52;6793:9;6787:16;6846:5;6839:13;6832:21;6825:5;6822:32;6812:60;;6868:1;6865;6858:12;8714:388;8871:2;8860:9;8853:21;8910:6;8905:2;8894:9;8890:18;8883:34;8967:6;8959;8954:2;8943:9;8939:18;8926:48;9023:1;8994:22;;;9018:2;8990:31;;;8983:42;;;;9086:2;9065:15;;;-1:-1:-1;;9061:29:60;9046:45;9042:54;;8714:388;-1:-1:-1;8714:388:60:o;9107:287::-;9236:3;9274:6;9268:13;9290:66;9349:6;9344:3;9337:4;9329:6;9325:17;9290:66;:::i;:::-;9372:16;;;;;9107:287;-1:-1:-1;;9107:287:60:o;10106:127::-;10167:10;10162:3;10158:20;10155:1;10148:31;10198:4;10195:1;10188:15;10222:4;10219:1;10212:15;11629:812;12040:25;12035:3;12028:38;12010:3;12095:6;12089:13;12111:75;12179:6;12174:2;12169:3;12165:12;12158:4;12150:6;12146:17;12111:75;:::i;:::-;-1:-1:-1;;;12245:2:60;12205:16;;;12237:11;;;12230:40;12295:13;;12317:76;12295:13;12379:2;12371:11;;12364:4;12352:17;;12317:76;:::i;:::-;12413:17;12432:2;12409:26;;11629:812;-1:-1:-1;;;;11629:812:60:o;12446:127::-;12507:10;12502:3;12498:20;12495:1;12488:31;12538:4;12535:1;12528:15;12562:4;12559:1;12552:15;12578:136;12617:3;12645:5;12635:39;;12654:18;;:::i;:::-;-1:-1:-1;;;12690:18:60;;12578:136::o","linkReferences":{},"immutableReferences":{"47467":[{"start":1364,"length":32}],"47936":[{"start":1511,"length":32}]}},"methodIdentifiers":{"blockToken(address)":"726176e8","enlistToken(address,address)":"a3ecff8f","getBridge(address)":"f44c7c8f","getWithdrawalBridges(address)":"557133f6","identify()":"eeb72866","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isFrozen()":"33eeb147","isGovernanceAdmin(address)":"cb1cccce","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","selfRemove(address)":"65650288"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"TokenEnlisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"TokenSelfRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenStatusBlocked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"blockToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"enlistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getWithdrawalBridges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"bridges\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"selfRemove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"blockToken(address)\":{\"notice\":\"Block a specific token from being used in the StarkGate. A blocked token cannot be deployed.\"},\"enlistToken(address,address)\":{\"notice\":\"Add a mapping between a token and the bridge handling it. Ensuring unique enrollment.\"},\"getBridge(address)\":{\"notice\":\"Returns the bridge that handles the given token.\"},\"getWithdrawalBridges(address)\":{\"notice\":\"Retrieves a list of bridge addresses that have facilitated withdrawals for the specified token.\"},\"selfRemove(address)\":{\"notice\":\"Using this function a bridge removes enlisting of its token from the registry. The bridge must implement `isServicingToken(address token)` (see `IStarkgateService`).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarkgateRegistry.sol\":\"StarkgateRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/IStarkgateService.sol\":{\"keccak256\":\"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946\",\"dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateRegistry.sol\":{\"keccak256\":\"0x86b6c1487f8f19371f885c0e3f955470cf9d5ee420a84e616e714d54cc74bf2e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://abe3999416806730e7ce06d4dc8be25887ffafe18b3f36c26f1b98f24afe023d\",\"dweb:/ipfs/QmbJ3TSgihZqYDtJyULevQNP83K7dQvrjcjCjbitdS6E2f\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"bridge","type":"address","indexed":true}],"type":"event","name":"TokenEnlisted","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"bridge","type":"address","indexed":true}],"type":"event","name":"TokenSelfRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true}],"type":"event","name":"TokenStatusBlocked","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"blockToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"enlistToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"getBridge","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"getWithdrawalBridges","outputs":[{"internalType":"address[]","name":"bridges","type":"address[]"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"selfRemove"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"blockToken(address)":{"notice":"Block a specific token from being used in the StarkGate. A blocked token cannot be deployed."},"enlistToken(address,address)":{"notice":"Add a mapping between a token and the bridge handling it. Ensuring unique enrollment."},"getBridge(address)":{"notice":"Returns the bridge that handles the given token."},"getWithdrawalBridges(address)":{"notice":"Retrieves a list of bridge addresses that have facilitated withdrawals for the specified token."},"selfRemove(address)":{"notice":"Using this function a bridge removes enlisting of its token from the registry. The bridge must implement `isServicingToken(address token)` (see `IStarkgateService`)."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/solidity/StarkgateRegistry.sol":"StarkgateRegistry"},"evmVersion":"paris","libraries":{}},"sources":{"src/solidity/IStarkgateRegistry.sol":{"keccak256":"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2","urls":["bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172","dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7"],"license":"Apache-2.0."},"src/solidity/IStarkgateService.sol":{"keccak256":"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8","urls":["bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946","dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx"],"license":"Apache-2.0."},"src/solidity/StarkgateConstants.sol":{"keccak256":"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642","urls":["bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c","dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx"],"license":"Apache-2.0."},"src/solidity/StarkgateRegistry.sol":{"keccak256":"0x86b6c1487f8f19371f885c0e3f955470cf9d5ee420a84e616e714d54cc74bf2e","urls":["bzz-raw://abe3999416806730e7ce06d4dc8be25887ffafe18b3f36c26f1b98f24afe023d","dweb:/ipfs/QmbJ3TSgihZqYDtJyULevQNP83K7dQvrjcjCjbitdS6E2f"],"license":"Apache-2.0."},"starkware/solidity/components/Roles.sol":{"keccak256":"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf","urls":["bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3","dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv"],"license":"Apache-2.0."},"starkware/solidity/interfaces/BlockDirectCall.sol":{"keccak256":"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6","urls":["bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3","dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ContractInitializer.sol":{"keccak256":"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a","urls":["bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6","dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7"],"license":"Apache-2.0."},"starkware/solidity/interfaces/Identity.sol":{"keccak256":"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08","urls":["bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888","dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ProxySupport.sol":{"keccak256":"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a","urls":["bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6","dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4"],"license":"Apache-2.0."},"starkware/solidity/libraries/AccessControl.sol":{"keccak256":"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32","urls":["bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074","dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e"],"license":"MIT"},"starkware/solidity/libraries/Addresses.sol":{"keccak256":"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179","urls":["bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89","dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS"],"license":"Apache-2.0."},"starkware/solidity/libraries/NamedStorage.sol":{"keccak256":"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e","urls":["bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a","dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi"],"license":"Apache-2.0."},"starkware/solidity/libraries/RolesLib.sol":{"keccak256":"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0","urls":["bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb","dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL"],"license":"Apache-2.0."},"third_party/open_zeppelin/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"}},"version":1},"id":30} \ No newline at end of file diff --git a/crates/starkgate-registry-client/src/clients/mod.rs b/crates/starkgate-registry-client/src/clients/mod.rs new file mode 100644 index 0000000..5a88e38 --- /dev/null +++ b/crates/starkgate-registry-client/src/clients/mod.rs @@ -0,0 +1,2 @@ +pub mod starkgate_registry; +pub use starkgate_registry::*; diff --git a/crates/starknet-core-contract-client/src/clients/starkgate_registry.rs b/crates/starkgate-registry-client/src/clients/starkgate_registry.rs similarity index 86% rename from crates/starknet-core-contract-client/src/clients/starkgate_registry.rs rename to crates/starkgate-registry-client/src/clients/starkgate_registry.rs index 8408864..cd49c5e 100644 --- a/crates/starknet-core-contract-client/src/clients/starkgate_registry.rs +++ b/crates/starkgate-registry-client/src/clients/starkgate_registry.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use crate::{interfaces::{ - StarkgateRegistry, ProxySupport -}, LocalWalletSignerMiddleware, StarknetContractClient}; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; +use crate::interfaces::registry::StarkgateRegistry; use ethers::types::Address; diff --git a/crates/starkgate-registry-client/src/interfaces/mod.rs b/crates/starkgate-registry-client/src/interfaces/mod.rs new file mode 100644 index 0000000..97ac64f --- /dev/null +++ b/crates/starkgate-registry-client/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod registry; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/registry.rs b/crates/starkgate-registry-client/src/interfaces/registry.rs similarity index 98% rename from crates/starknet-core-contract-client/src/interfaces/registry.rs rename to crates/starkgate-registry-client/src/interfaces/registry.rs index 32f0183..fa44238 100644 --- a/crates/starknet-core-contract-client/src/interfaces/registry.rs +++ b/crates/starkgate-registry-client/src/interfaces/registry.rs @@ -6,7 +6,7 @@ use ethers::{ types::{TransactionReceipt, H160}, }; -use crate::Error; +use utils::errors::Error; type Address = H160; diff --git a/crates/starkgate-registry-client/src/lib.rs b/crates/starkgate-registry-client/src/lib.rs new file mode 100644 index 0000000..9d2f813 --- /dev/null +++ b/crates/starkgate-registry-client/src/lib.rs @@ -0,0 +1,22 @@ +use std::sync::Arc; + +use clients::starkgate_registry::StarkgateRegistryContractClient; +use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; +use utils::LocalWalletSignerMiddleware; + +pub mod clients; +pub mod interfaces; + +const STARKGATE_REGISTRY: &str = include_str!("./artifacts/StarkgateRegistry.json"); + +pub async fn deploy_starkgate_registry_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Starkgate Registry contract (no explicit constructor) + let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; + + Ok(StarkgateRegistryContractClient::new( + registry_contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/starknet-core-contract-client/Cargo.toml b/crates/starknet-core-contract-client/Cargo.toml index 1065dc9..5d61a5a 100644 --- a/crates/starknet-core-contract-client/Cargo.toml +++ b/crates/starknet-core-contract-client/Cargo.toml @@ -10,3 +10,5 @@ log = { workspace = true } thiserror = { workspace = true } num-traits = { workspace = true } async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} diff --git a/crates/sandbox/artifacts/Starknet.json b/crates/starknet-core-contract-client/src/artifacts/Starknet.json similarity index 100% rename from crates/sandbox/artifacts/Starknet.json rename to crates/starknet-core-contract-client/src/artifacts/Starknet.json diff --git a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs b/crates/starknet-core-contract-client/src/clients/dai_erc20.rs deleted file mode 100644 index 815e250..0000000 --- a/crates/starknet-core-contract-client/src/clients/dai_erc20.rs +++ /dev/null @@ -1,35 +0,0 @@ -use std::sync::Arc; - -use crate::{interfaces::{ - DaiERC20Token, -}, LocalWalletSignerMiddleware, StarknetContractClient}; - -use ethers::types::Address; - -pub struct DaiERC20ContractClient { - erc20_token: DaiERC20Token, -} - -impl DaiERC20ContractClient { - pub fn new(address: Address, client: Arc) -> Self { - Self { - erc20_token: DaiERC20Token::new(address, client.clone()), - } - } -} - -impl AsRef> for DaiERC20ContractClient { - fn as_ref(&self) -> &DaiERC20Token { - &self.erc20_token - } -} - -impl StarknetContractClient for DaiERC20ContractClient { - fn address(&self) -> Address { - self.erc20_token.address() - } - - fn client(&self) -> Arc { - self.erc20_token.client() - } -} diff --git a/crates/starknet-core-contract-client/src/clients/mod.rs b/crates/starknet-core-contract-client/src/clients/mod.rs index 0d279ad..8d9fc4d 100644 --- a/crates/starknet-core-contract-client/src/clients/mod.rs +++ b/crates/starknet-core-contract-client/src/clients/mod.rs @@ -1,16 +1,5 @@ mod sovereign; mod validity; -mod eth_bridge; -mod token_bridge; -mod starkgate_manager; -mod starkgate_registry; - -mod dai_erc20; pub use sovereign::*; pub use validity::*; -pub use eth_bridge::*; -pub use starkgate_manager::*; -pub use starkgate_registry::*; -pub use token_bridge::*; -pub use dai_erc20::*; diff --git a/crates/starknet-core-contract-client/src/clients/sovereign.rs b/crates/starknet-core-contract-client/src/clients/sovereign.rs index a795400..28c2497 100644 --- a/crates/starknet-core-contract-client/src/clients/sovereign.rs +++ b/crates/starknet-core-contract-client/src/clients/sovereign.rs @@ -1,12 +1,11 @@ use std::sync::Arc; -use crate::{ - interfaces::{ - GovernedFinalizable, Operator, ProxySupport, StarknetGovernance, StarknetMessaging, +use crate::interfaces::{ + GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetSovereignContract, - }, - LocalWalletSignerMiddleware, StarknetContractClient, -}; + }; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; use ethers::types::Address; /// Client to interact with a Starknet core contract running in `Sovereign` mode diff --git a/crates/starknet-core-contract-client/src/clients/validity.rs b/crates/starknet-core-contract-client/src/clients/validity.rs index 56a5ba0..de78907 100644 --- a/crates/starknet-core-contract-client/src/clients/validity.rs +++ b/crates/starknet-core-contract-client/src/clients/validity.rs @@ -2,10 +2,10 @@ use std::sync::Arc; use ethers::abi::Address; -use crate::{ - interfaces::{Operator, ProxySupport, StarknetMessaging, StarknetValidityContract}, - LocalWalletSignerMiddleware, -}; +use crate::interfaces::{Operator, StarknetMessaging, StarknetValidityContract}; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::LocalWalletSignerMiddleware; + /// Client to interact with a Starknet core contract running in `Validity` mode pub struct StarknetValidityContractClient { diff --git a/crates/starknet-core-contract-client/src/interfaces/governance.rs b/crates/starknet-core-contract-client/src/interfaces/governance.rs index 1ace1d2..54ecfd5 100644 --- a/crates/starknet-core-contract-client/src/interfaces/governance.rs +++ b/crates/starknet-core-contract-client/src/interfaces/governance.rs @@ -6,7 +6,7 @@ use ethers::{ types::{TransactionReceipt, H160}, }; -use crate::Error; +use utils::errors::Error; type Address = H160; diff --git a/crates/starknet-core-contract-client/src/interfaces/governed_finalizable.rs b/crates/starknet-core-contract-client/src/interfaces/governed_finalizable.rs index a3f8507..1c921c5 100644 --- a/crates/starknet-core-contract-client/src/interfaces/governed_finalizable.rs +++ b/crates/starknet-core-contract-client/src/interfaces/governed_finalizable.rs @@ -3,7 +3,7 @@ use ethers::{ contract::ContractError, prelude::abigen, providers::Middleware, types::TransactionReceipt, }; -use crate::Error; +use utils::errors::Error; abigen!( GovernedFinalizable, diff --git a/crates/starknet-core-contract-client/src/interfaces/messaging.rs b/crates/starknet-core-contract-client/src/interfaces/messaging.rs index 49fdd1a..bc86a9a 100644 --- a/crates/starknet-core-contract-client/src/interfaces/messaging.rs +++ b/crates/starknet-core-contract-client/src/interfaces/messaging.rs @@ -6,7 +6,7 @@ use ethers::{ types::{TransactionReceipt, U256}, }; -use crate::Error; +use utils::errors::Error; type MessageHash = [u8; 32]; diff --git a/crates/starknet-core-contract-client/src/interfaces/mod.rs b/crates/starknet-core-contract-client/src/interfaces/mod.rs index 8fec7a2..29e8ac2 100644 --- a/crates/starknet-core-contract-client/src/interfaces/mod.rs +++ b/crates/starknet-core-contract-client/src/interfaces/mod.rs @@ -3,14 +3,8 @@ mod governed_finalizable; mod messaging; mod messaging_events; mod operator; -mod proxy_support; mod sovereign_core_contract; mod validity_core_contract; -mod eth_bridge; -mod registry; -mod manager; -mod token_bridge; -mod dai_erc20; pub use governance::{StarknetGovernance, StarknetGovernanceTrait}; pub use governed_finalizable::{GovernedFinalizable, GovernedFinalizableTrait}; @@ -21,13 +15,5 @@ pub use messaging_events::{ StarknetMessagingEvents, }; pub use operator::{Operator, OperatorTrait}; -pub use proxy_support::{ - CoreContractInitData, CoreContractState, ProxyInitializeData, ProxySupport, ProxySupportTrait, -}; pub use sovereign_core_contract::{StarknetSovereignContract, StarknetSovereignContractTrait}; -pub use validity_core_contract::{StarknetValidityContract, StarknetValidityContractTrait}; -pub use eth_bridge::{StarknetEthBridge, StarknetEthBridgeTrait}; -pub use token_bridge::{StarknetTokenBridge, StarknetTokenBridgeTrait}; -pub use manager::{StarkgateManager, StarkgateManagerTrait}; -pub use registry::{StarkgateRegistry, StarkgateRegistryTrait}; -pub use dai_erc20::{DaiERC20Token, DaiERC20TokenTrait}; \ No newline at end of file +pub use validity_core_contract::{StarknetValidityContract, StarknetValidityContractTrait}; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/operator.rs b/crates/starknet-core-contract-client/src/interfaces/operator.rs index e5d63b1..5096930 100644 --- a/crates/starknet-core-contract-client/src/interfaces/operator.rs +++ b/crates/starknet-core-contract-client/src/interfaces/operator.rs @@ -6,7 +6,7 @@ use ethers::{ types::{Address, TransactionReceipt}, }; -use crate::Error; +use utils::errors::Error; abigen!( Operator, diff --git a/crates/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs b/crates/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs index 679f878..86afcfa 100644 --- a/crates/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs +++ b/crates/starknet-core-contract-client/src/interfaces/sovereign_core_contract.rs @@ -4,7 +4,7 @@ use ethers::middleware::Middleware; use ethers::prelude::abigen; use ethers::types::{TransactionReceipt, I256, U256}; -use crate::Error; +use utils::errors::Error; abigen!( StarknetSovereignContract, diff --git a/crates/starknet-core-contract-client/src/interfaces/validity_core_contract.rs b/crates/starknet-core-contract-client/src/interfaces/validity_core_contract.rs index cba833e..6eb4a1c 100644 --- a/crates/starknet-core-contract-client/src/interfaces/validity_core_contract.rs +++ b/crates/starknet-core-contract-client/src/interfaces/validity_core_contract.rs @@ -4,7 +4,7 @@ use ethers::middleware::Middleware; use ethers::prelude::abigen; use ethers::types::{TransactionReceipt, I256, U256}; -use crate::Error; +use utils::errors::Error; abigen!( StarknetValidityContract, diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 64187e0..5343ae1 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -1,19 +1,24 @@ -pub mod clients; -mod error; -pub mod interfaces; - use std::sync::Arc; -pub use error::Error; +use clients::StarknetSovereignContractClient; +use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; +use utils::LocalWalletSignerMiddleware; + +pub mod clients; +pub mod interfaces; -use ethers::prelude::SignerMiddleware; -use ethers::providers::{Http, Provider}; -use ethers::signers::LocalWallet; -use ethers::types::Address; +const STARKNET_SOVEREIGN: &str = include_str!("./artifacts/Starknet.json"); -pub type LocalWalletSignerMiddleware = SignerMiddleware, LocalWallet>; +/// Deploy Starknet sovereign contract and unsafe proxy for it. +/// Cached forge artifacts are used for deployment, make sure they are up to date. +pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( + client: Arc, +) -> Result { + // Deploy the Starknet Core contract (no explicit constructor) + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; -pub trait StarknetContractClient { - fn address(&self) -> Address; - fn client(&self) -> Arc; -} + Ok(StarknetSovereignContractClient::new( + core_contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/starknet-erc20-client/Cargo.toml b/crates/starknet-erc20-client/Cargo.toml new file mode 100644 index 0000000..2af3343 --- /dev/null +++ b/crates/starknet-erc20-client/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "starknet-erc20-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} +ethereum-instance = { path = "../ethereum-instance" } diff --git a/crates/sandbox/artifacts/DaiERC20Token.json b/crates/starknet-erc20-client/src/artifacts/ERC20Token.json similarity index 100% rename from crates/sandbox/artifacts/DaiERC20Token.json rename to crates/starknet-erc20-client/src/artifacts/ERC20Token.json diff --git a/crates/starknet-erc20-client/src/clients/erc20.rs b/crates/starknet-erc20-client/src/clients/erc20.rs new file mode 100644 index 0000000..ce7266e --- /dev/null +++ b/crates/starknet-erc20-client/src/clients/erc20.rs @@ -0,0 +1,34 @@ +use std::sync::Arc; + +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; +use crate::interfaces::erc20::ERC20Token; + +use ethers::types::Address; + +pub struct ERC20ContractClient { + erc20_token: ERC20Token, +} + +impl ERC20ContractClient { + pub fn new(address: Address, client: Arc) -> Self { + Self { + erc20_token: ERC20Token::new(address, client.clone()), + } + } +} + +impl AsRef> for ERC20ContractClient { + fn as_ref(&self) -> &ERC20Token { + &self.erc20_token + } +} + +impl StarknetContractClient for ERC20ContractClient { + fn address(&self) -> Address { + self.erc20_token.address() + } + + fn client(&self) -> Arc { + self.erc20_token.client() + } +} diff --git a/crates/starknet-erc20-client/src/clients/mod.rs b/crates/starknet-erc20-client/src/clients/mod.rs new file mode 100644 index 0000000..aaecc36 --- /dev/null +++ b/crates/starknet-erc20-client/src/clients/mod.rs @@ -0,0 +1,2 @@ +pub mod erc20; +pub use erc20::*; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs b/crates/starknet-erc20-client/src/interfaces/erc20.rs similarity index 93% rename from crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs rename to crates/starknet-erc20-client/src/interfaces/erc20.rs index bb8808d..4101bbb 100644 --- a/crates/starknet-core-contract-client/src/interfaces/dai_erc20.rs +++ b/crates/starknet-erc20-client/src/interfaces/erc20.rs @@ -7,10 +7,10 @@ use ethers::{ use ethers::contract::ContractError; use ethers::prelude::TransactionReceipt; -use crate::Error; +use utils::errors::Error; abigen!( - DaiERC20Token, + ERC20Token, r#"[ function name() public view virtual returns (string memory) function symbol() public view virtual returns (string memory) @@ -22,7 +22,7 @@ abigen!( ); #[async_trait] -pub trait DaiERC20TokenTrait { +pub trait ERC20TokenTrait { async fn name(&self) -> Result>; async fn symbol(&self) -> Result>; async fn total_supply(&self) -> Result>; @@ -32,9 +32,9 @@ pub trait DaiERC20TokenTrait { } #[async_trait] -impl DaiERC20TokenTrait for T +impl ERC20TokenTrait for T where - T: AsRef> + Send + Sync, + T: AsRef> + Send + Sync, { async fn name(&self) -> Result> { self.as_ref() diff --git a/crates/starknet-erc20-client/src/interfaces/mod.rs b/crates/starknet-erc20-client/src/interfaces/mod.rs new file mode 100644 index 0000000..b8d1517 --- /dev/null +++ b/crates/starknet-erc20-client/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod erc20; \ No newline at end of file diff --git a/crates/starknet-erc20-client/src/lib.rs b/crates/starknet-erc20-client/src/lib.rs new file mode 100644 index 0000000..05de2ee --- /dev/null +++ b/crates/starknet-erc20-client/src/lib.rs @@ -0,0 +1,23 @@ +use std::sync::Arc; + +use clients::erc20::ERC20ContractClient; +use starknet_proxy_client::deploy::Error; +use utils::LocalWalletSignerMiddleware; +use ethereum_instance::deploy_contract; + +pub mod clients; +pub mod interfaces; + +const DAI_ERC20_TOKEN: &str = include_str!("./artifacts/ERC20Token.json"); + +pub async fn deploy_dai_erc20_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Dai ERC20 Token contract (no explicit constructor) + let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, ()).await.unwrap(); + + Ok(ERC20ContractClient::new( + contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/starknet-eth-bridge-client/Cargo.toml b/crates/starknet-eth-bridge-client/Cargo.toml new file mode 100644 index 0000000..ad39adb --- /dev/null +++ b/crates/starknet-eth-bridge-client/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "starknet-eth-bridge-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} diff --git a/crates/sandbox/artifacts/StarknetLegacyBridge.json b/crates/starknet-eth-bridge-client/src/artifacts/StarknetLegacyBridge.json similarity index 100% rename from crates/sandbox/artifacts/StarknetLegacyBridge.json rename to crates/starknet-eth-bridge-client/src/artifacts/StarknetLegacyBridge.json diff --git a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs b/crates/starknet-eth-bridge-client/src/clients/eth_bridge.rs similarity index 87% rename from crates/starknet-core-contract-client/src/clients/eth_bridge.rs rename to crates/starknet-eth-bridge-client/src/clients/eth_bridge.rs index 0774a70..8ce9921 100644 --- a/crates/starknet-core-contract-client/src/clients/eth_bridge.rs +++ b/crates/starknet-eth-bridge-client/src/clients/eth_bridge.rs @@ -1,6 +1,8 @@ use std::sync::Arc; -use crate::{interfaces::{StarknetEthBridge, ProxySupport}, LocalWalletSignerMiddleware, StarknetContractClient}; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; +use crate::interfaces::eth_bridge::StarknetEthBridge; use ethers::types::Address; diff --git a/crates/starknet-eth-bridge-client/src/clients/mod.rs b/crates/starknet-eth-bridge-client/src/clients/mod.rs new file mode 100644 index 0000000..7776d60 --- /dev/null +++ b/crates/starknet-eth-bridge-client/src/clients/mod.rs @@ -0,0 +1 @@ +pub mod eth_bridge; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs b/crates/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs similarity index 98% rename from crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs rename to crates/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs index f54065a..0b67bf0 100644 --- a/crates/starknet-core-contract-client/src/interfaces/eth_bridge.rs +++ b/crates/starknet-eth-bridge-client/src/interfaces/eth_bridge.rs @@ -1,4 +1,3 @@ -use std::ops::Add; use async_trait::async_trait; use ethers::{ contract::ContractError, @@ -8,7 +7,7 @@ use ethers::{ }; use ethers::prelude::H160; -use crate::Error; +use utils::errors::Error; type Address = H160; diff --git a/crates/starknet-eth-bridge-client/src/interfaces/mod.rs b/crates/starknet-eth-bridge-client/src/interfaces/mod.rs new file mode 100644 index 0000000..b9a6cef --- /dev/null +++ b/crates/starknet-eth-bridge-client/src/interfaces/mod.rs @@ -0,0 +1,2 @@ +pub mod eth_bridge; +pub use eth_bridge::*; \ No newline at end of file diff --git a/crates/starknet-eth-bridge-client/src/lib.rs b/crates/starknet-eth-bridge-client/src/lib.rs new file mode 100644 index 0000000..cadc360 --- /dev/null +++ b/crates/starknet-eth-bridge-client/src/lib.rs @@ -0,0 +1,21 @@ +use std::sync::Arc; + +use clients::eth_bridge::StarknetEthBridgeContractClient; +use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; +use utils::LocalWalletSignerMiddleware; +pub mod interfaces; +pub mod clients; + +const STARKNET_ETH_BRIDGE: &str = include_str!("./artifacts/StarknetLegacyBridge.json"); + +pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Eth Bridge contract (no explicit constructor) + let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; + + Ok(StarknetEthBridgeContractClient::new( + eth_bridge_contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/starknet-proxy-client/Cargo.toml b/crates/starknet-proxy-client/Cargo.toml new file mode 100644 index 0000000..b89e7c7 --- /dev/null +++ b/crates/starknet-proxy-client/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "starknet-proxy-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +serde_json = { workspace = true } +utils = { path = "../utils" } +ethereum-instance = { path = "../ethereum-instance" } \ No newline at end of file diff --git a/crates/sandbox/artifacts/UnsafeProxy.json b/crates/starknet-proxy-client/src/artifacts/UnsafeProxy.json similarity index 100% rename from crates/sandbox/artifacts/UnsafeProxy.json rename to crates/starknet-proxy-client/src/artifacts/UnsafeProxy.json diff --git a/crates/starknet-proxy-client/src/deploy.rs b/crates/starknet-proxy-client/src/deploy.rs new file mode 100644 index 0000000..63739ba --- /dev/null +++ b/crates/starknet-proxy-client/src/deploy.rs @@ -0,0 +1,44 @@ +use std::sync::Arc; +use ethers::abi::Tokenize; +use ethers::contract::ContractError; +use ethers::prelude::ContractInstance; +use ethers::providers::ProviderError; +use ethers::utils::hex::{self}; +use utils::LocalWalletSignerMiddleware; +use ethereum_instance::deploy_contract; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error(transparent)] + SerdeJson(#[from] serde_json::Error), + #[error("['bytecode']['object'] is not a string")] + BytecodeObject, + #[error(transparent)] + Hex(#[from] hex::FromHexError), + #[error("Failed to parse URL")] + UrlParser, + #[error(transparent)] + EthersContract(#[from] ContractError), + #[error(transparent)] + EthersProvider(#[from] ProviderError), + #[error("Invalid contract build artifacts: missing field `{0}`")] + ContractBuildArtifacts(&'static str), +} + +const UNSAFE_PROXY: &str = include_str!("./artifacts/UnsafeProxy.json"); + +/// Deploys new unsafe proxy contract: +/// - Implementation can be set only once at initialization +/// - Traditional (Safe) proxies can be upgraded multiple times +pub async fn deploy_contract_behind_unsafe_proxy( + client: Arc, + contract_path: &str, + constructor_args: T, +) -> Result, LocalWalletSignerMiddleware>, Error> { + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await.unwrap(); + + let proxy_contract = + deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await.unwrap(); + + return Ok(proxy_contract); +} \ No newline at end of file diff --git a/crates/starknet-proxy-client/src/lib.rs b/crates/starknet-proxy-client/src/lib.rs new file mode 100644 index 0000000..34fe296 --- /dev/null +++ b/crates/starknet-proxy-client/src/lib.rs @@ -0,0 +1,2 @@ +pub mod proxy_support; +pub mod deploy; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/proxy_support.rs b/crates/starknet-proxy-client/src/proxy_support.rs similarity index 99% rename from crates/starknet-core-contract-client/src/interfaces/proxy_support.rs rename to crates/starknet-proxy-client/src/proxy_support.rs index 046d8ff..e84a8e9 100644 --- a/crates/starknet-core-contract-client/src/interfaces/proxy_support.rs +++ b/crates/starknet-proxy-client/src/proxy_support.rs @@ -7,7 +7,7 @@ use ethers::{ types::{Address, Bytes, TransactionReceipt, I256, U256}, }; -use crate::Error; +use utils::errors::Error; abigen!( ProxySupport, diff --git a/crates/starknet-token-bridge-client/Cargo.toml b/crates/starknet-token-bridge-client/Cargo.toml new file mode 100644 index 0000000..2b180d4 --- /dev/null +++ b/crates/starknet-token-bridge-client/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "starknet-token-bridge-client" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +utils = { path = "../utils" } +starknet-proxy-client = { path = "../starknet-proxy-client"} \ No newline at end of file diff --git a/crates/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json b/crates/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json new file mode 100644 index 0000000..a7f7948 --- /dev/null +++ b/crates/starknet-token-bridge-client/src/artifacts/StarknetTokenBridge.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"checkDeploymentStatus","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deactivate","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositCancelRequest","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositReclaim","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositWithMessage","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"},{"name":"message","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositWithMessageCancelRequest","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"},{"name":"message","type":"uint256[]","internalType":"uint256[]"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositWithMessageReclaim","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"l2Recipient","type":"uint256","internalType":"uint256"},{"name":"message","type":"uint256[]","internalType":"uint256[]"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"disableWithdrawalLimit","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enableWithdrawalLimit","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"enrollToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"estimateDepositFeeWei","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"estimateEnrollmentFeeWei","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"getMaxTotalBalance","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRemainingIntradayAllowance","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStatus","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint8","internalType":"enum StarknetTokenStorage.TokenStatus"}],"stateMutability":"view"},{"type":"function","name":"identify","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"initialize","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isFrozen","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isServicingToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"maxDeposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setL2TokenBridge","inputs":[{"name":"l2TokenBridge_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxTotalBalance","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"maxTotalBalance_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"recipient","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Deposit","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositCancelRequest","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositReclaimed","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositWithMessage","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"message","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositWithMessageCancelRequest","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"message","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DepositWithMessageReclaimed","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"l2Recipient","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"message","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"nonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetL2TokenBridge","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SetMaxTotalBalance","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TokenDeactivated","inputs":[{"name":"token","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TokenEnrollmentInitiated","inputs":[{"name":"token","type":"address","indexed":false,"internalType":"address"},{"name":"deploymentMsgHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"WithdrawalLimitDisabled","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"WithdrawalLimitEnabled","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60e060405246600114620000155760016200001c565b64e8d4a510005b64ffffffffff166080523480156200003357600080fd5b503060a052600160c08190526200004962000050565b5062000519565b336200005d818062000060565b50565b6200006a620001c1565b1562000103576001600160a01b03821660009081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620000fd5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200010e565b6200010e8262000215565b6200011862000360565b15620001b6576001600160a01b03811660009081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001b25760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620000f4565b5050565b620001b281620003b2565b60008051602062004e84833981519152600090815260008051602062004ec48339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200023060008051602062004e84833981519152826200041e565b6200026a7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de0606860008051602062004ee4833981519152620004c0565b6200029460008051602062004ee483398151915260008051602062004e84833981519152620004c0565b620002af60008051602062004e8483398151915280620004c0565b620002ea7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da760008051602062004ee4833981519152620004c0565b620003257f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e60008051602062004ee4833981519152620004c0565b6200005d7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22860008051602062004e84833981519152620004c0565b60008051602062004ea4833981519152600090815260008051602062004ec48339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200020e565b620003cd60008051602062004ea483398151915280620004c0565b620004087f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9660008051602062004ea4833981519152620004c0565b6200005d60008051602062004ea4833981519152825b600082815260008051602062004ec4833981519152602090815260408083206001600160a01b038516845290915290205460ff16620001b257600082815260008051602062004ec4833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600082815260008051602062004ec48339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60805160a05160c05161493b620005496000396000610c7901526000610e3901526000612d59015261493b6000f3fe6080604052600436106102c95760003560e01c8063757bd9ab11610175578063cdd1f70d116100dc578063deec9c5a11610095578063eeb728661161006f578063eeb7286614610892578063f3fef3a3146108b4578063fa0f73ba146108d4578063fad8b32a146108f457600080fd5b8063deec9c5a14610832578063ed9ef16a14610852578063ee0e68071461087257600080fd5b8063cdd1f70d14610772578063cf50fd1c14610792578063d08fb6cb146107b2578063d12fc182146107d2578063d2b51eea146107f2578063d9fa70911461081257600080fd5b8063a6d1d6c61161012e578063a6d1d6c6146106d7578063ad8b92b4146106f7578063af8bc15e1461070a578063b5cd0c3c1461071f578063be58b18e1461073f578063cb1cccce1461075257600080fd5b8063757bd9ab146106175780637fc2ab3e146106375780638101b64c146106575780638e5224ff146106775780639463629a14610697578063a2bdde3d146106b757600080fd5b80633ea053eb116102345780635a72af89116101ed57806369328dec116101c757806369328dec146105975780636c04d9d5146105b75780636d70f7ae146105d75780636fc97cbf146105f757600080fd5b80635a72af89146105425780636083e59a1461056257806362a143761461057757600080fd5b80633ea053eb1461047f578063439fab911461049f578063496ae54c146104bf5780634baf43da146104ed5780634d8b92a51461050d5780635a5d1bb91461052257600080fd5b806323205c521161028657806323205c52146103985780632f951985146103b857806330ccebb5146103d857806333eeb1471461042b57806336568abe1461043f5780633682a4501461045f57600080fd5b80630b3a2d21146102ce5780630c6f8664146102f05780630e770f23146103255780630efe6a8b1461034557806314af98b3146103585780631789638314610378575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613db6565b610914565b005b3480156102fc57600080fd5b5061031061030b366004613db6565b61092f565b60405190151581526020015b60405180910390f35b34801561033157600080fd5b506102ee610340366004613db6565b610990565b6102ee610353366004613dd3565b6109a8565b34801561036457600080fd5b506102ee610373366004613db6565b610a64565b34801561038457600080fd5b506102ee610393366004613db6565b610b0c565b3480156103a457600080fd5b506102ee6103b3366004613e08565b610b24565b3480156103c457600080fd5b506102ee6103d3366004613db6565b610c1a565b3480156103e457600080fd5b5061041e6103f3366004613db6565b6001600160a01b031660009081526000805160206148a6833981519152602052604090205460ff1690565b60405161031c9190613e59565b34801561043757600080fd5b506000610310565b34801561044b57600080fd5b506102ee61045a366004613e81565b610c5f565b34801561046b57600080fd5b506102ee61047a366004613db6565b610cf1565b34801561048b57600080fd5b506102ee61049a366004613db6565b610d09565b3480156104ab57600080fd5b506102ee6104ba366004613eb1565b610e36565b3480156104cb57600080fd5b506104df6104da366004613db6565b610fe7565b60405190815260200161031c565b3480156104f957600080fd5b506104df610508366004613db6565b61102e565b34801561051957600080fd5b506104df61106d565b34801561052e57600080fd5b5061031061053d366004613db6565b61107c565b34801561054e57600080fd5b506102ee61055d366004613db6565b611096565b34801561056e57600080fd5b506000196104df565b34801561058357600080fd5b506102ee610592366004613db6565b61113b565b3480156105a357600080fd5b506102ee6105b2366004613f23565b611153565b3480156105c357600080fd5b506103106105d2366004613db6565b611240565b3480156105e357600080fd5b506103106105f2366004613db6565b61125a565b34801561060357600080fd5b506102ee610612366004613db6565b611274565b34801561062357600080fd5b50610310610632366004613db6565b61128c565b34801561064357600080fd5b506102ee610652366004613f65565b6112a6565b34801561066357600080fd5b506102ee610672366004613db6565b6113cb565b34801561068357600080fd5b50610310610692366004613db6565b61140c565b3480156106a357600080fd5b506102ee6106b2366004613db6565b611426565b3480156106c357600080fd5b506103106106d2366004613db6565b61143e565b3480156106e357600080fd5b506102ee6106f2366004613e08565b611458565b6102ee610705366004613db6565b611539565b34801561071657600080fd5b506104df611786565b34801561072b57600080fd5b506102ee61073a366004613fca565b611790565b6102ee61074d36600461403c565b6118c7565b34801561075e57600080fd5b5061031061076d366004613db6565b6119da565b34801561077e57600080fd5b506102ee61078d366004613db6565b6119f4565b34801561079e57600080fd5b506102ee6107ad366004613fca565b611a0c565b3480156107be57600080fd5b506103106107cd366004613db6565b611b28565b3480156107de57600080fd5b506102ee6107ed366004613db6565b611b42565b3480156107fe57600080fd5b506102ee61080d3660046140a6565b611d67565b34801561081e57600080fd5b506102ee61082d366004613db6565b611e70565b34801561083e57600080fd5b506102ee61084d366004613db6565b611e88565b34801561085e57600080fd5b506102ee61086d366004613db6565b611ea0565b34801561087e57600080fd5b506102ee61088d366004613db6565b611eb8565b34801561089e57600080fd5b506108a7611ef9565b60405161031c91906140f6565b3480156108c057600080fd5b506102ee6108cf3660046140a6565b611f19565b3480156108e057600080fd5b506102ee6108ef366004613db6565b611f24565b34801561090057600080fd5b506102ee61090f366004613db6565b611f3c565b61092c6000805160206148e683398151915282611f54565b50565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff16600181600381111561096c5761096c613e43565b14806109895750600281600381111561098757610987613e43565b145b9392505050565b61092c6000805160206147d283398151915282611f54565b826109b28161092f565b6109f85760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b6040805160008082526020820190925290610a138686611f75565b90506000610a338787878660008051602061488683398151915287612059565b9050610a528787878660008051602061488683398151915286886121be565b610a5b87611b42565b50505050505050565b610a6d3361128c565b610aaf5760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b61092c6000805160206147f283398151915282611f54565b610b2c6122d3565b6001600160a01b0316636170ff1b610b426122f6565b600080516020614886833981519152610b5c888888612319565b856040518563ffffffff1660e01b8152600401610b7c949392919061417b565b6020604051808303816000875af1158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf91906141ab565b50610bcb848433612344565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610c435760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206147f28339815191528361234f565b5050565b6000805160206146c483398151915282148015610c9a57507f0000000000000000000000000000000000000000000000000000000000000000155b15610ce75760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ef565b610c5b828261236b565b61092c6000805160206148c683398151915282611f54565b33610d126123e5565b6001600160a01b031614610d575760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff166003811115610d9157610d91613e43565b03610dce5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610ea75760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ef565b6000610eb481602061420a565b90506000610ec3826020614221565b905080831015610f0b5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ef565b6000610f1982848688614234565b810190610f269190613db6565b9050366000610f378582888a614234565b91509150366000610f4a8887818c614234565b90925090506001600160a01b03851615610f7457610f69858383612408565b505050505050505050565b610f7c61254a565b15610fcb578015610fc65760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ef565b610f69565b610fd58282612565565b610fdf828261267d565b610f696126ac565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206004015460ff1661101f57600019611028565b611028826126b7565b92915050565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206003015480156110635780610989565b6000199392505050565b60006110776126d8565b905090565b600061102860008051602061472b833981519152836126ec565b61109f33611b28565b6110e15760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b61092c6000805160206146e483398151915282611f54565b6001600160a01b03811661119d5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b6111a8838383612724565b6001600160a01b03831660009081526000805160206148a6833981519152602052604090206004015460ff16156111e3576111e383836128c3565b6111ee838383612344565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161123391815260200190565b60405180910390a3505050565b600061102860008051602061474b833981519152836126ec565b60006110286000805160206148c6833981519152836126ec565b61092c60008051602061474b83398151915282611f54565b60006110286000805160206147d2833981519152836126ec565b6112af3361107c565b6112ef5760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b6112f761254a565b6113435760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ef565b61134c81612933565b6113925760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b61139b81612956565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610e2b565b80336001600160a01b038216036113f45760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146e48339815191528361234f565b60006110286000805160206147f2833981519152836126ec565b61092c6000805160206146c483398151915282611f54565b60006110286000805160206148e6833981519152836126ec565b6114606122d3565b6001600160a01b0316637a98660b6114766122f6565b600080516020614886833981519152611490888888612319565b856040518563ffffffff1660e01b81526004016114b0949392919061417b565b6020604051808303816000875af11580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f391906141ab565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610c0c565b336115426123e5565b6001600160a01b0316146115875760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff1660038111156115c1576115c1613e43565b146116075760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ef565b600061161282612978565b9050600061161e6122d3565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b815260040161164b91815260200190565b602060405180830381865afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c91906141ab565b116116d95760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ef565b6001600160a01b03821660009081526000805160206148a683398151915260205260409020805460ff1916600190811782550181905561171c6206978042614221565b6000805160206148a68339815191526001600160a01b038416600081815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b6000611077612a5d565b6117986122d3565b6001600160a01b0316636170ff1b6117ae6122f6565b6000805160206147b28339815191526117fe8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b815260040161181e949392919061417b565b6020604051808303816000875af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906141ab565b5061186d868633612344565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f73888787876040516118b7949392919061425e565b60405180910390a4505050505050565b846118d18161092f565b6119125760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ef565b600061191e8787611f75565b905060006119738888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508991506120599050565b90506119c78888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508891508990506121be565b6119d088611b42565b5050505050505050565b60006110286000805160206146c4833981519152836126ec565b61092c60008051602061472b83398151915282611f54565b611a146122d3565b6001600160a01b0316637a98660b611a2a6122f6565b6000805160206147b2833981519152611a7a8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b8152600401611a9a949392919061417b565b6020604051808303816000875af1158015611ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611add91906141ab565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd5057603860888787876040516118b7949392919061425e565b60006110286000805160206146e4833981519152836126ec565b6001600160a01b03811660009081526000805160206148a68339815191526020526040902054819060019060ff166003811115611b8157611b81613e43565b14611b8a575050565b6001600160a01b03821660009081526000805160206148a6833981519152602052604090206001810154611bbc6122d3565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611be991815260200190565b602060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906141ab565b600003611c4157815460ff19166002178255611d61565b8160020154421115611d61576001600160a01b03841660009081526000805160206148a683398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611ca56123e5565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0691906142a4565b604051630caca05160e31b81526001600160a01b03878116600483015291925090821690636565028890602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015610f69573d6000803e3d6000fd5b50505050565b611d703361107c565b611db05760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b80600003611e005760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ef565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611e3b91815260200190565b60405180910390a26001600160a01b039190911660009081526000805160206148a68339815191526020526040902060030155565b61092c6000805160206147d28339815191528261234f565b61092c60008051602061472b8339815191528261234f565b61092c60008051602061474b8339815191528261234f565b80336001600160a01b03821603611ee15760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146c48339815191528361234f565b606060405180606001604052806023815260200161483860239139905090565b610c5b828233611153565b61092c6000805160206148e68339815191528261234f565b61092c6000805160206148c68339815191528261234f565b611f5d82612cb5565b611f6681612cd7565b611f708383612ce1565b505050565b6000611f8034612d57565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906141ab565b9050611ff68461102e565b6120008483614221565b11156120455760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ef565b612050843385612e0c565b50349392505050565b60006120636122f6565b6000036120825760405162461bcd60e51b81526004016109ef906142c1565b600086116120c15760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ef565b6120ca85612933565b6121105760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b6000805160206147b28339815191528314600061212b6122d3565b6001600160a01b0316633e3aa6c5856121426122f6565b886121508e8e8e8a8f612a70565b6040518563ffffffff1660e01b815260040161216e939291906142ec565b604080518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b0919061430b565b9a9950505050505050505050565b600080516020614886833981519152830361222857604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a5b565b6000805160206147b283398151915283146122785760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ef565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f1898887876040516122c2949392919061432f565b60405180910390a450505050505050565b600061107760405180606001604052806028815260200161469c60289139613003565b600061107760405180606001604052806027815260200161478b60279139613003565b604080516000808252602082019092526060915061233b858585600085612a70565b95945050505050565b611f70838284613037565b61235882612cb5565b61236181612cd7565b611f708383613174565b6001600160a01b03811633146123db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ef565b610c5b8282613174565b600061107760405180606001604052806026815260200161481260269139613003565b6001600160a01b0383163b6124545760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ef565b600080846001600160a01b031663439fab9160e01b858560405160240161247c92919061435b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516124ba919061438a565b600060405180830381855af49150503d80600081146124f5576040519150601f19603f3d011682016040523d82523d6000602084013e6124fa565b606091505b509150915081819061251f5760405162461bcd60e51b81526004016109ef91906140f6565b5080518190156125425760405162461bcd60e51b81526004016109ef91906140f6565b505050505050565b6000806125556122d3565b6001600160a01b03161415905090565b604081146125a95760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ef565b6000806125b8838501856143a6565b915091506125cf816001600160a01b03163b151590565b6126265760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ef565b6001600160a01b0382163b611d615760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ef565b60008061268c838501856143a6565b91509150612699816131e8565b6126a28261320a565b611d61600561322c565b3361092c818061324e565b60006126c282613352565b6126cf5761102882613381565b61102882613434565b600061107764012a05f200620186a061420a565b600091825260008051602061476b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61272c6122f6565b60000361274b5760405162461bcd60e51b81526004016109ef906142c1565b60408051600580825260c082019092526000916020820160a080368337019050509050600081600081518110612783576127836143d4565b602002602001018181525050816001600160a01b0316816001815181106127ac576127ac6143d4565b602002602001018181525050836001600160a01b0316816002815181106127d5576127d56143d4565b602090810291909101015260016127ee608060026144ce565b6127f891906144da565b83168160038151811061280d5761280d6143d4565b602002602001018181525050608083901c81600481518110612831576128316143d4565b6020026020010181815250506128456122d3565b6001600160a01b0316632c9dd5c061285b6122f6565b836040518363ffffffff1660e01b81526004016128799291906144ed565b6020604051808303816000875af1158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906141ab565b5050505050565b60006128ce836126b7565b9050818110156129205760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ef565b611f708361292e84846144da565b613464565b60008115801590611028575061102882600167080000000000001160c01b011190565b61092c60405180606001604052806027815260200161478b6027913982613497565b60006129826122f6565b6000036129a15760405162461bcd60e51b81526004016109ef906142c1565b6129aa34612d57565b60006129b46122d3565b6001600160a01b0316633e3aa6c5346129cb6122f6565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc6129f5886134e5565b6040518563ffffffff1660e01b8152600401612a13939291906142ec565b604080518083038185885af1158015612a30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a55919061430b565b509392505050565b600061107764012a05f200614e2061420a565b6060600083612a80576005612a8c565b612a8c60016005614221565b90506000835182612a9d9190614221565b67ffffffffffffffff811115612ab557612ab5614129565b604051908082528060200260200182016040528015612ade578160200160208202803683370190505b509050876001600160a01b031681600081518110612afe57612afe6143d4565b602002602001018181525050336001600160a01b031681600181518110612b2757612b276143d4565b6020026020010181815250508581600281518110612b4757612b476143d4565b60209081029190910101526001612b60608060026144ce565b612b6a91906144da565b871681600381518110612b7f57612b7f6143d4565b602002602001018181525050608087901c81600481518110612ba357612ba36143d4565b6020026020010181815250508415612caa57835181612bc36001856144da565b81518110612bd357612bd36143d4565b60200260200101818152505060005b8451811015612ca857612c1b858281518110612c0057612c006143d4565b6020026020010151600167080000000000001160c01b011190565b612c5e5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ef565b848181518110612c7057612c706143d4565b6020026020010151828483612c859190614221565b81518110612c9557612c956143d4565b6020908102919091010152600101612be2565b505b979650505050505050565b600090815260008051602061476b833981519152602052604090206001015490565b61092c81336136ad565b612ceb82826126ec565b610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0000000000000000000000000000000000000000000000000000000000000000811015612dc05760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ef565b662386f26fc1000081111561092c5760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ef565b80600003612e1957505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8691906141ab565b90506000612e948483614221565b905081811015612ed15760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ef565b6040516001600160a01b0386166024820152306044820152606481018590526000906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612f476001600160a01b03881682613711565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb291906141ab565b90508281146119d05760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ef565b60008082604051602001613017919061438a565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b0382166130815760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b8060000361308e57505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb91906141ab565b9050600061310984836144da565b9050818111156131475760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ef565b6040516001600160a01b03861660248201526044810185905260009063a9059cbb60e01b90606401612f00565b61317e82826126ec565b15610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61092c60405180606001604052806028815260200161469c6028913982613836565b61092c6040518060600160405280602681526020016148126026913982613836565b61092c6040518060600160405280602b815260200161485b602b913982613885565b6132566138b8565b156132c4576132736000805160206146c4833981519152836126ec565b6132bf5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ef565b6132cd565b6132cd826138d9565b6132d56139c7565b15613349576132f26000805160206146e4833981519152826126ec565b610c5b5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ef565b610c5b816139e1565b600061335c613a37565b600061336784613a5a565b815260200190815260200160002054600014159050919050565b60008062455447196001600160a01b0384160161339f57504761340a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340791906141ab565b90505b6000613414613aa7565b90506064613422828461420a565b61342c9190614506565b949350505050565b60006001613440613a37565b600061344b85613a5a565b81526020019081526020016000205461102891906144da565b61346f600182614221565b613477613a37565b600061348285613a5a565b81526020810191909152604001600020555050565b6134a082613003565b156134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b610c5b8282613885565b60408051600480825260a08201909252606091839160009160208201608080368337019050509050836001600160a01b03168160008151811061352a5761352a6143d4565b6020026020010181815250506135a4826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261359f9190810190614528565b613aca565b816001815181106135b7576135b76143d4565b602002602001018181525050613604826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b81600281518110613617576136176143d4565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368591906145ca565b60ff168160038151811061369b5761369b6143d4565b60209081029190910101529392505050565b6136b782826126ec565b610c5b576136cf816001600160a01b03166014613aeb565b6136da836020613aeb565b6040516020016136eb9291906145ed565b60408051601f198184030181529082905262461bcd60e51b82526109ef916004016140f6565b813b6137535760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ef565b600080836001600160a01b03168360405161376e919061438a565b6000604051808303816000865af19150503d80600081146137ab576040519150601f19603f3d011682016040523d82523d6000602084013e6137b0565b606091505b50915091508181906137d55760405162461bcd60e51b81526004016109ef91906140f6565b50805115611d6157808060200190518101906137f19190614662565b611d615760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ef565b600061384183613003565b6001600160a01b0316146134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b600082604051602001613898919061438a565b604051602081830303815290604052805190602001209050818155505050565b6000806138d26000805160206146c4833981519152612cb5565b1415905090565b6138f16000805160206146c483398151915282612ce1565b61391760008051602061472b8339815191526000805160206147f2833981519152613c87565b61393d6000805160206147f28339815191526000805160206146c4833981519152613c87565b6139556000805160206146c483398151915280613c87565b61397b6000805160206148c68339815191526000805160206147f2833981519152613c87565b6139a16000805160206148e68339815191526000805160206147f2833981519152613c87565b61092c60008051602061474b8339815191526000805160206146c4833981519152613c87565b6000806138d26000805160206146e4833981519152612cb5565b6139f96000805160206146e483398151915280613c87565b613a1f6000805160206147d28339815191526000805160206146e4833981519152613c87565b61092c6000805160206146e483398151915282612ce1565b600061107760405180606001604052806027815260200161470460279139613ce7565b600080613a6a6201518042614506565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b60006110776040518060600160405280602b815260200161485b602b9139613003565b600080613adf601f613ada855190565b613d1a565b90506109898382613d30565b60606000613afa83600261420a565b613b05906002614221565b67ffffffffffffffff811115613b1d57613b1d614129565b6040519080825280601f01601f191660200182016040528015613b47576020820181803683370190505b509050600360fc1b81600081518110613b6257613b626143d4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b9157613b916143d4565b60200101906001600160f81b031916908160001a9053506000613bb584600261420a565b613bc0906001614221565b90505b6001811115613c38576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bf457613bf46143d4565b1a60f81b828281518110613c0a57613c0a6143d4565b60200101906001600160f81b031916908160001a90535060049490941c93613c3181614684565b9050613bc3565b5083156109895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ef565b6000613c9283612cb5565b600084815260008051602061476b8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008082604051602001613cfb919061438a565b60408051601f1981840301815291905280516020909101209392505050565b6000818310613d295781610989565b5090919050565b6000601f821115613d755760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ef565b60208381015190600090613d8a9085906144da565b613d9590600861420a565b9190911c949350505050565b6001600160a01b038116811461092c57600080fd5b600060208284031215613dc857600080fd5b813561098981613da1565b600080600060608486031215613de857600080fd5b8335613df381613da1565b95602085013595506040909401359392505050565b60008060008060808587031215613e1e57600080fd5b8435613e2981613da1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310613e7b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613e9457600080fd5b823591506020830135613ea681613da1565b809150509250929050565b60008060208385031215613ec457600080fd5b823567ffffffffffffffff80821115613edc57600080fd5b818501915085601f830112613ef057600080fd5b813581811115613eff57600080fd5b866020828501011115613f1157600080fd5b60209290920196919550909350505050565b600080600060608486031215613f3857600080fd5b8335613f4381613da1565b9250602084013591506040840135613f5a81613da1565b809150509250925092565b600060208284031215613f7757600080fd5b5035919050565b60008083601f840112613f9057600080fd5b50813567ffffffffffffffff811115613fa857600080fd5b6020830191508360208260051b8501011115613fc357600080fd5b9250929050565b60008060008060008060a08789031215613fe357600080fd5b8635613fee81613da1565b95506020870135945060408701359350606087013567ffffffffffffffff81111561401857600080fd5b61402489828a01613f7e565b979a9699509497949695608090950135949350505050565b60008060008060006080868803121561405457600080fd5b853561405f81613da1565b94506020860135935060408601359250606086013567ffffffffffffffff81111561408957600080fd5b61409588828901613f7e565b969995985093965092949392505050565b600080604083850312156140b957600080fd5b82356140c481613da1565b946020939093013593505050565b60005b838110156140ed5781810151838201526020016140d5565b50506000910152565b60208152600082518060208401526141158160408501602087016140d2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b8381101561417057815187529582019590820190600101614154565b509495945050505050565b84815283602082015260806040820152600061419a608083018561413f565b905082606083015295945050505050565b6000602082840312156141bd57600080fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611028576110286141f4565b80820180821115611028576110286141f4565b6000808585111561424457600080fd5b8386111561425157600080fd5b5050820193919092039150565b848152606060208201819052810183905260006001600160fb1b0384111561428557600080fd5b8360051b80866080850137604083019390935250016080019392505050565b6000602082840312156142b657600080fd5b815161098981613da1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b83815282602082015260606040820152600061233b606083018461413f565b6000806040838503121561431e57600080fd5b505080516020909101519092909150565b848152608060208201526000614348608083018661413f565b6040830194909452506060015292915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825161439c8184602087016140d2565b9190910192915050565b600080604083850312156143b957600080fd5b82356143c481613da1565b91506020830135613ea681613da1565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561442557816000190482111561440b5761440b6141f4565b8085161561441857918102915b93841c93908002906143ef565b509250929050565b60008261443c57506001611028565b8161444957506000611028565b816001811461445f576002811461446957614485565b6001915050611028565b60ff84111561447a5761447a6141f4565b50506001821b611028565b5060208310610133831016604e8410600b84101617156144a8575081810a611028565b6144b283836143ea565b80600019048211156144c6576144c66141f4565b029392505050565b6000610989838361442d565b81810381811115611028576110286141f4565b82815260406020820152600061342c604083018461413f565b60008261452357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561453a57600080fd5b815167ffffffffffffffff8082111561455257600080fd5b818401915084601f83011261456657600080fd5b81518181111561457857614578614129565b604051601f8201601f19908116603f011681019083821181831017156145a0576145a0614129565b816040528281528760208487010111156145b957600080fd5b612caa8360208301602088016140d2565b6000602082840312156145dc57600080fd5b815160ff8116811461098957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516146258160178501602088016140d2565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146568160288401602088016140d2565b01602801949350505050565b60006020828403121561467457600080fd5b8151801515811461098957600080fd5b600081614693576146936141f4565b50600019019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f544147537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3457495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212205f9a5b9db6c38b24b13e0fc52789c3e207f0c1feb121b54ab7d98ecaa02daa4964736f6c6343000817003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99","sourceMap":"948:21044:36:-:0;;;442:13:20;459:1;442:18;441:33;;473:1;441:33;;;464:6;441:33;413:61;;;;948:21044:36;;;;;;;;;-1:-1:-1;479:4:45;463:21;;628:4:49;299:31:44;;;;340:21;:19;:21::i;:::-;258:110;948:21044:36;;2533:142:53;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;:::-;2564:111;2533:142::o;2681:1050::-;2782:28;:26;:28::i;:::-;2778:485;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3037:144:53;;;;-1:-1:-1;;;3037:144:53;;216:2:60;3037:144:53;;;198:21:60;255:2;235:18;;;228:30;294:27;274:18;;;267:55;339:18;;3037:144:53;;;;;;;;;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;-1:-1:-1;;;;;4575:31:50;;4552:4;4575:31;;;:14;;:31;:14;:31;;;;;3494:151:53;;;;-1:-1:-1;;;3494:151:53;;570:2:60;3494:151:53;;;552:21:60;609:2;589:18;;;582:30;648:34;628:18;;;621:62;-1:-1:-1;;;699:18:60;;;692:32;741:19;;3494:151:53;368:398:60;3494:151:53;2681:1050;;:::o;3273:452::-;3676:38;3694:19;3676:17;:38::i;2221:152::-;-1:-1:-1;;;;;;;;;;;2282:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2282:4:53;;2305:44;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;253:64;-1:-1:-1;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;861:66;-1:-1:-1;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;1473:66;-1:-1:-1;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;1683:66;-1:-1:-1;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;-1:-1:-1;;;;;;;;;;;2438:4:53;5996:14:50;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;:24;;2438:4:53;;2461:42;5911:116:50;3737:280:53;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;1273:66;-1:-1:-1;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;8830:227:50;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;8433:241::-;8508:25;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;;:24;;;;8564:36;;;;8615:52;;5996:24;;8564:36;;5996:24;;:14;;8615:52;;8508:25;8615:52;8498:176;8433:241;;:::o;368:398:60:-;948:21044:36;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102c95760003560e01c8063757bd9ab11610175578063cdd1f70d116100dc578063deec9c5a11610095578063eeb728661161006f578063eeb7286614610892578063f3fef3a3146108b4578063fa0f73ba146108d4578063fad8b32a146108f457600080fd5b8063deec9c5a14610832578063ed9ef16a14610852578063ee0e68071461087257600080fd5b8063cdd1f70d14610772578063cf50fd1c14610792578063d08fb6cb146107b2578063d12fc182146107d2578063d2b51eea146107f2578063d9fa70911461081257600080fd5b8063a6d1d6c61161012e578063a6d1d6c6146106d7578063ad8b92b4146106f7578063af8bc15e1461070a578063b5cd0c3c1461071f578063be58b18e1461073f578063cb1cccce1461075257600080fd5b8063757bd9ab146106175780637fc2ab3e146106375780638101b64c146106575780638e5224ff146106775780639463629a14610697578063a2bdde3d146106b757600080fd5b80633ea053eb116102345780635a72af89116101ed57806369328dec116101c757806369328dec146105975780636c04d9d5146105b75780636d70f7ae146105d75780636fc97cbf146105f757600080fd5b80635a72af89146105425780636083e59a1461056257806362a143761461057757600080fd5b80633ea053eb1461047f578063439fab911461049f578063496ae54c146104bf5780634baf43da146104ed5780634d8b92a51461050d5780635a5d1bb91461052257600080fd5b806323205c521161028657806323205c52146103985780632f951985146103b857806330ccebb5146103d857806333eeb1471461042b57806336568abe1461043f5780633682a4501461045f57600080fd5b80630b3a2d21146102ce5780630c6f8664146102f05780630e770f23146103255780630efe6a8b1461034557806314af98b3146103585780631789638314610378575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004613db6565b610914565b005b3480156102fc57600080fd5b5061031061030b366004613db6565b61092f565b60405190151581526020015b60405180910390f35b34801561033157600080fd5b506102ee610340366004613db6565b610990565b6102ee610353366004613dd3565b6109a8565b34801561036457600080fd5b506102ee610373366004613db6565b610a64565b34801561038457600080fd5b506102ee610393366004613db6565b610b0c565b3480156103a457600080fd5b506102ee6103b3366004613e08565b610b24565b3480156103c457600080fd5b506102ee6103d3366004613db6565b610c1a565b3480156103e457600080fd5b5061041e6103f3366004613db6565b6001600160a01b031660009081526000805160206148a6833981519152602052604090205460ff1690565b60405161031c9190613e59565b34801561043757600080fd5b506000610310565b34801561044b57600080fd5b506102ee61045a366004613e81565b610c5f565b34801561046b57600080fd5b506102ee61047a366004613db6565b610cf1565b34801561048b57600080fd5b506102ee61049a366004613db6565b610d09565b3480156104ab57600080fd5b506102ee6104ba366004613eb1565b610e36565b3480156104cb57600080fd5b506104df6104da366004613db6565b610fe7565b60405190815260200161031c565b3480156104f957600080fd5b506104df610508366004613db6565b61102e565b34801561051957600080fd5b506104df61106d565b34801561052e57600080fd5b5061031061053d366004613db6565b61107c565b34801561054e57600080fd5b506102ee61055d366004613db6565b611096565b34801561056e57600080fd5b506000196104df565b34801561058357600080fd5b506102ee610592366004613db6565b61113b565b3480156105a357600080fd5b506102ee6105b2366004613f23565b611153565b3480156105c357600080fd5b506103106105d2366004613db6565b611240565b3480156105e357600080fd5b506103106105f2366004613db6565b61125a565b34801561060357600080fd5b506102ee610612366004613db6565b611274565b34801561062357600080fd5b50610310610632366004613db6565b61128c565b34801561064357600080fd5b506102ee610652366004613f65565b6112a6565b34801561066357600080fd5b506102ee610672366004613db6565b6113cb565b34801561068357600080fd5b50610310610692366004613db6565b61140c565b3480156106a357600080fd5b506102ee6106b2366004613db6565b611426565b3480156106c357600080fd5b506103106106d2366004613db6565b61143e565b3480156106e357600080fd5b506102ee6106f2366004613e08565b611458565b6102ee610705366004613db6565b611539565b34801561071657600080fd5b506104df611786565b34801561072b57600080fd5b506102ee61073a366004613fca565b611790565b6102ee61074d36600461403c565b6118c7565b34801561075e57600080fd5b5061031061076d366004613db6565b6119da565b34801561077e57600080fd5b506102ee61078d366004613db6565b6119f4565b34801561079e57600080fd5b506102ee6107ad366004613fca565b611a0c565b3480156107be57600080fd5b506103106107cd366004613db6565b611b28565b3480156107de57600080fd5b506102ee6107ed366004613db6565b611b42565b3480156107fe57600080fd5b506102ee61080d3660046140a6565b611d67565b34801561081e57600080fd5b506102ee61082d366004613db6565b611e70565b34801561083e57600080fd5b506102ee61084d366004613db6565b611e88565b34801561085e57600080fd5b506102ee61086d366004613db6565b611ea0565b34801561087e57600080fd5b506102ee61088d366004613db6565b611eb8565b34801561089e57600080fd5b506108a7611ef9565b60405161031c91906140f6565b3480156108c057600080fd5b506102ee6108cf3660046140a6565b611f19565b3480156108e057600080fd5b506102ee6108ef366004613db6565b611f24565b34801561090057600080fd5b506102ee61090f366004613db6565b611f3c565b61092c6000805160206148e683398151915282611f54565b50565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff16600181600381111561096c5761096c613e43565b14806109895750600281600381111561098757610987613e43565b145b9392505050565b61092c6000805160206147d283398151915282611f54565b826109b28161092f565b6109f85760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064015b60405180910390fd5b6040805160008082526020820190925290610a138686611f75565b90506000610a338787878660008051602061488683398151915287612059565b9050610a528787878660008051602061488683398151915286886121be565b610a5b87611b42565b50505050505050565b610a6d3361128c565b610aaf5760405162461bcd60e51b815260206004820152601360248201527213d3931657d4d150d55492551657d051d15395606a1b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191660011790555133917fe2deca319add01142d26def2de47e64bf1fdc70e6f90c13a1862a48bdaaa7cfd91a350565b61092c6000805160206147f283398151915282611f54565b610b2c6122d3565b6001600160a01b0316636170ff1b610b426122f6565b600080516020614886833981519152610b5c888888612319565b856040518563ffffffff1660e01b8152600401610b7c949392919061417b565b6020604051808303816000875af1158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf91906141ab565b50610bcb848433612344565b604080518481526020810183905283916001600160a01b0387169133917f50485fb0face2cfd73784044ab4191986b4a6713f01854414e2331a6bb41837d91015b60405180910390a450505050565b80336001600160a01b03821603610c435760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206147f28339815191528361234f565b5050565b6000805160206146c483398151915282148015610c9a57507f0000000000000000000000000000000000000000000000000000000000000000155b15610ce75760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e60448201526064016109ef565b610c5b828261236b565b61092c6000805160206148c683398151915282611f54565b33610d126123e5565b6001600160a01b031614610d575760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff166003811115610d9157610d91613e43565b03610dce5760405162461bcd60e51b815260206004820152600d60248201526c2aa725a727aba72faa27a5a2a760991b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020908152604091829020805460ff1916600317905590519182527f86d6e4556eae726303caf49a75add7d92ac713e46db458dab0622aa263fb48e691015b60405180910390a150565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610ea75760405162461bcd60e51b81526020600482015260166024820152751112549150d517d0d0531317d11254d0531313d5d15160521b60448201526064016109ef565b6000610eb481602061420a565b90506000610ec3826020614221565b905080831015610f0b5760405162461bcd60e51b81526020600482015260136024820152721253925517d110551057d513d3d7d4d3505313606a1b60448201526064016109ef565b6000610f1982848688614234565b810190610f269190613db6565b9050366000610f378582888a614234565b91509150366000610f4a8887818c614234565b90925090506001600160a01b03851615610f7457610f69858383612408565b505050505050505050565b610f7c61254a565b15610fcb578015610fc65760405162461bcd60e51b8152602060048201526014602482015273554e45585045435445445f494e49545f4441544160601b60448201526064016109ef565b610f69565b610fd58282612565565b610fdf828261267d565b610f696126ac565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206004015460ff1661101f57600019611028565b611028826126b7565b92915050565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081206003015480156110635780610989565b6000199392505050565b60006110776126d8565b905090565b600061102860008051602061472b833981519152836126ec565b61109f33611b28565b6110e15760405162461bcd60e51b815260206004820152601360248201527227a7262cafa9a2a1aaa924aa2cafa0a226a4a760691b60448201526064016109ef565b6001600160a01b03811660008181526000805160206148a68339815191526020526040808220600401805460ff191690555133917f109dee66091b7a145f557f52c55d7beccb6a29011fc705557e2975749474076b91a350565b61092c6000805160206146e483398151915282611f54565b6001600160a01b03811661119d5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b6111a8838383612724565b6001600160a01b03831660009081526000805160206148a6833981519152602052604090206004015460ff16156111e3576111e383836128c3565b6111ee838383612344565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161123391815260200190565b60405180910390a3505050565b600061102860008051602061474b833981519152836126ec565b60006110286000805160206148c6833981519152836126ec565b61092c60008051602061474b83398151915282611f54565b60006110286000805160206147d2833981519152836126ec565b6112af3361107c565b6112ef5760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b6112f761254a565b6113435760405162461bcd60e51b815260206004820152601860248201527f434f4e54524143545f4e4f545f494e495449414c495a4544000000000000000060448201526064016109ef565b61134c81612933565b6113925760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b61139b81612956565b6040518181527f90fc3f39f8e4669d1bf5f9038707949f8af42a973f62988143be0fa7c3997f1890602001610e2b565b80336001600160a01b038216036113f45760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146e48339815191528361234f565b60006110286000805160206147f2833981519152836126ec565b61092c6000805160206146c483398151915282611f54565b60006110286000805160206148e6833981519152836126ec565b6114606122d3565b6001600160a01b0316637a98660b6114766122f6565b600080516020614886833981519152611490888888612319565b856040518563ffffffff1660e01b81526004016114b0949392919061417b565b6020604051808303816000875af11580156114cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f391906141ab565b50604080518481526020810183905283916001600160a01b0387169133917f8f3da3ce93acd45e015b069c8f032d37be93dc9efcaaeda368aa9ca74f64c30a9101610c0c565b336115426123e5565b6001600160a01b0316146115875760405162461bcd60e51b815260206004820152600c60248201526b27a7262cafa6a0a720a3a2a960a11b60448201526064016109ef565b6001600160a01b03811660009081526000805160206148a6833981519152602052604081205460ff1660038111156115c1576115c1613e43565b146116075760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d053149150511657d1539493d313115160521b60448201526064016109ef565b600061161282612978565b9050600061161e6122d3565b6001600160a01b03166377c7d7a9836040518263ffffffff1660e01b815260040161164b91815260200190565b602060405180830381865afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c91906141ab565b116116d95760405162461bcd60e51b815260206004820152601c60248201527f4445504c4f594d454e545f4d4553534147455f4e4f545f45584953540000000060448201526064016109ef565b6001600160a01b03821660009081526000805160206148a683398151915260205260409020805460ff1916600190811782550181905561171c6206978042614221565b6000805160206148a68339815191526001600160a01b038416600081815260209283526040908190206002019390935582519081529081018390527fb670c236b17dd3aaf925b2bc17b1a1cc9a5c1523d8f620f09e33f4403fb1c73a910160405180910390a15050565b6000611077612a5d565b6117986122d3565b6001600160a01b0316636170ff1b6117ae6122f6565b6000805160206147b28339815191526117fe8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b815260040161181e949392919061417b565b6020604051808303816000875af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906141ab565b5061186d868633612344565b83866001600160a01b0316336001600160a01b03167fa465a02eedf06ceffd1d99159ad98c5d8fa7f17b870eb22e0bfcec06398a8f73888787876040516118b7949392919061425e565b60405180910390a4505050505050565b846118d18161092f565b6119125760405162461bcd60e51b81526020600482015260126024820152711513d2d15397d393d517d4d154959250d15160721b60448201526064016109ef565b600061191e8787611f75565b905060006119738888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508991506120599050565b90506119c78888888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206147b283398151915292508891508990506121be565b6119d088611b42565b5050505050505050565b60006110286000805160206146c4833981519152836126ec565b61092c60008051602061472b83398151915282611f54565b611a146122d3565b6001600160a01b0316637a98660b611a2a6122f6565b6000805160206147b2833981519152611a7a8a8a8a60018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7092505050565b856040518563ffffffff1660e01b8152600401611a9a949392919061417b565b6020604051808303816000875af1158015611ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611add91906141ab565b5083866001600160a01b0316336001600160a01b03167f889e470f207032611b2f68dbd2124e3139794f19a6b536c83892fd5057603860888787876040516118b7949392919061425e565b60006110286000805160206146e4833981519152836126ec565b6001600160a01b03811660009081526000805160206148a68339815191526020526040902054819060019060ff166003811115611b8157611b81613e43565b14611b8a575050565b6001600160a01b03821660009081526000805160206148a6833981519152602052604090206001810154611bbc6122d3565b6001600160a01b03166377c7d7a9826040518263ffffffff1660e01b8152600401611be991815260200190565b602060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a91906141ab565b600003611c4157815460ff19166002178255611d61565b8160020154421115611d61576001600160a01b03841660009081526000805160206148a683398151915260205260408120805460ff199081168255600182018390556002820183905560038201839055600490910180549091169055611ca56123e5565b6001600160a01b0316635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0691906142a4565b604051630caca05160e31b81526001600160a01b03878116600483015291925090821690636565028890602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015610f69573d6000803e3d6000fd5b50505050565b611d703361107c565b611db05760405162461bcd60e51b815260206004820152601160248201527027a7262cafa0a8282fa3a7ab22a92727a960791b60448201526064016109ef565b80600003611e005760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f4d41585f544f54414c5f42414c414e43450000000000000060448201526064016109ef565b816001600160a01b03167fb895637c7d86c9b7b5b747e72195206a3fc21d8df0e019edd2312454ffa733b182604051611e3b91815260200190565b60405180910390a26001600160a01b039190911660009081526000805160206148a68339815191526020526040902060030155565b61092c6000805160206147d28339815191528261234f565b61092c60008051602061472b8339815191528261234f565b61092c60008051602061474b8339815191528261234f565b80336001600160a01b03821603611ee15760405162461bcd60e51b81526004016109ef906141c4565b610c5b6000805160206146c48339815191528361234f565b606060405180606001604052806023815260200161483860239139905090565b610c5b828233611153565b61092c6000805160206148e68339815191528261234f565b61092c6000805160206148c68339815191528261234f565b611f5d82612cb5565b611f6681612cd7565b611f708383612ce1565b505050565b6000611f8034612d57565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611feb91906141ab565b9050611ff68461102e565b6120008483614221565b11156120455760405162461bcd60e51b815260206004820152601460248201527313505617d09053105390d157d15610d15151115160621b60448201526064016109ef565b612050843385612e0c565b50349392505050565b60006120636122f6565b6000036120825760405162461bcd60e51b81526004016109ef906142c1565b600086116120c15760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016109ef565b6120ca85612933565b6121105760405162461bcd60e51b81526020600482015260176024820152764c325f414444524553535f4f55545f4f465f52414e474560481b60448201526064016109ef565b6000805160206147b28339815191528314600061212b6122d3565b6001600160a01b0316633e3aa6c5856121426122f6565b886121508e8e8e8a8f612a70565b6040518563ffffffff1660e01b815260040161216e939291906142ec565b604080518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121b0919061430b565b9a9950505050505050505050565b600080516020614886833981519152830361222857604080518781526020810184905290810182905285906001600160a01b0389169033907f5f971bd00bf3ffbca8a6d72cdd4fd92cfd4f62636161921d1e5a64f0b64ccb6d9060600160405180910390a4610a5b565b6000805160206147b283398151915283146122785760405162461bcd60e51b815260206004820152601060248201526f2aa725a727aba72fa9a2a622a1aa27a960811b60448201526064016109ef565b84876001600160a01b0316336001600160a01b03167f2203a49c69f1a46c1164f5e4a30643dd77b7c59c0ff9bc433256048365c247f1898887876040516122c2949392919061432f565b60405180910390a450505050505050565b600061107760405180606001604052806028815260200161469c60289139613003565b600061107760405180606001604052806027815260200161478b60279139613003565b604080516000808252602082019092526060915061233b858585600085612a70565b95945050505050565b611f70838284613037565b61235882612cb5565b61236181612cd7565b611f708383613174565b6001600160a01b03811633146123db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016109ef565b610c5b8282613174565b600061107760405180606001604052806026815260200161481260269139613003565b6001600160a01b0383163b6124545760405162461bcd60e51b8152602060048201526012602482015271115250d7d393d517d057d0d3d395149050d560721b60448201526064016109ef565b600080846001600160a01b031663439fab9160e01b858560405160240161247c92919061435b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516124ba919061438a565b600060405180830381855af49150503d80600081146124f5576040519150601f19603f3d011682016040523d82523d6000602084013e6124fa565b606091505b509150915081819061251f5760405162461bcd60e51b81526004016109ef91906140f6565b5080518190156125425760405162461bcd60e51b81526004016109ef91906140f6565b505050505050565b6000806125556122d3565b6001600160a01b03161415905090565b604081146125a95760405162461bcd60e51b8152602060048201526011602482015270494c4c4547414c5f444154415f53495a4560781b60448201526064016109ef565b6000806125b8838501856143a6565b915091506125cf816001600160a01b03163b151590565b6126265760405162461bcd60e51b815260206004820152602260248201527f494e56414c49445f4d4553534147494e475f434f4e54524143545f4144445245604482015261535360f01b60648201526084016109ef565b6001600160a01b0382163b611d615760405162461bcd60e51b815260206004820181905260248201527f494e56414c49445f4d414e414745525f434f4e54524143545f4144445245535360448201526064016109ef565b60008061268c838501856143a6565b91509150612699816131e8565b6126a28261320a565b611d61600561322c565b3361092c818061324e565b60006126c282613352565b6126cf5761102882613381565b61102882613434565b600061107764012a05f200620186a061420a565b600091825260008051602061476b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61272c6122f6565b60000361274b5760405162461bcd60e51b81526004016109ef906142c1565b60408051600580825260c082019092526000916020820160a080368337019050509050600081600081518110612783576127836143d4565b602002602001018181525050816001600160a01b0316816001815181106127ac576127ac6143d4565b602002602001018181525050836001600160a01b0316816002815181106127d5576127d56143d4565b602090810291909101015260016127ee608060026144ce565b6127f891906144da565b83168160038151811061280d5761280d6143d4565b602002602001018181525050608083901c81600481518110612831576128316143d4565b6020026020010181815250506128456122d3565b6001600160a01b0316632c9dd5c061285b6122f6565b836040518363ffffffff1660e01b81526004016128799291906144ed565b6020604051808303816000875af1158015612898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bc91906141ab565b5050505050565b60006128ce836126b7565b9050818110156129205760405162461bcd60e51b815260206004820152601d60248201527f455843454544535f474c4f42414c5f57495448445241575f4c494d495400000060448201526064016109ef565b611f708361292e84846144da565b613464565b60008115801590611028575061102882600167080000000000001160c01b011190565b61092c60405180606001604052806027815260200161478b6027913982613497565b60006129826122f6565b6000036129a15760405162461bcd60e51b81526004016109ef906142c1565b6129aa34612d57565b60006129b46122d3565b6001600160a01b0316633e3aa6c5346129cb6122f6565b7f03d78c7ddffebbba7bd7263963b2e0e86b2ed9e990a4fc1b9aed7acd11b37dbc6129f5886134e5565b6040518563ffffffff1660e01b8152600401612a13939291906142ec565b604080518083038185885af1158015612a30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a55919061430b565b509392505050565b600061107764012a05f200614e2061420a565b6060600083612a80576005612a8c565b612a8c60016005614221565b90506000835182612a9d9190614221565b67ffffffffffffffff811115612ab557612ab5614129565b604051908082528060200260200182016040528015612ade578160200160208202803683370190505b509050876001600160a01b031681600081518110612afe57612afe6143d4565b602002602001018181525050336001600160a01b031681600181518110612b2757612b276143d4565b6020026020010181815250508581600281518110612b4757612b476143d4565b60209081029190910101526001612b60608060026144ce565b612b6a91906144da565b871681600381518110612b7f57612b7f6143d4565b602002602001018181525050608087901c81600481518110612ba357612ba36143d4565b6020026020010181815250508415612caa57835181612bc36001856144da565b81518110612bd357612bd36143d4565b60200260200101818152505060005b8451811015612ca857612c1b858281518110612c0057612c006143d4565b6020026020010151600167080000000000001160c01b011190565b612c5e5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4d4553534147455f4441544160601b60448201526064016109ef565b848181518110612c7057612c706143d4565b6020026020010151828483612c859190614221565b81518110612c9557612c956143d4565b6020908102919091010152600101612be2565b505b979650505050505050565b600090815260008051602061476b833981519152602052604090206001015490565b61092c81336136ad565b612ceb82826126ec565b610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0000000000000000000000000000000000000000000000000000000000000000811015612dc05760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4645455f56414c554560501b60448201526064016109ef565b662386f26fc1000081111561092c5760405162461bcd60e51b815260206004820152601260248201527108c8a8abeac8298aa8abea89e9ebe90928e960731b60448201526064016109ef565b80600003612e1957505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8691906141ab565b90506000612e948483614221565b905081811015612ed15760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b60448201526064016109ef565b6040516001600160a01b0386166024820152306044820152606481018590526000906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050612f476001600160a01b03881682613711565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015612f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb291906141ab565b90508281146119d05760405162461bcd60e51b815260206004820152601c60248201527f494e434f52524543545f414d4f554e545f5452414e534645525245440000000060448201526064016109ef565b60008082604051602001613017919061438a565b60408051601f198184030181529190528051602090910120549392505050565b6001600160a01b0382166130815760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109ef565b8060000361308e57505050565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fb91906141ab565b9050600061310984836144da565b9050818111156131475760405162461bcd60e51b8152602060048201526009602482015268554e444552464c4f5760b81b60448201526064016109ef565b6040516001600160a01b03861660248201526044810185905260009063a9059cbb60e01b90606401612f00565b61317e82826126ec565b15610c5b57600082815260008051602061476b833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61092c60405180606001604052806028815260200161469c6028913982613836565b61092c6040518060600160405280602681526020016148126026913982613836565b61092c6040518060600160405280602b815260200161485b602b913982613885565b6132566138b8565b156132c4576132736000805160206146c4833981519152836126ec565b6132bf5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064016109ef565b6132cd565b6132cd826138d9565b6132d56139c7565b15613349576132f26000805160206146e4833981519152826126ec565b610c5b5760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b60648201526084016109ef565b610c5b816139e1565b600061335c613a37565b600061336784613a5a565b815260200190815260200160002054600014159050919050565b60008062455447196001600160a01b0384160161339f57504761340a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156133e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340791906141ab565b90505b6000613414613aa7565b90506064613422828461420a565b61342c9190614506565b949350505050565b60006001613440613a37565b600061344b85613a5a565b81526020019081526020016000205461102891906144da565b61346f600182614221565b613477613a37565b600061348285613a5a565b81526020810191909152604001600020555050565b6134a082613003565b156134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b610c5b8282613885565b60408051600480825260a08201909252606091839160009160208201608080368337019050509050836001600160a01b03168160008151811061352a5761352a6143d4565b6020026020010181815250506135a4826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261359f9190810190614528565b613aca565b816001815181106135b7576135b76143d4565b602002602001018181525050613604826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613577573d6000803e3d6000fd5b81600281518110613617576136176143d4565b602002602001018181525050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368591906145ca565b60ff168160038151811061369b5761369b6143d4565b60209081029190910101529392505050565b6136b782826126ec565b610c5b576136cf816001600160a01b03166014613aeb565b6136da836020613aeb565b6040516020016136eb9291906145ed565b60408051601f198184030181529082905262461bcd60e51b82526109ef916004016140f6565b813b6137535760405162461bcd60e51b81526020600482015260116024820152704241445f544f4b454e5f4144445245535360781b60448201526064016109ef565b600080836001600160a01b03168360405161376e919061438a565b6000604051808303816000865af19150503d80600081146137ab576040519150601f19603f3d011682016040523d82523d6000602084013e6137b0565b606091505b50915091508181906137d55760405162461bcd60e51b81526004016109ef91906140f6565b50805115611d6157808060200190518101906137f19190614662565b611d615760405162461bcd60e51b81526020600482015260166024820152751513d2d15397d3d4115490551253d397d1905253115160521b60448201526064016109ef565b600061384183613003565b6001600160a01b0316146134db5760405162461bcd60e51b815260206004820152600b60248201526a1053149150511657d4d15560aa1b60448201526064016109ef565b600082604051602001613898919061438a565b604051602081830303815290604052805190602001209050818155505050565b6000806138d26000805160206146c4833981519152612cb5565b1415905090565b6138f16000805160206146c483398151915282612ce1565b61391760008051602061472b8339815191526000805160206147f2833981519152613c87565b61393d6000805160206147f28339815191526000805160206146c4833981519152613c87565b6139556000805160206146c483398151915280613c87565b61397b6000805160206148c68339815191526000805160206147f2833981519152613c87565b6139a16000805160206148e68339815191526000805160206147f2833981519152613c87565b61092c60008051602061474b8339815191526000805160206146c4833981519152613c87565b6000806138d26000805160206146e4833981519152612cb5565b6139f96000805160206146e483398151915280613c87565b613a1f6000805160206147d28339815191526000805160206146e4833981519152613c87565b61092c6000805160206146e483398151915282612ce1565b600061107760405180606001604052806027815260200161470460279139613ce7565b600080613a6a6201518042614506565b604080516001600160a01b038616602082015290810182905290915060600160405160208183030381529060405280519060200120915050919050565b60006110776040518060600160405280602b815260200161485b602b9139613003565b600080613adf601f613ada855190565b613d1a565b90506109898382613d30565b60606000613afa83600261420a565b613b05906002614221565b67ffffffffffffffff811115613b1d57613b1d614129565b6040519080825280601f01601f191660200182016040528015613b47576020820181803683370190505b509050600360fc1b81600081518110613b6257613b626143d4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b9157613b916143d4565b60200101906001600160f81b031916908160001a9053506000613bb584600261420a565b613bc0906001614221565b90505b6001811115613c38576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bf457613bf46143d4565b1a60f81b828281518110613c0a57613c0a6143d4565b60200101906001600160f81b031916908160001a90535060049490941c93613c3181614684565b9050613bc3565b5083156109895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ef565b6000613c9283612cb5565b600084815260008051602061476b8339815191526020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008082604051602001613cfb919061438a565b60408051601f1981840301815291905280516020909101209392505050565b6000818310613d295781610989565b5090919050565b6000601f821115613d755760405162461bcd60e51b815260206004820152600f60248201526e535452494e475f544f4f5f4c4f4e4760881b60448201526064016109ef565b60208381015190600090613d8a9085906144da565b613d9590600861420a565b9190911c949350505050565b6001600160a01b038116811461092c57600080fd5b600060208284031215613dc857600080fd5b813561098981613da1565b600080600060608486031215613de857600080fd5b8335613df381613da1565b95602085013595506040909401359392505050565b60008060008060808587031215613e1e57600080fd5b8435613e2981613da1565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310613e7b57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613e9457600080fd5b823591506020830135613ea681613da1565b809150509250929050565b60008060208385031215613ec457600080fd5b823567ffffffffffffffff80821115613edc57600080fd5b818501915085601f830112613ef057600080fd5b813581811115613eff57600080fd5b866020828501011115613f1157600080fd5b60209290920196919550909350505050565b600080600060608486031215613f3857600080fd5b8335613f4381613da1565b9250602084013591506040840135613f5a81613da1565b809150509250925092565b600060208284031215613f7757600080fd5b5035919050565b60008083601f840112613f9057600080fd5b50813567ffffffffffffffff811115613fa857600080fd5b6020830191508360208260051b8501011115613fc357600080fd5b9250929050565b60008060008060008060a08789031215613fe357600080fd5b8635613fee81613da1565b95506020870135945060408701359350606087013567ffffffffffffffff81111561401857600080fd5b61402489828a01613f7e565b979a9699509497949695608090950135949350505050565b60008060008060006080868803121561405457600080fd5b853561405f81613da1565b94506020860135935060408601359250606086013567ffffffffffffffff81111561408957600080fd5b61409588828901613f7e565b969995985093965092949392505050565b600080604083850312156140b957600080fd5b82356140c481613da1565b946020939093013593505050565b60005b838110156140ed5781810151838201526020016140d5565b50506000910152565b60208152600082518060208401526141158160408501602087016140d2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b60008151808452602080850194506020840160005b8381101561417057815187529582019590820190600101614154565b509495945050505050565b84815283602082015260806040820152600061419a608083018561413f565b905082606083015295945050505050565b6000602082840312156141bd57600080fd5b5051919050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611028576110286141f4565b80820180821115611028576110286141f4565b6000808585111561424457600080fd5b8386111561425157600080fd5b5050820193919092039150565b848152606060208201819052810183905260006001600160fb1b0384111561428557600080fd5b8360051b80866080850137604083019390935250016080019392505050565b6000602082840312156142b657600080fd5b815161098981613da1565b602080825260119082015270130c97d094925111d157d393d517d4d155607a1b604082015260600190565b83815282602082015260606040820152600061233b606083018461413f565b6000806040838503121561431e57600080fd5b505080516020909101519092909150565b848152608060208201526000614348608083018661413f565b6040830194909452506060015292915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825161439c8184602087016140d2565b9190910192915050565b600080604083850312156143b957600080fd5b82356143c481613da1565b91506020830135613ea681613da1565b634e487b7160e01b600052603260045260246000fd5b600181815b8085111561442557816000190482111561440b5761440b6141f4565b8085161561441857918102915b93841c93908002906143ef565b509250929050565b60008261443c57506001611028565b8161444957506000611028565b816001811461445f576002811461446957614485565b6001915050611028565b60ff84111561447a5761447a6141f4565b50506001821b611028565b5060208310610133831016604e8410600b84101617156144a8575081810a611028565b6144b283836143ea565b80600019048211156144c6576144c66141f4565b029392505050565b6000610989838361442d565b81810381811115611028576110286141f4565b82815260406020820152600061342c604083018461413f565b60008261452357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561453a57600080fd5b815167ffffffffffffffff8082111561455257600080fd5b818401915084601f83011261456657600080fd5b81518181111561457857614578614129565b604051601f8201601f19908116603f011681019083821181831017156145a0576145a0614129565b816040528281528760208487010111156145b957600080fd5b612caa8360208301602088016140d2565b6000602082840312156145dc57600080fd5b815160ff8116811461098957600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516146258160178501602088016140d2565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146568160288401602088016140d2565b01602801949350505050565b60006020828403121561467457600080fd5b8151801515811461098957600080fd5b600081614693576146936141f4565b50600019019056fe535441524b4e45545f544f4b454e5f4252494447455f4d4553534147494e475f434f4e545241435403711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b357495448445241574c5f4c494d49545f494e5452414441595f51554f54415f534c4f545f54414700d2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060680251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb535441524b4e45545f544f4b454e5f4252494447455f4c325f544f4b454e5f434f4e5452414354008bce41827dd5484d80312a2e43bc42a896e3fcf75bf84c2b49339168dfa00a037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b9603e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99535441524b4e45545f544f4b454e5f4252494447455f4d414e414745525f534c4f545f544147537461726b576172655f537461726b6e6574546f6b656e4272696467655f322e305f3457495448445241574c5f4c494d49545f57495448445241575f4c494d49545f5043545f534c4f545f54414701b64b1b3b690b43b9b514fb81377518f4039cd3e4f4914d8a6bdf01d679fb19c59c20aaa96597268f595db30ec21108a505370e3266ed3a6515637f16b8b689023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3ea26469706673582212205f9a5b9db6c38b24b13e0fc52789c3e207f0c1feb121b54ab7d98ecaa02daa4964736f6c63430008170033","sourceMap":"948:21044:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:116:44;;;;;;;;;;-1:-1:-1;3283:116:44;;;;;:::i;:::-;;:::i;:::-;;7546:220:36;;;;;;;;;;-1:-1:-1;7546:220:36;;;;;:::i;:::-;;:::i;:::-;;;567:14:60;;560:22;542:41;;530:2;515:18;7546:220:36;;;;;;;;3155:122:44;;;;;;;;;;-1:-1:-1;3155:122:44;;;;;:::i;:::-;;:::i;10855:794:36:-;;;;;;:::i;:::-;;:::i;12613:198::-;;;;;;;;;;-1:-1:-1;12613:198:36;;;;;:::i;:::-;;:::i;2651:121:44:-;;;;;;;;;;-1:-1:-1;2651:121:44;;;;;:::i;:::-;;:::i;21500:490:36:-;;;;;;;;;;-1:-1:-1;21500:490:36;;;;;:::i;:::-;;:::i;3680:137:44:-;;;;;;;;;;-1:-1:-1;3680:137:44;;;;;:::i;:::-;;:::i;7412:128:36:-;;;;;;;;;;-1:-1:-1;7412:128:36;;;;;:::i;:::-;-1:-1:-1;;;;;7499:22:36;7469:11;7499:22;;;-1:-1:-1;;;;;;;;;;;7499:22:36;;;;;:34;;;;7412:128;;;;;;;;:::i;757:86:49:-;;;;;;;;;;-1:-1:-1;808:4:49;757:86;;4632:247:44;;;;;;;;;;-1:-1:-1;4632:247:44;;;;;:::i;:::-;;:::i;2910:111::-;;;;;;;;;;-1:-1:-1;2910:111:44;;;;;:::i;:::-;;:::i;8853:272:36:-;;;;;;;;;;-1:-1:-1;8853:272:36;;;;;:::i;:::-;;:::i;1465:1033:49:-;;;;;;;;;;-1:-1:-1;1465:1033:49;;;;;:::i;:::-;;:::i;8031:274:36:-;;;;;;;;;;-1:-1:-1;8031:274:36;;;;;:::i;:::-;;:::i;:::-;;;2983:25:60;;;2971:2;2956:18;8031:274:36;2837:177:60;13793:229:36;;;;;;;;;;-1:-1:-1;13793:229:36;;;;;:::i;:::-;;:::i;4993:120::-;;;;;;;;;;;;;:::i;1359:135:44:-;;;;;;;;;;-1:-1:-1;1359:135:44;;;;;:::i;:::-;;:::i;12877:201:36:-;;;;;;;;;;-1:-1:-1;12877:201:36;;;;;:::i;:::-;;:::i;14161:95::-;;;;;;;;;;-1:-1:-1;;;14161:95:36;;3027:122:44;;;;;;;;;;-1:-1:-1;3027:122:44;;;;;:::i;:::-;;:::i;18032:793:36:-;;;;;;;;;;-1:-1:-1;18032:793:36;;;;;:::i;:::-;;:::i;2356:143:44:-;;;;;;;;;;-1:-1:-1;2356:143:44;;;;;:::i;:::-;;:::i;1793:128::-;;;;;;;;;;-1:-1:-1;1793:128:44;;;;;:::i;:::-;;:::i;3405:126::-;;;;;;;;;;-1:-1:-1;3405:126:44;;;;;:::i;:::-;;:::i;2072:139::-;;;;;;;;;;-1:-1:-1;2072:139:44;;;;;:::i;:::-;;:::i;12240:309:36:-;;;;;;;;;;-1:-1:-1;12240:309:36;;;;;:::i;:::-;;:::i;4087:138:44:-;;;;;;;;;;-1:-1:-1;4087:138:44;;;;;:::i;:::-;;:::i;1500:::-;;;;;;;;;;-1:-1:-1;1500:138:44;;;;;:::i;:::-;;:::i;2778:126::-;;;;;;;;;;-1:-1:-1;2778:126:44;;;;;:::i;:::-;;:::i;2217:133::-;;;;;;;;;;-1:-1:-1;2217:133:44;;;;;:::i;:::-;;:::i;19535:458:36:-;;;;;;;;;;-1:-1:-1;19535:458:36;;;;;:::i;:::-;;:::i;6658:748::-;;;;;;:::i;:::-;;:::i;4873:114::-;;;;;;;;;;;;;:::i;20804:690::-;;;;;;;;;;-1:-1:-1;20804:690:36;;;;;:::i;:::-;;:::i;10053:796::-;;;;;;:::i;:::-;;:::i;1644:143:44:-;;;;;;;;;;-1:-1:-1;1644:143:44;;;;;:::i;:::-;;:::i;2527:118::-;;;;;;;;;;-1:-1:-1;2527:118:44;;;;;:::i;:::-;;:::i;20058:740:36:-;;;;;;;;;;-1:-1:-1;20058:740:36;;;;;:::i;:::-;;:::i;1927:139:44:-;;;;;;;;;;-1:-1:-1;1927:139:44;;;;;:::i;:::-;;:::i;9458:589:36:-;;;;;;;;;;-1:-1:-1;9458:589:36;;;;;:::i;:::-;;:::i;13376:295::-;;;;;;;;;;-1:-1:-1;13376:295:36;;;;;:::i;:::-;;:::i;4231:121:44:-;;;;;;;;;;-1:-1:-1;4231:121:44;;;;;:::i;:::-;;:::i;3557:117::-;;;;;;;;;;-1:-1:-1;3557:117:44;;;;;:::i;:::-;;:::i;4479:125::-;;;;;;;;;;-1:-1:-1;4479:125:44;;;;;:::i;:::-;;:::i;3823:142::-;;;;;;;;;;-1:-1:-1;3823:142:44;;;;;:::i;:::-;;:::i;3016:127:36:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18831:110::-;;;;;;;;;;-1:-1:-1;18831:110:36;;;;;:::i;:::-;;:::i;4358:115:44:-;;;;;;;;;;-1:-1:-1;4358:115:44;;;;;:::i;:::-;;:::i;3971:110::-;;;;;;;;;;-1:-1:-1;3971:110:44;;;;;:::i;:::-;;:::i;3283:116::-;3347:45;-1:-1:-1;;;;;;;;;;;3384:7:44;3347:23;:45::i;:::-;3283:116;:::o;7546:220:36:-;-1:-1:-1;;;;;7645:22:36;;7608:4;7645:22;;;-1:-1:-1;;;;;;;;;;;7645:22:36;;;;;:34;;;;;7697:29;;;;;;;;:::i;:::-;;:61;;;-1:-1:-1;7740:18:36;7730:6;:28;;;;;;;;:::i;:::-;;7697:61;7689:70;7546:220;-1:-1:-1;;;7546:220:36:o;3155:122:44:-;3222:48;-1:-1:-1;;;;;;;;;;;3262:7:44;3222:23;:48::i;10855:794:36:-;10990:5;4803:23;4820:5;4803:16;:23::i;:::-;4795:54;;;;-1:-1:-1;;;4795:54:36;;6712:2:60;4795:54:36;;;6694:21:60;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6770:18:60;;;6763:48;6828:18;;4795:54:36;;;;;;;;;11036:16:::1;::::0;;11007:26:::1;11036:16:::0;;;::::1;::::0;::::1;::::0;;;;11076:28:::1;11090:5:::0;11097:6;11076:13:::1;:28::i;:::-;11062:42;;11114:13;11130:175;11162:5;11181:6;11201:11;11226:9;-1:-1:-1::0;;;;;;;;;;;11292:3:36::1;11130:18;:175::i;:::-;11114:191;;11315:192;11345:5;11364:6;11384:11;11409:9;-1:-1:-1::0;;;;;;;;;;;11475:5:36::1;11494:3;11315:16;:192::i;:::-;11614:28;11636:5;11614:21;:28::i;:::-;10997:652;;;10855:794:::0;;;;:::o;12613:198::-;831:43:44;3290:10:50;2072:139:44;:::i;831:43::-;823:75;;;;-1:-1:-1;;;823:75:44;;7191:2:60;823:75:44;;;7173:21:60;7230:2;7210:18;;;7203:30;-1:-1:-1;;;7249:18:60;;;7242:49;7308:18;;823:75:44;6989:343:60;823:75:44;-1:-1:-1;;;;;12696:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;12696:22:36::1;::::0;;;;;:45:::1;;:52:::0;;-1:-1:-1;;12696:52:36::1;12744:4;12696:52;::::0;;12763:41;12786:10:::1;::::0;12763:41:::1;::::0;::::1;12613:198:::0;:::o;2651:121:44:-;2717:48;-1:-1:-1;;;;;;;;;;;2757:7:44;2717:23;:48::i;21500:490:36:-;21648:19;:17;:19::i;:::-;-1:-1:-1;;;;;21648:39:36;;21701:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;21773:49:36;21795:5;21802:6;21810:11;21773:21;:49::i;:::-;21836:5;21648:203;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21862:43;21879:5;21886:6;21894:10;21862:16;:43::i;:::-;21920:63;;;8625:25:60;;;8681:2;8666:18;;8659:34;;;21964:11:36;;-1:-1:-1;;;;;21920:63:36;;;21937:10;;21920:63;;8598:18:60;21920:63:36;;;;;;;;21500:490;;;;:::o;3680:137:44:-;3742:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3761:49:::1;-1:-1:-1::0;;;;;;;;;;;3802:7:44;3761:24:::1;:49::i;:::-;3680:137:::0;;:::o;4632:247::-;-1:-1:-1;;;;;;;;;;;4708:24:44;;:45;;;;;4737:16;4736:17;4708:45;4704:118;;;4769:42;;-1:-1:-1;;;4769:42:44;;9257:2:60;4769:42:44;;;9239:21:60;;;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;9387:18;;4769:42:44;9055:356:60;4704:118:44;4831:41;4858:4;4864:7;4831:26;:41::i;2910:111::-;2972:42;-1:-1:-1;;;;;;;;;;;3006:7:44;2972:23;:42::i;8853:272:36:-;4546:10;4533:9;:7;:9::i;:::-;-1:-1:-1;;;;;4533:23:36;;4525:48;;;;-1:-1:-1;;;4525:48:36;;9618:2:60;4525:48:36;;;9600:21:60;9657:2;9637:18;;;9630:30;-1:-1:-1;;;9676:18:60;;;9669:42;9728:18;;4525:48:36;9416:336:60;4525:48:36;-1:-1:-1;;;;;8935:22:36;::::1;8973:19;8935:22:::0;;;-1:-1:-1;;;;;;;;;;;8935:22:36::1;::::0;;;;:34;::::1;;:57;::::0;::::1;;;;;;:::i;:::-;::::0;8927:83:::1;;;::::0;-1:-1:-1;;;8927:83:36;;9959:2:60;8927:83:36::1;::::0;::::1;9941:21:60::0;9998:2;9978:18;;;9971:30;-1:-1:-1;;;10017:18:60;;;10010:43;10070:18;;8927:83:36::1;9757:337:60::0;8927:83:36::1;-1:-1:-1::0;;;;;9020:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;9020:22:36::1;::::0;;;;;;;;:60;;-1:-1:-1;;9020:60:36::1;9057:23;9020:60;::::0;;9095:23;;10245:51:60;;;9095:23:36::1;::::0;10218:18:60;9095:23:36::1;;;;;;;;8853:272:::0;:::o;1465:1033:49:-;561:4:45;544:5;-1:-1:-1;;;;;544:22:45;;536:57;;;;-1:-1:-1;;;536:57:45;;10509:2:60;536:57:45;;;10491:21:60;10548:2;10528:18;;;10521:30;-1:-1:-1;;;10567:18:60;;;10560:52;10629:18;;536:57:45;10307:346:60;536:57:45;1543:17:49::1;1563:24;1543:17:::0;1563:2:::1;:24;:::i;:::-;1543:44:::0;-1:-1:-1;1597:24:49::1;1624:14;1543:44:::0;1636:2:::1;1624:14;:::i;:::-;1597:41:::0;-1:-1:-1;1656:31:49;;::::1;;1648:63;;;::::0;-1:-1:-1;;;1648:63:49;;11295:2:60;1648:63:49::1;::::0;::::1;11277:21:60::0;11334:2;11314:18;;;11307:30;-1:-1:-1;;;11353:18:60;;;11346:49;11412:18;;1648:63:49::1;11093:343:60::0;1648:63:49::1;1721:18;1753:32;1768:16:::0;1758:9;1753:4;;:32:::1;:::i;:::-;1742:55;;;;;;;:::i;:::-;1721:76:::0;-1:-1:-1;1808:35:49::1;;1846:16;1852:9:::0;1808:35;1846:4;;:16:::1;:::i;:::-;1808:54;;;;1933:23;;1959;:4:::0;1964:16;1959:4;;:23:::1;:::i;:::-;1933:49:::0;;-1:-1:-1;1933:49:49;-1:-1:-1;;;;;;2077:26:49;::::1;::::0;2073:122:::1;;2119:45;2143:10;2155:8;;2119:23;:45::i;:::-;2178:7;;;;;;;3680:137:44::0;;:::o;2073:122:49:-:1;2209:15;:13;:15::i;:::-;2205:287;;;2248:20:::0;;2240:53:::1;;;::::0;-1:-1:-1;;;2240:53:49;;12239:2:60;2240:53:49::1;::::0;::::1;12221:21:60::0;12278:2;12258:18;;;12251:30;-1:-1:-1;;;12297:18:60;;;12290:50;12357:18;;2240:53:49::1;12037:344:60::0;2240:53:49::1;2205:287;;;2373:26;2390:8;;2373:16;:26::i;:::-;2413:33;2437:8;;2413:23;:33::i;:::-;2460:21;:19;:21::i;8031:274:36:-:0;-1:-1:-1;;;;;8146:22:36;;8108:7;8146:22;;;-1:-1:-1;;;;;;;;;;;8146:22:36;;;;;:45;;;;;:152;;-1:-1:-1;;8146:152:36;;;8210:52;8256:5;8210:45;:52::i;:::-;8127:171;8031:274;-1:-1:-1;;8031:274:36:o;13793:229::-;-1:-1:-1;;;;;13902:22:36;;13857:7;13902:22;;;-1:-1:-1;;;;;;;;;;;13902:22:36;;;;;:38;;;13957:20;;:58;;14000:15;13957:58;;;-1:-1:-1;;13950:65:36;13793:229;-1:-1:-1;;;13793:229:36:o;4993:120::-;5052:7;5078:28;:26;:28::i;:::-;5071:35;;4993:120;:::o;1359:135:44:-;1420:4;1443:44;-1:-1:-1;;;;;;;;;;;1479:7:44;1443:21;:44::i;12877:201:36:-;693:43:44;3290:10:50;1927:139:44;:::i;693:43::-;685:75;;;;-1:-1:-1;;;685:75:44;;12588:2:60;685:75:44;;;12570:21:60;12627:2;12607:18;;;12600:30;-1:-1:-1;;;12646:18:60;;;12639:49;12705:18;;685:75:44;12386:343:60;685:75:44;-1:-1:-1;;;;;12961:22:36;::::1;13009:5;12961:22:::0;;;-1:-1:-1;;;;;;;;;;;12961:22:36::1;::::0;;;;;:45:::1;;:53:::0;;-1:-1:-1;;12961:53:36::1;::::0;;13029:42;13053:10:::1;::::0;13029:42:::1;::::0;::::1;12877:201:::0;:::o;3027:122:44:-;3094:48;-1:-1:-1;;;;;;;;;;;3134:7:44;3094:23;:48::i;18032:793:36:-;-1:-1:-1;;;;;18210:25:36;;18202:55;;;;-1:-1:-1;;;18202:55:36;;12936:2:60;18202:55:36;;;12918:21:60;12975:2;12955:18;;;12948:30;-1:-1:-1;;;12994:18:60;;;12987:47;13051:18;;18202:55:36;12734:341:60;18202:55:36;18401:40;18416:5;18423:6;18431:9;18401:14;:40::i;:::-;-1:-1:-1;;;;;18523:22:36;;;;;;-1:-1:-1;;;;;;;;;;;18523:22:36;;;;;:45;;;;;18519:197;;;18654:51;18691:5;18698:6;18654:36;:51::i;:::-;18725:42;18742:5;18749:6;18757:9;18725:16;:42::i;:::-;18804:5;-1:-1:-1;;;;;18782:36:36;18793:9;-1:-1:-1;;;;;18782:36:36;;18811:6;18782:36;;;;2983:25:60;;2971:2;2956:18;;2837:177;18782:36:36;;;;;;;;18032:793;;;:::o;2356:143:44:-;2421:4;2444:48;-1:-1:-1;;;;;;;;;;;2484:7:44;2444:21;:48::i;1793:128::-;1851:4;1874:40;-1:-1:-1;;;;;;;;;;;1906:7:44;1874:21;:40::i;3405:126::-;3474:50;-1:-1:-1;;;;;;;;;;;3516:7:44;3474:23;:50::i;2072:139::-;2135:4;2158:46;-1:-1:-1;;;;;;;;;;;2196:7:44;2158:21;:46::i;12240:309:36:-;437:41:44;3290:10:50;1359:135:44;:::i;437:41::-;429:71;;;;-1:-1:-1;;;429:71:44;;13282:2:60;429:71:44;;;13264:21:60;13321:2;13301:18;;;13294:30;-1:-1:-1;;;13340:18:60;;;13333:47;13397:18;;429:71:44;13080:341:60;429:71:44;12333:15:36::1;:13;:15::i;:::-;12325:52;;;::::0;-1:-1:-1;;;12325:52:36;;13628:2:60;12325:52:36::1;::::0;::::1;13610:21:60::0;13667:2;13647:18;;;13640:30;13706:26;13686:18;;;13679:54;13750:18;;12325:52:36::1;13426:348:60::0;12325:52:36::1;12395:33;:14;:31;:33::i;:::-;12387:69;;;::::0;-1:-1:-1;;;12387:69:36;;13981:2:60;12387:69:36::1;::::0;::::1;13963:21:60::0;14020:2;14000:18;;;13993:30;-1:-1:-1;;;14039:18:60;;;14032:53;14102:18;;12387:69:36::1;13779:347:60::0;12387:69:36::1;12466:29;12480:14;12466:13;:29::i;:::-;12510:32;::::0;2983:25:60;;;12510:32:36::1;::::0;2971:2:60;2956:18;12510:32:36::1;2837:177:60::0;4087:138:44;4150:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;4169:49:::1;-1:-1:-1::0;;;;;;;;;;;4210:7:44;4169:24:::1;:49::i;1500:138::-:0;1562:4;1585:46;-1:-1:-1;;;;;;;;;;;1623:7:44;1585:21;:46::i;2778:126::-;2847:50;-1:-1:-1;;;;;;;;;;;2889:7:44;2847:23;:50::i;2217:133::-;2277:4;2300:43;-1:-1:-1;;;;;;;;;;;2335:7:44;2300:21;:43::i;19535:458:36:-;19689:19;:17;:19::i;:::-;-1:-1:-1;;;;;19689:50:36;;19753:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;19825:49:36;19847:5;19854:6;19862:11;19825:21;:49::i;:::-;19888:5;19689:214;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19919:67:36;;;8625:25:60;;;8681:2;8666:18;;8659:34;;;19967:11:36;;-1:-1:-1;;;;;19919:67:36;;;19940:10;;19919:67;;8598:18:60;19919:67:36;8451:248:60;6658:748:36;4546:10;4533:9;:7;:9::i;:::-;-1:-1:-1;;;;;4533:23:36;;4525:48;;;;-1:-1:-1;;;4525:48:36;;9618:2:60;4525:48:36;;;9600:21:60;9657:2;9637:18;;;9630:30;-1:-1:-1;;;9676:18:60;;;9669:42;9728:18;;4525:48:36;9416:336:60;4525:48:36;-1:-1:-1;;;;;6762:22:36;::::1;6800:19;6762:22:::0;;;-1:-1:-1;;;;;;;;;;;6762:22:36::1;::::0;;;;:34;::::1;;:57;::::0;::::1;;;;;;:::i;:::-;;6741:126;;;::::0;-1:-1:-1;;;6741:126:36;;14333:2:60;6741:126:36::1;::::0;::::1;14315:21:60::0;14372:2;14352:18;;;14345:30;-1:-1:-1;;;14391:18:60;;;14384:52;14453:18;;6741:126:36::1;14131:346:60::0;6741:126:36::1;6902:25;6930:24;6948:5;6930:17;:24::i;:::-;6902:52;;7042:1;6986:19;:17;:19::i;:::-;-1:-1:-1::0;;;;;6986:34:36::1;;7021:17;6986:53;;;;;;;;;;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;6986:53:36::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;6965:132;;;::::0;-1:-1:-1;;;6965:132:36;;15055:2:60;6965:132:36::1;::::0;::::1;15037:21:60::0;15094:2;15074:18;;;15067:30;15133;15113:18;;;15106:58;15181:18;;6965:132:36::1;14853:352:60::0;6965:132:36::1;-1:-1:-1::0;;;;;7107:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;7107:22:36::1;::::0;;;;:56;;-1:-1:-1;;7107:56:36::1;7144:19;7107:56:::0;;::::1;::::0;;7173:40:::1;:60:::0;;;7296:38:::1;809:6:28;7296:15:36;:38;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;;;;;;7243:22:36;::::1;;::::0;;;::::1;::::0;;;;;;;;:50:::1;;:91:::0;;;;7349:50;;15384:51:60;;;15451:18;;;15444:34;;;7349:50:36::1;::::0;15357:18:60;7349:50:36::1;;;;;;;6731:675;6658:748:::0;:::o;4873:114::-;4929:7;4955:25;:23;:25::i;20804:690::-;20999:19;:17;:19::i;:::-;-1:-1:-1;;;;;20999:39:36;;21052:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;21131:175:36;21170:5;21193:6;21217:11;21246:4;21285:7;;21131:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21131:21:36;;-1:-1:-1;;;21131:175:36:i;:::-;21320:5;20999:336;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21346:43;21363:5;21370:6;21378:10;21346:16;:43::i;:::-;21459:11;21444:5;-1:-1:-1;;;;;21404:83:36;21432:10;-1:-1:-1;;;;;21404:83:36;;21451:6;21472:7;;21481:5;21404:83;;;;;;;;;:::i;:::-;;;;;;;;20804:690;;;;;;:::o;10053:796::-;10235:5;4803:23;4820:5;4803:16;:23::i;:::-;4795:54;;;;-1:-1:-1;;;4795:54:36;;6712:2:60;4795:54:36;;;6694:21:60;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6770:18:60;;;6763:48;6828:18;;4795:54:36;6510:342:60;4795:54:36;10252:11:::1;10266:28;10280:5;10287:6;10266:13;:28::i;:::-;10252:42;;10304:13;10320:180;10352:5;10371:6;10391:11;10416:7;;10320:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;;404:75:28;-1:-1:-1;10487:3:36;;-1:-1:-1;10320:18:36::1;::::0;-1:-1:-1;10320:180:36:i:1;:::-;10304:196;;10510:197;10540:5;10559:6;10579:11;10604:7;;10510:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;;404:75:28;-1:-1:-1;10675:5:36;;-1:-1:-1;10694:3:36;;-1:-1:-1;10510:16:36::1;:197::i;:::-;10814:28;10836:5;10814:21;:28::i;:::-;10242:607;;10053:796:::0;;;;;;:::o;1644:143:44:-;1709:4;1732:48;-1:-1:-1;;;;;;;;;;;1772:7:44;1732:21;:48::i;2527:118::-;2592:46;-1:-1:-1;;;;;;;;;;;2630:7:44;2592:23;:46::i;20058:740:36:-;20259:19;:17;:19::i;:::-;-1:-1:-1;;;;;20259:50:36;;20323:15;:13;:15::i;:::-;-1:-1:-1;;;;;;;;;;;20402:175:36;20441:5;20464:6;20488:11;20517:4;20556:7;;20402:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20402:21:36;;-1:-1:-1;;;20402:175:36:i;:::-;20591:5;20259:347;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20730:11;20691:5;-1:-1:-1;;;;;20622:169:36;20667:10;-1:-1:-1;;;;;20622:169:36;;20710:6;20755:7;;20776:5;20622:169;;;;;;;;;:::i;1927:139:44:-;1990:4;2013:46;-1:-1:-1;;;;;;;;;;;2051:7:44;2013:21;:46::i;9458:589:36:-;-1:-1:-1;;;;;4653:22:36;;;;;;-1:-1:-1;;;;;;;;;;;4653:22:36;;;;;:34;9529:5;;4691:19;;4653:34;;:57;;;;;;;;:::i;:::-;;4649:70;;9458:589;;:::o;4649:70::-;-1:-1:-1;;;;;9579:22:36;::::1;9546:30;9579:22:::0;;;-1:-1:-1;;;;;;;;;;;9579:22:36::1;::::0;;;;9629:26:::1;::::0;::::1;::::0;9670:19:::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;9670:34:36::1;;9705:7;9670:43;;;;;;;;;;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;9670:43:36::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9717:1;9670:48:::0;9666:375:::1;;9734:41:::0;;-1:-1:-1;;9734:41:36::1;9757:18;9734:41;::::0;;9666:375:::1;;;9814:8;:36;;;9796:15;:54;9792:249;;;-1:-1:-1::0;;;;;9873:22:36;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;9873:22:36::1;::::0;;;;9866:29;;-1:-1:-1;;9866:29:36;;::::1;::::0;;-1:-1:-1;9866:29:36;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;9946:9:::1;:7;:9::i;:::-;-1:-1:-1::0;;;;;9928:40:36::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9984:46;::::0;-1:-1:-1;;;9984:46:36;;-1:-1:-1;;;;;10263:32:60;;;9984:46:36::1;::::0;::::1;10245:51:60::0;9909:61:36;;-1:-1:-1;9984:39:36;;::::1;::::0;::::1;::::0;10218:18:60;;9984:46:36::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;9792:249;9536:511;;9458:589:::0;;:::o;13376:295::-;437:41:44;3290:10:50;1359:135:44;:::i;437:41::-;429:71;;;;-1:-1:-1;;;429:71:44;;13282:2:60;429:71:44;;;13264:21:60;13321:2;13301:18;;;13294:30;-1:-1:-1;;;13340:18:60;;;13333:47;13397:18;;429:71:44;13080:341:60;429:71:44;13488:16:36::1;13508:1;13488:21:::0;13480:59:::1;;;::::0;-1:-1:-1;;;13480:59:36;;16539:2:60;13480:59:36::1;::::0;::::1;16521:21:60::0;16578:2;16558:18;;;16551:30;16617:27;16597:18;;;16590:55;16662:18;;13480:59:36::1;16337:349:60::0;13480:59:36::1;13573:5;-1:-1:-1::0;;;;;13554:43:36::1;;13580:16;13554:43;;;;2983:25:60::0;;2971:2;2956:18;;2837:177;13554:43:36::1;;;;;;;;-1:-1:-1::0;;;;;13607:22:36;;;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;13607:22:36::1;::::0;;;;:38:::1;;:57:::0;13376:295::o;4231:121:44:-;4296:49;-1:-1:-1;;;;;;;;;;;4337:7:44;4296:24;:49::i;3557:117::-;3620:47;-1:-1:-1;;;;;;;;;;;3659:7:44;3620:24;:47::i;4479:125::-;4546:51;-1:-1:-1;;;;;;;;;;;4589:7:44;4546:24;:51::i;3823:142::-;3888:7;3290:10:50;-1:-1:-1;;;;;1247:37:44;;;1239:72;;;;-1:-1:-1;;;1239:72:44;;;;;;;:::i;:::-;3907:51:::1;-1:-1:-1::0;;;;;;;;;;;3950:7:44;3907:24:::1;:51::i;3016:127:36:-:0;3067:13;3092:44;;;;;;;;;;;;;;;;;;;3016:127;:::o;18831:110::-;18899:35;18908:5;18915:6;18923:10;18899:8;:35::i;4358:115:44:-;4420:46;-1:-1:-1;;;;;;;;;;;4458:7:44;4420:24;:46::i;3971:110::-;4031:43;-1:-1:-1;;;;;;;;;;;4066:7:44;4031:24;:43::i;6306:130:50:-;6374:18;6387:4;6374:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6404:25:::1;6415:4;6421:7;6404:10;:25::i;:::-;6306:130:::0;;;:::o;5145:381:36:-;5225:7;5244:24;5258:9;5244:13;:24::i;:::-;5303:38;;-1:-1:-1;;;5303:38:36;;5335:4;5303:38;;;10245:51:60;5278:22:36;;-1:-1:-1;;;;;5303:23:36;;;;;10218:18:60;;5303:38:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5278:63;;5386:25;5405:5;5386:18;:25::i;:::-;5359:23;5376:6;5359:14;:23;:::i;:::-;:52;;5351:85;;;;-1:-1:-1;;;5351:85:36;;16893:2:60;5351:85:36;;;16875:21:60;16932:2;16912:18;;;16905:30;-1:-1:-1;;;16951:18:60;;;16944:50;17011:18;;5351:85:36;16691:344:60;5351:85:36;5446:47;5467:5;5474:10;5486:6;5446:20;:47::i;:::-;-1:-1:-1;5510:9:36;;5145:381;-1:-1:-1;;;5145:381:36:o;16565:887::-;16774:7;16801:15;:13;:15::i;:::-;16820:1;16801:20;16793:50;;;;-1:-1:-1;;;16793:50:36;;;;;;;:::i;:::-;16870:1;16861:6;:10;16853:35;;;;-1:-1:-1;;;16853:35:36;;17588:2:60;16853:35:36;;;17570:21:60;17627:2;17607:18;;;17600:30;-1:-1:-1;;;17646:18:60;;;17639:42;17698:18;;16853:35:36;17386:336:60;16853:35:36;16906:30;:11;:28;:30::i;:::-;16898:66;;;;-1:-1:-1;;;16898:66:36;;13981:2:60;16898:66:36;;;13963:21:60;14020:2;14000:18;;;13993:30;-1:-1:-1;;;14039:18:60;;;14032:53;14102:18;;16898:66:36;13779:347:60;16898:66:36;-1:-1:-1;;;;;;;;;;;16992:48:36;;16975:14;17070:19;:17;:19::i;:::-;-1:-1:-1;;;;;17070:35:36;;17113:3;17131:15;:13;:15::i;:::-;17160:8;17182:69;17204:5;17211:6;17219:11;17232:9;17243:7;17182:21;:69::i;:::-;17070:191;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17050:211;16565:887;-1:-1:-1;;;;;;;;;;16565:887:36:o;11655:579::-;-1:-1:-1;;;;;;;;;;;11890:8:36;:41;11886:342;;11952:59;;;18587:25:60;;;18643:2;18628:18;;18621:34;;;18671:18;;;18664:34;;;11987:11:36;;-1:-1:-1;;;;;11952:59:36;;;11960:10;;11952:59;;18575:2:60;18560:18;11952:59:36;;;;;;;11886:342;;;-1:-1:-1;;;;;;;;;;;12050:8:36;:48;12042:77;;;;-1:-1:-1;;;12042:77:36;;18911:2:60;12042:77:36;;;18893:21:60;18950:2;18930:18;;;18923:30;-1:-1:-1;;;18969:18:60;;;18962:46;19025:18;;12042:77:36;18709:340:60;12042:77:36;12184:11;12169:5;-1:-1:-1;;;;;12138:79:36;12157:10;-1:-1:-1;;;;;12138:79:36;;12176:6;12197:7;12206:5;12213:3;12138:79;;;;;;;;;:::i;:::-;;;;;;;;11655:579;;;;;;;:::o;1726:168:38:-;1778:18;1834:52;1863:22;;;;;;;;;;;;;;;;;1834:28;:52::i;1599:121::-;1647:7;1673:40;1699:13;;;;;;;;;;;;;;;;;1673:25;:40::i;15702:425:36:-;15894:16;;;15865:26;15894:16;;;;;;;;;15837;;15865:45;15939:181;15978:5;16001:6;16025:11;16054:5;16097:9;15939:21;:181::i;:::-;15920:200;15702:425;-1:-1:-1;;;;;15702:425:36:o;5532:187::-;5665:47;5687:5;5694:9;5705:6;5665:21;:47::i;6702:132:50:-;6771:18;6784:4;6771:12;:18::i;:::-;4368:16;4379:4;4368:10;:16::i;:::-;6801:26:::1;6813:4;6819:7;6801:11;:26::i;7350:199::-:0;-1:-1:-1;;;;;7430:23:50;;3290:10;7430:23;7422:83;;;;-1:-1:-1;;;7422:83:50;;19737:2:60;7422:83:50;;;19719:21:60;19776:2;19756:18;;;19749:30;19815:34;19795:18;;;19788:62;-1:-1:-1;;;19866:18:60;;;19859:45;19921:19;;7422:83:50;19535:411:60;7422:83:50;7516:26;7528:4;7534:7;7516:11;:26::i;1477:116:38:-;1519:7;1545:41;1574:11;;;;;;;;;;;;;;;;;1545:28;:41::i;2504:540:49:-;-1:-1:-1;;;;;2632:34:49;;474:20:51;2624:67:49;;;;-1:-1:-1;;;2624:67:49;;20153:2:60;2624:67:49;;;20135:21:60;20192:2;20172:18;;;20165:30;-1:-1:-1;;;20211:18:60;;;20204:48;20269:18;;2624:67:49;19951:342:60;2624:67:49;2772:12;2786:23;2813;-1:-1:-1;;;;;2813:36:49;2886:24;;;2912:7;;2863:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2863:57:49;;;;;;;;;;;;;;-1:-1:-1;;;;;2863:57:49;-1:-1:-1;;;;;;2863:57:49;;;;;;;;;;2813:117;;;;2863:57;2813:117;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2771:159;;;;2948:7;2964:10;2940:36;;;;;-1:-1:-1;;;2940:36:49;;;;;;;;:::i;:::-;-1:-1:-1;2994:17:49;;:10;;:22;2986:51;;;;-1:-1:-1;;;2986:51:49;;;;;;;;:::i;:::-;;2614:430;;2504:540;;;:::o;4058:137:36:-;4123:4;;4154:19;:17;:19::i;:::-;-1:-1:-1;;;;;4146:42:36;;;4139:49;;4058:137;:::o;3149:401::-;3260:2;3245:17;;3237:47;;;;-1:-1:-1;;;3237:47:36;;21185:2:60;3237:47:36;;;21167:21:60;21224:2;21204:18;;;21197:30;-1:-1:-1;;;21243:18:60;;;21236:47;21300:18;;3237:47:36;20983:341:60;3237:47:36;3295:16;;3343:36;;;;3354:4;3343:36;:::i;:::-;3294:85;;;;3397:31;:18;-1:-1:-1;;;;;3397:29:36;474:20:51;520:8;;;345:190;3397:31:36;3389:78;;;;-1:-1:-1;;;3389:78:36;;21940:2:60;3389:78:36;;;21922:21:60;21979:2;21959:18;;;21952:30;22018:34;21998:18;;;21991:62;-1:-1:-1;;;22069:18:60;;;22062:32;22111:19;;3389:78:36;21738:398:60;3389:78:36;-1:-1:-1;;;;;3485:19:36;;474:20:51;3477:66:36;;;;-1:-1:-1;;;3477:66:36;;22343:2:60;3477:66:36;;;22325:21:60;;;22362:18;;;22355:30;22421:34;22401:18;;;22394:62;22473:18;;3477:66:36;22141:356:60;3712:340:36;3795:16;;3843:36;;;;3854:4;3843:36;:::i;:::-;3794:85;;;;3889:37;3907:18;3889:17;:37::i;:::-;3936:20;3947:8;3936:10;:20::i;:::-;3966:79;362:1:39;3966:35:36;:79::i;2533:142:53:-;3290:10:50;2632:36:53;3290:10:50;;2632::53;:36::i;2699:247:39:-;2776:7;2800:33;2827:5;2800:26;:33::i;:::-;2795:105;;2856:33;2883:5;2856:26;:33::i;2795:105::-;2916:23;2933:5;2916:16;:23::i;649:129:20:-;705:7;731:40;326:9;189:6;731:40;:::i;4481:132:50:-;4552:4;4575:14;;;-1:-1:-1;;;;;;;;;;;4575:14:50;;;;;;;;-1:-1:-1;;;;;4575:31:50;;;;;;;;;;;;;;;4481:132::o;17458:568:36:-;17597:15;:13;:15::i;:::-;17616:1;17597:20;17589:50;;;;-1:-1:-1;;;17589:50:36;;;;;;;:::i;:::-;17676:16;;;17690:1;17676:16;;;;;;;;;17649:24;;17676:16;;;;;;;;;;-1:-1:-1;17676:16:36;17649:43;;655:1:28;17702:7:36;17710:1;17702:10;;;;;;;;:::i;:::-;;;;;;:35;;;;;17776:9;-1:-1:-1;;;;;17760:27:36;17747:7;17755:1;17747:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;17826:5;-1:-1:-1;;;;;17810:23:36;17797:7;17805:1;17797:10;;;;;;;;:::i;:::-;;;;;;;;;;:36;17886:1;742:25:28;700:3;742:1;:25;:::i;:::-;17866:21:36;;;;:::i;:::-;17856:6;:32;17843:7;17851:1;17843:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;700:3:28;17911:6:36;:32;;17898:7;17906:1;17898:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;17953:19;:17;:19::i;:::-;-1:-1:-1;;;;;17953:40:36;;17994:15;:13;:15::i;:::-;18011:7;17953:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17579:447;17458:568;;;:::o;3107:291:39:-;3187:25;3215:36;3245:5;3215:29;:36::i;:::-;3187:64;;3290:6;3269:17;:27;;3261:69;;;;-1:-1:-1;;;3261:69:39;;24674:2:60;3261:69:39;;;24656:21:60;24713:2;24693:18;;;24686:30;24752:31;24732:18;;;24725:59;24801:18;;3261:69:39;24472:353:60;3261:69:39;3340:51;3357:5;3364:26;3384:6;3364:17;:26;:::i;:::-;3340:16;:51::i;2539:135:41:-;2607:4;2631:14;;;;;:35;;;2649:17;2656:9;-1:-1:-1;;;;;;2762:38:41;2680:128;2051:115:38;2108:51;2138:13;;;;;;;;;;;;;;;;;2153:5;2108:29;:51::i;16133:426:36:-;16193:7;16220:15;:13;:15::i;:::-;16239:1;16220:20;16212:50;;;;-1:-1:-1;;;16212:50:36;;;;;;;:::i;:::-;16272:24;16286:9;16272:13;:24::i;:::-;16308:25;16339:19;:17;:19::i;:::-;-1:-1:-1;;;;;16339:35:36;;16382:9;16406:15;:13;:15::i;:::-;534:76:28;16481:27:36;16502:5;16481:20;:27::i;:::-;16339:179;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16307:211:36;16133:426;-1:-1:-1;;;16133:426:36:o;520:123:20:-;573:7;599:37;326:9;144:5;599:37;:::i;14683:1013:36:-;14878:16;14906:22;14931:11;:114;;2955:1;14931:114;;;14957:51;3008:1;2955;14957:51;:::i;:::-;14906:139;;15055:24;15113:7;:14;15096;:31;;;;:::i;:::-;15082:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15082:46:36;;15055:73;;15167:5;-1:-1:-1;;;;;15151:23:36;15138:7;15146:1;15138:10;;;;;;;;:::i;:::-;;;;;;:36;;;;;15213:10;-1:-1:-1;;;;;15197:28:36;15184:7;15192:1;15184:10;;;;;;;;:::i;:::-;;;;;;:41;;;;;15248:11;15235:7;15243:1;15235:10;;;;;;;;:::i;:::-;;;;;;;;;;:24;15312:1;742:25:28;700:3;742:1;:25;:::i;:::-;15292:21:36;;;;:::i;:::-;15282:6;:32;15269:7;15277:1;15269:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;700:3:28;15337:6:36;:32;;15324:7;15332:1;15324:10;;;;;;;;:::i;:::-;;;;;;:45;;;;;15383:11;15379:287;;;15440:14;;15410:7;15418:18;15435:1;15418:14;:18;:::i;:::-;15410:27;;;;;;;;:::i;:::-;;;;;;:44;;;;;15473:9;15468:188;15492:7;:14;15488:1;:18;15468:188;;;15539:19;:7;15547:1;15539:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;2762:38:41;2680:128;15539:19:36;15531:52;;;;-1:-1:-1;;;15531:52:36;;25032:2:60;15531:52:36;;;25014:21:60;25071:2;25051:18;;;25044:30;-1:-1:-1;;;25090:18:60;;;25083:50;25150:18;;15531:52:36;24830:344:60;15531:52:36;15631:7;15639:1;15631:10;;;;;;;;:::i;:::-;;;;;;;15601:7;15613:14;15609:1;:18;;;;:::i;:::-;15601:27;;;;;;;;:::i;:::-;;;;;;;;;;:40;15508:3;;15468:188;;;;15379:287;15682:7;14683:1013;-1:-1:-1;;;;;;;14683:1013:36:o;5911:116:50:-;5970:7;5996:14;;;-1:-1:-1;;;;;;;;;;;5996:14:50;;;;;:24;;;;5911:116::o;4892:95::-;4950:30;4961:4;3290:10;4950;:30::i;8830:227::-;8905:22;8913:4;8919:7;8905;:22::i;:::-;8900:151;;8943:14;;;;-1:-1:-1;;;;;;;;;;;8943:14:50;;;;;;;;-1:-1:-1;;;;;8943:31:50;;;;;;;;;;:38;;-1:-1:-1;;8943:38:50;8977:4;8943:38;;;9000:40;3290:10;;8943:14;;9000:40;;8943:14;9000:40;8830:227;;:::o;784:175:20:-;860:7;850:6;:17;;842:52;;;;-1:-1:-1;;;842:52:20;;25381:2:60;842:52:20;;;25363:21:60;25420:2;25400:18;;;25393:30;-1:-1:-1;;;25439:18:60;;;25432:52;25501:18;;842:52:20;25179:346:60;842:52:20;507:6;912;:17;;904:48;;;;-1:-1:-1;;;904:48:20;;25732:2:60;904:48:20;;;25714:21:60;25771:2;25751:18;;;25744:30;-1:-1:-1;;;25790:18:60;;;25783:48;25848:18;;904:48:20;25530:342:60;296:751:54;416:6;426:1;416:11;412:24;;296:751;;;:::o;412:24::-;512:35;;-1:-1:-1;;;512:35:54;;541:4;512:35;;;10245:51:60;472:5:54;;445:17;;-1:-1:-1;;;;;512:20:54;;;;;10218:18:60;;512:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;488:59;-1:-1:-1;557:21:54;581:22;597:6;488:59;581:22;:::i;:::-;557:46;;638:13;621;:30;;613:51;;;;-1:-1:-1;;;613:51:54;;26079:2:60;613:51:54;;;26061:21:60;26118:1;26098:18;;;26091:29;-1:-1:-1;;;26136:18:60;;;26129:38;26184:18;;613:51:54;25877:331:60;613:51:54;699:145;;-1:-1:-1;;;;;26471:15:60;;699:145:54;;;26453:34:60;809:4:54;26503:18:60;;;26496:43;26555:18;;;26548:34;;;675:21:54;;-1:-1:-1;;;735:32:54;26388:18:60;;699:145:54;;;;-1:-1:-1;;699:145:54;;;;;;;;;;;;;;-1:-1:-1;;;;;699:145:54;-1:-1:-1;;;;;;699:145:54;;;;;;;;;;;-1:-1:-1;854:37:54;-1:-1:-1;;;;;854:27:54;;699:145;854:27;:37::i;:::-;925:35;;-1:-1:-1;;;925:35:54;;954:4;925:35;;;10245:51:60;902:20:54;;-1:-1:-1;;;;;925:20:54;;;;;10218:18:60;;925:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:58;;994:13;978:12;:29;970:70;;;;-1:-1:-1;;;970:70:54;;26795:2:60;970:70:54;;;26777:21:60;26834:2;26814:18;;;26807:30;26873;26853:18;;;26846:58;26921:18;;970:70:54;26593:352:60;3268:212:52;3336:14;3362:12;3404:4;3387:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:22:52;;;;;;;;;3377:33;;3387:22;3377:33;;;;3453:11;;3268:212;-1:-1:-1;;;3268:212:52:o;1122:848:54:-;-1:-1:-1;;;;;1305:25:54;;1297:55;;;;-1:-1:-1;;;1297:55:54;;12936:2:60;1297:55:54;;;12918:21:60;12975:2;12955:18;;;12948:30;-1:-1:-1;;;12994:18:60;;;12987:47;13051:18;;1297:55:54;12734:341:60;1297:55:54;1366:6;1376:1;1366:11;1362:24;;1122:848;;;:::o;1362:24::-;1462:35;;-1:-1:-1;;;1462:35:54;;1491:4;1462:35;;;10245:51:60;1422:5:54;;1395:17;;-1:-1:-1;;;;;1462:20:54;;;;;10218:18:60;;1462:35:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1438:59;-1:-1:-1;1507:21:54;1531:22;1547:6;1438:59;1531:22;:::i;:::-;1507:46;;1588:13;1571;:30;;1563:52;;;;-1:-1:-1;;;1563:52:54;;27446:2:60;1563:52:54;;;27428:21:60;27485:1;27465:18;;;27458:29;-1:-1:-1;;;27503:18:60;;;27496:39;27552:18;;1563:52:54;27244:332:60;1563:52:54;1650:117;;-1:-1:-1;;;;;15402:32:60;;1650:117:54;;;15384:51:60;15451:18;;;15444:34;;;1626:21:54;;-1:-1:-1;;;1686:28:54;15357:18:60;;1650:117:54;15210:274:60;9216:228:50;9291:22;9299:4;9305:7;9291;:22::i;:::-;9287:151;;;9363:5;9329:14;;;-1:-1:-1;;;;;;;;;;;9329:14:50;;;;;;;;-1:-1:-1;;;;;9329:31:50;;;;;;;;;;:39;;-1:-1:-1;;9329:39:50;;;9387:40;3290:10;;9329:14;;9387:40;;9363:5;9387:40;9216:228;;:::o;2172:139:38:-;2237:67;2270:22;;;;;;;;;;;;;;;;;2294:9;2237:32;:67::i;1924:121::-;1982:56;2015:11;;;;;;;;;;;;;;;;;2028:9;1982:32;:56::i;706:126:39:-;769:56;795:22;;;;;;;;;;;;;;;;;819:5;769:25;:56::i;2681:1050:53:-;2782:28;:26;:28::i;:::-;2778:485;;;3062:60;-1:-1:-1;;;;;;;;;;;3102:19:53;3062:21;:60::i;:::-;3037:144;;;;-1:-1:-1;;;3037:144:53;;28062:2:60;3037:144:53;;;28044:21:60;28101:2;28081:18;;;28074:30;28140:27;28120:18;;;28113:55;28185:18;;3037:144:53;27860:349:60;3037:144:53;2778:485;;;3212:40;3232:19;3212;:40::i;:::-;3277:26;:24;:26::i;:::-;3273:452;;;3519:58;-1:-1:-1;;;;;;;;;;;3557:19:53;3519:21;:58::i;:::-;3494:151;;;;-1:-1:-1;;;3494:151:53;;28416:2:60;3494:151:53;;;28398:21:60;28455:2;28435:18;;;28428:30;28494:34;28474:18;;;28467:62;-1:-1:-1;;;28545:18:60;;;28538:32;28587:19;;3494:151:53;28214:398:60;3273:452:53;3676:38;3694:19;3676:17;:38::i;2081:148:39:-;2154:4;2177:15;:13;:15::i;:::-;:40;2193:23;2210:5;2193:16;:23::i;:::-;2177:40;;;;;;;;;;;;2221:1;2177:45;;2170:52;;2081:148;;;:::o;1233:495::-;1307:7;;-1:-1:-1;;;;;;;1443:12:39;;;1439:167;;-1:-1:-1;1488:21:39;1439:167;;;1557:38;;-1:-1:-1;;;1557:38:39;;1589:4;1557:38;;;10245:51:60;-1:-1:-1;;;;;1557:23:39;;;;;10218:18:60;;1557:38:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1540:55;;1439:167;1615:24;1642:21;:19;:21::i;:::-;1615:48;-1:-1:-1;1718:3:39;1681:33;1615:48;1681:14;:33;:::i;:::-;1680:41;;;;:::i;:::-;1673:48;1233:495;-1:-1:-1;;;;1233:495:39:o;2235:146::-;2299:7;2073:1;2325:15;:13;:15::i;:::-;:40;2341:23;2358:5;2341:16;:23::i;:::-;2325:40;;;;;;;;;;;;:49;;;;:::i;2387:138::-;2504:14;2073:1;2504:5;:14;:::i;:::-;2461:15;:13;:15::i;:::-;:40;2477:23;2494:5;2477:16;:23::i;:::-;2461:40;;;;;;;;;;;-1:-1:-1;2461:40:39;:57;-1:-1:-1;;2387:138:39:o;3093:169:52:-;3181:18;3194:4;3181:12;:18::i;:::-;:23;3173:47;;;;-1:-1:-1;;;3173:47:52;;29041:2:60;3173:47:52;;;29023:21:60;29080:2;29060:18;;;29053:30;-1:-1:-1;;;29099:18:60;;;29092:41;29150:18;;3173:47:52;28839:335:60;3173:47:52;3230:25;3243:4;3249:5;3230:12;:25::i;14262:415:36:-;14438:16;;;14452:1;14438:16;;;;;;;;;14329;;14395:5;;14357:20;;14438:16;;;;;;;;;;-1:-1:-1;14438:16:36;14411:43;;14493:5;-1:-1:-1;;;;;14477:23:36;14464:7;14472:1;14464:10;;;;;;;;:::i;:::-;;;;;;:36;;;;;14523:25;:5;-1:-1:-1;;;;;14523:10:36;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14523:12:36;;;;;;;;;;;;:::i;:::-;:23;:25::i;:::-;14510:7;14518:1;14510:10;;;;;;;;:::i;:::-;;;;;;:38;;;;;14571:27;:5;-1:-1:-1;;;;;14571:12:36;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;14558:7;14566:1;14558:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;14629:5;-1:-1:-1;;;;;14629:14:36;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14621:25;;14608:7;14616:1;14608:10;;;;;;;;:::i;:::-;;;;;;;;;;:38;14663:7;14262:415;-1:-1:-1;;;14262:415:36:o;5257:484:50:-;5337:22;5345:4;5351:7;5337;:22::i;:::-;5332:403;;5520:41;5548:7;-1:-1:-1;;;;;5520:41:50;5558:2;5520:19;:41::i;:::-;5632:38;5660:4;5667:2;5632:19;:38::i;:::-;5427:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5427:265:50;;;;;;;;;;-1:-1:-1;;;5375:349:50;;;;;;;:::i;1001:452:51:-;474:20;;1096:54;;;;-1:-1:-1;;;1096:54:51;;31378:2:60;1096:54:51;;;31360:21:60;31417:2;31397:18;;;31390:30;-1:-1:-1;;;31436:18:60;;;31429:47;31493:18;;1096:54:51;31176:341:60;1096:54:51;1205:12;1219:23;1246:12;-1:-1:-1;;;;;1246:17:51;1264:8;1246:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1204:69;;;;1291:7;1307:10;1283:36;;;;;-1:-1:-1;;;1283:36:51;;;;;;;;:::i;:::-;-1:-1:-1;1334:17:51;;:21;1330:117;;1390:10;1379:30;;;;;;;;;;;;:::i;:::-;1371:65;;;;-1:-1:-1;;;1371:65:51;;32006:2:60;1371:65:51;;;31988:21:60;32045:2;32025:18;;;32018:30;-1:-1:-1;;;32064:18:60;;;32057:52;32126:18;;1371:65:51;31804:346:60;3687:189:52;3811:3;3778:21;3794:4;3778:15;:21::i;:::-;-1:-1:-1;;;;;3778:37:52;;3770:61;;;;-1:-1:-1;;;3770:61:52;;29041:2:60;3770:61:52;;;29023:21:60;29080:2;29060:18;;;29053:30;-1:-1:-1;;;29099:18:60;;;29092:41;29150:18;;3770:61:52;28839:335:60;2895:192:52;2971:12;3013:4;2996:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;2986:33;;;;;;2971:48;;3065:5;3059:4;3052:19;3038:43;2895:192;;:::o;2221:152:53:-;2282:4;;2305:44;-1:-1:-1;;;;;;;;;;;2305:26:53;:44::i;:::-;:61;;2298:68;;2221:152;:::o;4023:559::-;4099:63;-1:-1:-1;;;;;;;;;;;4142:19:53;4099:24;:63::i;:::-;4172:57;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4172:27:53;:57::i;:::-;4239:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4239:27:53;:61::i;:::-;4310:63;-1:-1:-1;;;;;;;;;;;667:66:53;4310:27;:63::i;:::-;4383:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4383:27:53;:53::i;:::-;4446:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4446:27:53;:56::i;:::-;4512:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4512:27:53;:63::i;2379:148::-;2438:4;;2461:42;-1:-1:-1;;;;;;;;;;;2461:26:53;:42::i;3737:280::-;3811:59;-1:-1:-1;;;;;;;;;;;1067:66:53;3811:27;:59::i;:::-;3880;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;3880:27:53;:59::i;:::-;3949:61;-1:-1:-1;;;;;;;;;;;3990:19:53;3949:24;:61::i;1794:165:39:-;1842:35;1896:56;1933:18;;;;;;;;;;;;;;;;;1896:36;:56::i;897:177::-;961:7;;994:23;1012:5;994:15;:23;:::i;:::-;1044:22;;;-1:-1:-1;;;;;15402:32:60;;1044:22:39;;;15384:51:60;15451:18;;;15444:34;;;980:37:39;;-1:-1:-1;15357:18:60;;1044:22:39;;;;;;;;;;;;1034:33;;;;;;1027:40;;;897:177;;;:::o;564:136::-;618:7;644:49;670:22;;;;;;;;;;;;;;;;;644:25;:49::i;1251:191:41:-;1317:7;1336:11;1350:45;716:2;1379:15;1386:7;2380:13;;2205:195;1379:15;1350:3;:45::i;:::-;1336:59;;1412:23;1422:7;1431:3;1412:9;:23::i;1652:441:59:-;1727:13;1752:19;1784:10;1788:6;1784:1;:10;:::i;:::-;:14;;1797:1;1784:14;:::i;:::-;1774:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1774:25:59;;1752:47;;-1:-1:-1;;;1809:6:59;1816:1;1809:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1809:15:59;;;;;;;;;-1:-1:-1;;;1834:6:59;1841:1;1834:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1834:15:59;;;;;;;;-1:-1:-1;1864:9:59;1876:10;1880:6;1876:1;:10;:::i;:::-;:14;;1889:1;1876:14;:::i;:::-;1864:26;;1859:132;1896:1;1892;:5;1859:132;;;-1:-1:-1;;;1943:5:59;1951:3;1943:11;1930:25;;;;;;;:::i;:::-;;;;1918:6;1925:1;1918:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1918:37:59;;;;;;;;-1:-1:-1;1979:1:59;1969:11;;;;;1899:3;;;:::i;:::-;;;1859:132;;;-1:-1:-1;2008:10:59;;2000:55;;;;-1:-1:-1;;;2000:55:59;;32498:2:60;2000:55:59;;;32480:21:60;;;32517:18;;;32510:30;32576:34;32556:18;;;32549:62;32628:18;;2000:55:59;32296:356:60;8433:241:50;8508:25;8536:18;8549:4;8536:12;:18::i;:::-;8564:14;;;;-1:-1:-1;;;;;;;;;;;8564:14:50;;;;;;:24;;:36;;;8615:52;8508:46;;-1:-1:-1;8591:9:50;;8508:46;;8564:14;;8615:52;;8564:14;8615:52;8498:176;8433:241;;:::o;555:298:52:-;655:50;721:16;767:4;750:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;750:22:52;;;;;;;;;740:33;;750:22;740:33;;;;;555:298;-1:-1:-1;;;555:298:52:o;2406:103:41:-;2463:7;2493:1;2489;:5;:13;;2501:1;2489:13;;;-1:-1:-1;2497:1:41;;2482:20;-1:-1:-1;2406:103:41:o;1448:706::-;1528:7;716:2;1555:6;:33;;1547:61;;;;-1:-1:-1;;;1547:61:41;;32859:2:60;1547:61:41;;;32841:21:60;32898:2;32878:18;;;32871:30;-1:-1:-1;;;32917:18:60;;;32910:45;32972:18;;1547:61:41;32657:339:60;1547:61:41;1888:2;1875:16;;;1869:23;;1618:14;;2110:11;;2115:6;;2110:11;:::i;:::-;2105:17;;:1;:17;:::i;:::-;2094:29;;;;;1448:706;-1:-1:-1;;;;1448:706:41:o;14:131:60:-;-1:-1:-1;;;;;89:31:60;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:383::-;671:6;679;687;740:2;728:9;719:7;715:23;711:32;708:52;;;756:1;753;746:12;708:52;795:9;782:23;814:31;839:5;814:31;:::i;:::-;864:5;916:2;901:18;;888:32;;-1:-1:-1;967:2:60;952:18;;;939:32;;594:383;-1:-1:-1;;;594:383:60:o;982:452::-;1068:6;1076;1084;1092;1145:3;1133:9;1124:7;1120:23;1116:33;1113:53;;;1162:1;1159;1152:12;1113:53;1201:9;1188:23;1220:31;1245:5;1220:31;:::i;:::-;1270:5;1322:2;1307:18;;1294:32;;-1:-1:-1;1373:2:60;1358:18;;1345:32;;1424:2;1409:18;1396:32;;-1:-1:-1;982:452:60;-1:-1:-1;;;982:452:60:o;1439:127::-;1500:10;1495:3;1491:20;1488:1;1481:31;1531:4;1528:1;1521:15;1555:4;1552:1;1545:15;1571:345;1720:2;1705:18;;1753:1;1742:13;;1732:144;;1798:10;1793:3;1789:20;1786:1;1779:31;1833:4;1830:1;1823:15;1861:4;1858:1;1851:15;1732:144;1885:25;;;1571:345;:::o;1921:315::-;1989:6;1997;2050:2;2038:9;2029:7;2025:23;2021:32;2018:52;;;2066:1;2063;2056:12;2018:52;2102:9;2089:23;2079:33;;2162:2;2151:9;2147:18;2134:32;2175:31;2200:5;2175:31;:::i;:::-;2225:5;2215:15;;;1921:315;;;;;:::o;2241:591::-;2311:6;2319;2372:2;2360:9;2351:7;2347:23;2343:32;2340:52;;;2388:1;2385;2378:12;2340:52;2428:9;2415:23;2457:18;2498:2;2490:6;2487:14;2484:34;;;2514:1;2511;2504:12;2484:34;2552:6;2541:9;2537:22;2527:32;;2597:7;2590:4;2586:2;2582:13;2578:27;2568:55;;2619:1;2616;2609:12;2568:55;2659:2;2646:16;2685:2;2677:6;2674:14;2671:34;;;2701:1;2698;2691:12;2671:34;2746:7;2741:2;2732:6;2728:2;2724:15;2720:24;2717:37;2714:57;;;2767:1;2764;2757:12;2714:57;2798:2;2790:11;;;;;2820:6;;-1:-1:-1;2241:591:60;;-1:-1:-1;;;;2241:591:60:o;3019:456::-;3096:6;3104;3112;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3220:9;3207:23;3239:31;3264:5;3239:31;:::i;:::-;3289:5;-1:-1:-1;3341:2:60;3326:18;;3313:32;;-1:-1:-1;3397:2:60;3382:18;;3369:32;3410:33;3369:32;3410:33;:::i;:::-;3462:7;3452:17;;;3019:456;;;;;:::o;3480:180::-;3539:6;3592:2;3580:9;3571:7;3567:23;3563:32;3560:52;;;3608:1;3605;3598:12;3560:52;-1:-1:-1;3631:23:60;;3480:180;-1:-1:-1;3480:180:60:o;3665:367::-;3728:8;3738:6;3792:3;3785:4;3777:6;3773:17;3769:27;3759:55;;3810:1;3807;3800:12;3759:55;-1:-1:-1;3833:20:60;;3876:18;3865:30;;3862:50;;;3908:1;3905;3898:12;3862:50;3945:4;3937:6;3933:17;3921:29;;4005:3;3998:4;3988:6;3985:1;3981:14;3973:6;3969:27;3965:38;3962:47;3959:67;;;4022:1;4019;4012:12;3959:67;3665:367;;;;;:::o;4037:778::-;4159:6;4167;4175;4183;4191;4199;4252:3;4240:9;4231:7;4227:23;4223:33;4220:53;;;4269:1;4266;4259:12;4220:53;4308:9;4295:23;4327:31;4352:5;4327:31;:::i;:::-;4377:5;-1:-1:-1;4429:2:60;4414:18;;4401:32;;-1:-1:-1;4480:2:60;4465:18;;4452:32;;-1:-1:-1;4535:2:60;4520:18;;4507:32;4562:18;4551:30;;4548:50;;;4594:1;4591;4584:12;4548:50;4633:70;4695:7;4686:6;4675:9;4671:22;4633:70;:::i;:::-;4037:778;;;;-1:-1:-1;4037:778:60;;;;;4804:3;4789:19;;;4776:33;;4037:778;-1:-1:-1;;;;4037:778:60:o;4820:709::-;4933:6;4941;4949;4957;4965;5018:3;5006:9;4997:7;4993:23;4989:33;4986:53;;;5035:1;5032;5025:12;4986:53;5074:9;5061:23;5093:31;5118:5;5093:31;:::i;:::-;5143:5;-1:-1:-1;5195:2:60;5180:18;;5167:32;;-1:-1:-1;5246:2:60;5231:18;;5218:32;;-1:-1:-1;5301:2:60;5286:18;;5273:32;5328:18;5317:30;;5314:50;;;5360:1;5357;5350:12;5314:50;5399:70;5461:7;5452:6;5441:9;5437:22;5399:70;:::i;:::-;4820:709;;;;-1:-1:-1;4820:709:60;;-1:-1:-1;5488:8:60;;5373:96;4820:709;-1:-1:-1;;;4820:709:60:o;5534:315::-;5602:6;5610;5663:2;5651:9;5642:7;5638:23;5634:32;5631:52;;;5679:1;5676;5669:12;5631:52;5718:9;5705:23;5737:31;5762:5;5737:31;:::i;:::-;5787:5;5839:2;5824:18;;;;5811:32;;-1:-1:-1;;;5534:315:60:o;5854:250::-;5939:1;5949:113;5963:6;5960:1;5957:13;5949:113;;;6039:11;;;6033:18;6020:11;;;6013:39;5985:2;5978:10;5949:113;;;-1:-1:-1;;6096:1:60;6078:16;;6071:27;5854:250::o;6109:396::-;6258:2;6247:9;6240:21;6221:4;6290:6;6284:13;6333:6;6328:2;6317:9;6313:18;6306:34;6349:79;6421:6;6416:2;6405:9;6401:18;6396:2;6388:6;6384:15;6349:79;:::i;:::-;6489:2;6468:15;-1:-1:-1;;6464:29:60;6449:45;;;;6496:2;6445:54;;6109:396;-1:-1:-1;;6109:396:60:o;6857:127::-;6918:10;6913:3;6909:20;6906:1;6899:31;6949:4;6946:1;6939:15;6973:4;6970:1;6963:15;7337:439;7390:3;7428:5;7422:12;7455:6;7450:3;7443:19;7481:4;7510;7505:3;7501:14;7494:21;;7549:4;7542:5;7538:16;7572:1;7582:169;7596:6;7593:1;7590:13;7582:169;;;7657:13;;7645:26;;7691:12;;;;7726:15;;;;7618:1;7611:9;7582:169;;;-1:-1:-1;7767:3:60;;7337:439;-1:-1:-1;;;;;7337:439:60:o;7781:476::-;8044:6;8033:9;8026:25;8087:6;8082:2;8071:9;8067:18;8060:34;8130:3;8125:2;8114:9;8110:18;8103:31;8007:4;8151:57;8203:3;8192:9;8188:19;8180:6;8151:57;:::i;:::-;8143:65;;8244:6;8239:2;8228:9;8224:18;8217:34;7781:476;;;;;;;:::o;8262:184::-;8332:6;8385:2;8373:9;8364:7;8360:23;8356:32;8353:52;;;8401:1;8398;8391:12;8353:52;-1:-1:-1;8424:16:60;;8262:184;-1:-1:-1;8262:184:60:o;8704:346::-;8906:2;8888:21;;;8945:2;8925:18;;;8918:30;-1:-1:-1;;;8979:2:60;8964:18;;8957:52;9041:2;9026:18;;8704:346::o;10658:127::-;10719:10;10714:3;10710:20;10707:1;10700:31;10750:4;10747:1;10740:15;10774:4;10771:1;10764:15;10790:168;10863:9;;;10894;;10911:15;;;10905:22;;10891:37;10881:71;;10932:18;;:::i;10963:125::-;11028:9;;;11049:10;;;11046:36;;;11062:18;;:::i;11441:331::-;11546:9;11557;11599:8;11587:10;11584:24;11581:44;;;11621:1;11618;11611:12;11581:44;11650:6;11640:8;11637:20;11634:40;;;11670:1;11667;11660:12;11634:40;-1:-1:-1;;11696:23:60;;;11741:25;;;;;-1:-1:-1;11441:331:60:o;15489:587::-;15716:25;;;15777:2;15772;15757:18;;15750:30;;;15796:18;;15789:34;;;-1:-1:-1;;;;;;15835:31:60;;15832:51;;;15879:1;15876;15869:12;15832:51;15913:6;15910:1;15906:14;15971:6;15963;15957:3;15946:9;15942:19;15929:49;16058:2;16043:18;;16036:34;;;;-1:-1:-1;15999:22:60;16023:3;15995:32;;15489:587;-1:-1:-1;;;15489:587:60:o;16081:251::-;16151:6;16204:2;16192:9;16183:7;16179:23;16175:32;16172:52;;;16220:1;16217;16210:12;16172:52;16252:9;16246:16;16271:31;16296:5;16271:31;:::i;17040:341::-;17242:2;17224:21;;;17281:2;17261:18;;;17254:30;-1:-1:-1;;;17315:2:60;17300:18;;17293:47;17372:2;17357:18;;17040:341::o;17727:403::-;17962:6;17951:9;17944:25;18005:6;18000:2;17989:9;17985:18;17978:34;18048:2;18043;18032:9;18028:18;18021:30;17925:4;18068:56;18120:2;18109:9;18105:18;18097:6;18068:56;:::i;18135:245::-;18214:6;18222;18275:2;18263:9;18254:7;18250:23;18246:32;18243:52;;;18291:1;18288;18281:12;18243:52;-1:-1:-1;;18314:16:60;;18370:2;18355:18;;;18349:25;18314:16;;18349:25;;-1:-1:-1;18135:245:60:o;19054:476::-;19317:6;19306:9;19299:25;19360:3;19355:2;19344:9;19340:18;19333:31;19280:4;19381:57;19433:3;19422:9;19418:19;19410:6;19381:57;:::i;:::-;19469:2;19454:18;;19447:34;;;;-1:-1:-1;19512:2:60;19497:18;19490:34;19373:65;19054:476;-1:-1:-1;;19054:476:60:o;20298:388::-;20455:2;20444:9;20437:21;20494:6;20489:2;20478:9;20474:18;20467:34;20551:6;20543;20538:2;20527:9;20523:18;20510:48;20607:1;20578:22;;;20602:2;20574:31;;;20567:42;;;;20670:2;20649:15;;;-1:-1:-1;;20645:29:60;20630:45;20626:54;;20298:388;-1:-1:-1;20298:388:60:o;20691:287::-;20820:3;20858:6;20852:13;20874:66;20933:6;20928:3;20921:4;20913:6;20909:17;20874:66;:::i;:::-;20956:16;;;;;20691:287;-1:-1:-1;;20691:287:60:o;21329:404::-;21413:6;21421;21474:2;21462:9;21453:7;21449:23;21445:32;21442:52;;;21490:1;21487;21480:12;21442:52;21529:9;21516:23;21548:31;21573:5;21548:31;:::i;:::-;21598:5;-1:-1:-1;21655:2:60;21640:18;;21627:32;21668:33;21627:32;21668:33;:::i;22502:127::-;22563:10;22558:3;22554:20;22551:1;22544:31;22594:4;22591:1;22584:15;22618:4;22615:1;22608:15;22634:416;22723:1;22760:5;22723:1;22774:270;22795:7;22785:8;22782:21;22774:270;;;22854:4;22850:1;22846:6;22842:17;22836:4;22833:27;22830:53;;;22863:18;;:::i;:::-;22913:7;22903:8;22899:22;22896:55;;;22933:16;;;;22896:55;23012:22;;;;22972:15;;;;22774:270;;;22778:3;22634:416;;;;;:::o;23055:806::-;23104:5;23134:8;23124:80;;-1:-1:-1;23175:1:60;23189:5;;23124:80;23223:4;23213:76;;-1:-1:-1;23260:1:60;23274:5;;23213:76;23305:4;23323:1;23318:59;;;;23391:1;23386:130;;;;23298:218;;23318:59;23348:1;23339:10;;23362:5;;;23386:130;23423:3;23413:8;23410:17;23407:43;;;23430:18;;:::i;:::-;-1:-1:-1;;23486:1:60;23472:16;;23501:5;;23298:218;;23600:2;23590:8;23587:16;23581:3;23575:4;23572:13;23568:36;23562:2;23552:8;23549:16;23544:2;23538:4;23535:12;23531:35;23528:77;23525:159;;;-1:-1:-1;23637:19:60;;;23669:5;;23525:159;23716:34;23741:8;23735:4;23716:34;:::i;:::-;23786:6;23782:1;23778:6;23774:19;23765:7;23762:32;23759:58;;;23797:18;;:::i;:::-;23835:20;;23055:806;-1:-1:-1;;;23055:806:60:o;23866:131::-;23926:5;23955:36;23982:8;23976:4;23955:36;:::i;24002:128::-;24069:9;;;24090:11;;;24087:37;;;24104:18;;:::i;24135:332::-;24342:6;24331:9;24324:25;24385:2;24380;24369:9;24365:18;24358:30;24305:4;24405:56;24457:2;24446:9;24442:18;24434:6;24405:56;:::i;28617:217::-;28657:1;28683;28673:132;;28727:10;28722:3;28718:20;28715:1;28708:31;28762:4;28759:1;28752:15;28790:4;28787:1;28780:15;28673:132;-1:-1:-1;28819:9:60;;28617:217::o;29179:897::-;29259:6;29312:2;29300:9;29291:7;29287:23;29283:32;29280:52;;;29328:1;29325;29318:12;29280:52;29361:9;29355:16;29390:18;29431:2;29423:6;29420:14;29417:34;;;29447:1;29444;29437:12;29417:34;29485:6;29474:9;29470:22;29460:32;;29530:7;29523:4;29519:2;29515:13;29511:27;29501:55;;29552:1;29549;29542:12;29501:55;29581:2;29575:9;29603:2;29599;29596:10;29593:36;;;29609:18;;:::i;:::-;29684:2;29678:9;29652:2;29738:13;;-1:-1:-1;;29734:22:60;;;29758:2;29730:31;29726:40;29714:53;;;29782:18;;;29802:22;;;29779:46;29776:72;;;29828:18;;:::i;:::-;29868:10;29864:2;29857:22;29903:2;29895:6;29888:18;29943:7;29938:2;29933;29929;29925:11;29921:20;29918:33;29915:53;;;29964:1;29961;29954:12;29915:53;29977:68;30042:2;30037;30029:6;30025:15;30020:2;30016;30012:11;29977:68;:::i;30081:273::-;30149:6;30202:2;30190:9;30181:7;30177:23;30173:32;30170:52;;;30218:1;30215;30208:12;30170:52;30250:9;30244:16;30300:4;30293:5;30289:16;30282:5;30279:27;30269:55;;30320:1;30317;30310:12;30359:812;30770:25;30765:3;30758:38;30740:3;30825:6;30819:13;30841:75;30909:6;30904:2;30899:3;30895:12;30888:4;30880:6;30876:17;30841:75;:::i;:::-;-1:-1:-1;;;30975:2:60;30935:16;;;30967:11;;;30960:40;31025:13;;31047:76;31025:13;31109:2;31101:11;;31094:4;31082:17;;31047:76;:::i;:::-;31143:17;31162:2;31139:26;;30359:812;-1:-1:-1;;;;30359:812:60:o;31522:277::-;31589:6;31642:2;31630:9;31621:7;31617:23;31613:32;31610:52;;;31658:1;31655;31648:12;31610:52;31690:9;31684:16;31743:5;31736:13;31729:21;31722:5;31719:32;31709:60;;31765:1;31762;31755:12;32155:136;32194:3;32222:5;32212:39;;32231:18;;:::i;:::-;-1:-1:-1;;;32267:18:60;;32155:136::o","linkReferences":{},"immutableReferences":{"43084":[{"start":11609,"length":32}],"47467":[{"start":3193,"length":32}],"47936":[{"start":3641,"length":32}]}},"methodIdentifiers":{"checkDeploymentStatus(address)":"d12fc182","deactivate(address)":"3ea053eb","deposit(address,uint256,uint256)":"0efe6a8b","depositCancelRequest(address,uint256,uint256,uint256)":"a6d1d6c6","depositReclaim(address,uint256,uint256,uint256)":"23205c52","depositWithMessage(address,uint256,uint256,uint256[])":"be58b18e","depositWithMessageCancelRequest(address,uint256,uint256,uint256[],uint256)":"cf50fd1c","depositWithMessageReclaim(address,uint256,uint256,uint256[],uint256)":"b5cd0c3c","disableWithdrawalLimit(address)":"5a72af89","enableWithdrawalLimit(address)":"14af98b3","enrollToken(address)":"ad8b92b4","estimateDepositFeeWei()":"af8bc15e","estimateEnrollmentFeeWei()":"4d8b92a5","getMaxTotalBalance(address)":"4baf43da","getRemainingIntradayAllowance(address)":"496ae54c","getStatus(address)":"30ccebb5","identify()":"eeb72866","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isFrozen()":"33eeb147","isGovernanceAdmin(address)":"cb1cccce","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isServicingToken(address)":"0c6f8664","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","maxDeposit()":"6083e59a","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","setL2TokenBridge(uint256)":"7fc2ab3e","setMaxTotalBalance(address,uint256)":"d2b51eea","withdraw(address,uint256)":"f3fef3a3","withdraw(address,uint256,address)":"69328dec"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessageCancelRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"DepositWithMessageReclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SetL2TokenBridge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SetMaxTotalBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"deploymentMsgHash\",\"type\":\"bytes32\"}],\"name\":\"TokenEnrollmentInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"WithdrawalLimitDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"WithdrawalLimitEnabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkDeploymentStatus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"deactivate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"}],\"name\":\"depositWithMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositWithMessageCancelRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Recipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"message\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"depositWithMessageReclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"disableWithdrawalLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enableWithdrawalLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enrollToken\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimateDepositFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimateEnrollmentFeeWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getMaxTotalBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRemainingIntradayAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getStatus\",\"outputs\":[{\"internalType\":\"enum StarknetTokenStorage.TokenStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identify\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isServicingToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"l2TokenBridge_\",\"type\":\"uint256\"}],\"name\":\"setL2TokenBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalBalance_\",\"type\":\"uint256\"}],\"name\":\"setMaxTotalBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"deactivate(address)\":{\"params\":{\"token\":\"The address of the token contract to be deactivated. No return value, but it updates the token's status to 'Deactivated'. Emits a `TokenDeactivated` event when the deactivation is successful. Throws an error if the token is not enrolled or if the sender is not the manager.\"}},\"enrollToken(address)\":{\"params\":{\"token\":\"The address of the token contract to be enrolled. No return value, but it updates the token's status to 'Pending' and records the deployment message and expiration time. Emits a `TokenEnrollmentInitiated` event when the enrollment is initiated. Throws an error if the sender is not the manager or if the deployment message does not exist.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkDeploymentStatus(address)\":{\"notice\":\"Checks token deployment status. Relies on Starknet clearing L1-L2 message upon successful completion of deployment. Processing: Check the l1-l2 deployment message. Set status to `active` If consumed. If not consumed after the expected duration, it returns the status to unknown.\"},\"deactivate(address)\":{\"notice\":\"Deactivates a token in the system. This function is used to deactivate a token that was previously enrolled. Only the manager, who initiated the enrollment, can call this function.\"},\"disableWithdrawalLimit(address)\":{\"notice\":\"Unset withdrawal limit for a token.\"},\"enableWithdrawalLimit(address)\":{\"notice\":\"Set withdrawal limit for a token.\"},\"enrollToken(address)\":{\"notice\":\"Initiates the enrollment of a token into the system. This function is used to initiate the enrollment process of a token. The token is marked as 'Pending' because the success of the deployment is uncertain at this stage. The deployment message's existence is checked, indicating that deployment has been attempted. The success of the deployment is determined at a later stage during the application's lifecycle. Only the manager, who initiates the deployment, can call this function.\"},\"getRemainingIntradayAllowance(address)\":{\"notice\":\"Returns the remaining amount of withdrawal allowed for this day. If the daily allowance was not yet set, it is calculated and returned. If the withdraw limit is not enabled for that token - the uint256.max is returned.\"},\"isServicingToken(address)\":{\"notice\":\"Checks whether the calling contract is providing a service for the specified token. Returns True if the calling contract is providing a service for the token, otherwise false.\"},\"setMaxTotalBalance(address,uint256)\":{\"notice\":\"Set the maximum allowed balance of the bridge. Note: It is possible to set a lower value than the current total balance. In this case, deposits will not be possible, until enough withdrawls are done, such that the total balance is below the limit.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/solidity/StarknetTokenBridge.sol\":\"StarknetTokenBridge\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/solidity/Fees.sol\":{\"keccak256\":\"0x6fa10e28a17e78b1465187c9104996abb06b31174fc1eac497e70a150522c63b\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://20948960e5b633ca1db0fccf80de4428278cfae251c203a77a06d4e71bdf618f\",\"dweb:/ipfs/QmT8eEz1bBKDZe7CW7C9PXPU7WDzu29tnWM53K1X9kNupj\"]},\"src/solidity/IStarkgateBridge.sol\":{\"keccak256\":\"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004\",\"dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn\"]},\"src/solidity/IStarkgateManager.sol\":{\"keccak256\":\"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8\",\"dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT\"]},\"src/solidity/IStarkgateRegistry.sol\":{\"keccak256\":\"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172\",\"dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7\"]},\"src/solidity/IStarkgateService.sol\":{\"keccak256\":\"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946\",\"dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx\"]},\"src/solidity/StarkgateConstants.sol\":{\"keccak256\":\"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c\",\"dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx\"]},\"src/solidity/StarkgateManager.sol\":{\"keccak256\":\"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975\",\"dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X\"]},\"src/solidity/StarknetTokenBridge.sol\":{\"keccak256\":\"0x9ed45c3f13d5afeae5a10c63e6dbaf23c6e80c3dc27f8a1290df23e345cbdb13\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://fe75594073da091d7d9380ed5f326b3af1d888eefd22e426635823c187de475d\",\"dweb:/ipfs/QmUqf3kCWaAFzov1kp1Z2YyEqboAqipTzokaimbzFhAxjs\"]},\"src/solidity/StarknetTokenStorage.sol\":{\"keccak256\":\"0xcdcd69d9ff44db4e7a564cb22d6d5ff571f85448785b6712b8edadfc698a1582\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://64f99efd55def7799ada9d6243d00c37007f9573a5ef1e627d830a94d7a33a52\",\"dweb:/ipfs/QmTYGH8AfSDCDnKm9DNuwZXeKTZH4jrtAondVqA8Nmv7AQ\"]},\"src/solidity/WithdrawalLimit.sol\":{\"keccak256\":\"0x873fabcb885ffbb2228b8cc742485718d0fc3d773bfa86334b2146418bc3bb56\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://677065f504fda831def60b0bd8b9d05676cb38f858f11230a482bfa2ca148ad6\",\"dweb:/ipfs/QmPGm9f7kjEX8W1VbZYtj3pXPZj6MgWFEfKY9jX4c8651h\"]},\"src/solidity/utils/Felt252.sol\":{\"keccak256\":\"0x6086a12a4bcb59a3386630e9661a5720f4821169630e01c7287d014f0194a7f8\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://12f16a493c1f91c3ec93c53c3ce4bdb46766ca6e1d425d65bf449d09068742d0\",\"dweb:/ipfs/Qma7yEFLywp53jKCBX1HyKYYL4YJesptVn3zfFcSEX7Y4h\"]},\"starkware/cairo/eth/CairoConstants.sol\":{\"keccak256\":\"0x57c804ac02eda4fb9f9b345a1c088e8a8276e2cfd36ffe6e9878856fe8c12bef\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://916e5076db8f5cf552ce6cf46911ae817d245a704be2815167dc62ffb2b6eddb\",\"dweb:/ipfs/Qme5Wnz1iLGpi9WSnEUb2MAWmXZYrKwPFHarE7VQJr742E\"]},\"starkware/solidity/components/Roles.sol\":{\"keccak256\":\"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3\",\"dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv\"]},\"starkware/solidity/interfaces/BlockDirectCall.sol\":{\"keccak256\":\"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3\",\"dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS\"]},\"starkware/solidity/interfaces/ContractInitializer.sol\":{\"keccak256\":\"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6\",\"dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7\"]},\"starkware/solidity/interfaces/Identity.sol\":{\"keccak256\":\"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888\",\"dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh\"]},\"starkware/solidity/interfaces/ProxySupport.sol\":{\"keccak256\":\"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6\",\"dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4\"]},\"starkware/solidity/libraries/AccessControl.sol\":{\"keccak256\":\"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074\",\"dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e\"]},\"starkware/solidity/libraries/Addresses.sol\":{\"keccak256\":\"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89\",\"dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS\"]},\"starkware/solidity/libraries/NamedStorage.sol\":{\"keccak256\":\"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a\",\"dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi\"]},\"starkware/solidity/libraries/RolesLib.sol\":{\"keccak256\":\"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb\",\"dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL\"]},\"starkware/solidity/libraries/Transfers.sol\":{\"keccak256\":\"0x596ec057b47f24b7776a71a2de0100078c1fbb18d2762cb2501236e79b1331ef\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e595e54d35bd5ad0fbda03b7b105626b8b2a93fe4ee37f158070931e935b16b6\",\"dweb:/ipfs/QmUKYd6GF5YaYWENtZo8NmBcYKuN4svuwyeVxA2CShXYji\"]},\"starkware/solidity/tokens/ERC20/IERC20.sol\":{\"keccak256\":\"0x04bae6eb13e8755ac10de0b0549806dadc167f4e22054f065478dda5bb5635f4\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b097f7cffcdd93ab330be7751bfad246d0d47c63ae0e3a3215b031895c821a68\",\"dweb:/ipfs/QmVZRaTM2vopCZSskT2UMWLPkPQpiYYkRjgDNurrJAMuve\"]},\"starkware/solidity/tokens/ERC20/IERC20Metadata.sol\":{\"keccak256\":\"0x88b3f63040f3cc91d897fb09469ab21cd61388f4861d2e4bc4758d01f8339282\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b359ecd6460824213331e699bf0a70ab72ab9ffd03527a97c5669282a159551a\",\"dweb:/ipfs/QmPPuhpDVGaeFSqoJTxn2k5bDU9agwbnbo5qx99ApGB2BX\"]},\"starkware/starknet/solidity/IStarknetMessaging.sol\":{\"keccak256\":\"0x0b5ad38d2ffea6fdc5dc39d9340871f06c98c56c3faa276f92a542690b57cf64\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9e28c6d7e599915e824ae100975b20174f5fa168904c81c0305facfd3f4f7651\",\"dweb:/ipfs/QmWiRdEkNDyKwigTiXkNbYpTkLj5WUEVo5TLgtfeeSEhmp\"]},\"starkware/starknet/solidity/IStarknetMessagingEvents.sol\":{\"keccak256\":\"0x2f455c3c28792bded72e19d0c1a21af7459b66d6071c3d996f6259c93f096424\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://95302fc273848d1c795344d6e6184c2def7866da81d563ae9ae9b3e9d8fcf7e7\",\"dweb:/ipfs/QmaHb55eq8Su9gEtqe3XbiyQkuf1Pk7CwKJkF9CXYbRrFN\"]},\"third_party/open_zeppelin/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false}],"type":"event","name":"DepositCancelRequest","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false}],"type":"event","name":"DepositReclaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256[]","name":"message","type":"uint256[]","indexed":false},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false},{"internalType":"uint256","name":"fee","type":"uint256","indexed":false}],"type":"event","name":"DepositWithMessage","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256[]","name":"message","type":"uint256[]","indexed":false},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false}],"type":"event","name":"DepositWithMessageCancelRequest","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"uint256","name":"l2Recipient","type":"uint256","indexed":true},{"internalType":"uint256[]","name":"message","type":"uint256[]","indexed":false},{"internalType":"uint256","name":"nonce","type":"uint256","indexed":false}],"type":"event","name":"DepositWithMessageReclaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"SetL2TokenBridge","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"SetMaxTotalBalance","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":false}],"type":"event","name":"TokenDeactivated","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":false},{"internalType":"bytes32","name":"deploymentMsgHash","type":"bytes32","indexed":false}],"type":"event","name":"TokenEnrollmentInitiated","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true}],"type":"event","name":"WithdrawalLimitDisabled","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true}],"type":"event","name":"WithdrawalLimitEnabled","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"checkDeploymentStatus"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deactivate"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"}],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"depositCancelRequest"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"depositReclaim"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"}],"stateMutability":"payable","type":"function","name":"depositWithMessage"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"depositWithMessageCancelRequest"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"l2Recipient","type":"uint256"},{"internalType":"uint256[]","name":"message","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"depositWithMessageReclaim"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"disableWithdrawalLimit"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"enableWithdrawalLimit"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"payable","type":"function","name":"enrollToken"},{"inputs":[],"stateMutability":"pure","type":"function","name":"estimateDepositFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"estimateEnrollmentFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"getMaxTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"getRemainingIntradayAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"getStatus","outputs":[{"internalType":"enum StarknetTokenStorage.TokenStatus","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"isServicingToken","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"uint256","name":"l2TokenBridge_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setL2TokenBridge"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"maxTotalBalance_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMaxTotalBalance"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"}],"devdoc":{"kind":"dev","methods":{"deactivate(address)":{"params":{"token":"The address of the token contract to be deactivated. No return value, but it updates the token's status to 'Deactivated'. Emits a `TokenDeactivated` event when the deactivation is successful. Throws an error if the token is not enrolled or if the sender is not the manager."}},"enrollToken(address)":{"params":{"token":"The address of the token contract to be enrolled. No return value, but it updates the token's status to 'Pending' and records the deployment message and expiration time. Emits a `TokenEnrollmentInitiated` event when the enrollment is initiated. Throws an error if the sender is not the manager or if the deployment message does not exist."}}},"version":1},"userdoc":{"kind":"user","methods":{"checkDeploymentStatus(address)":{"notice":"Checks token deployment status. Relies on Starknet clearing L1-L2 message upon successful completion of deployment. Processing: Check the l1-l2 deployment message. Set status to `active` If consumed. If not consumed after the expected duration, it returns the status to unknown."},"deactivate(address)":{"notice":"Deactivates a token in the system. This function is used to deactivate a token that was previously enrolled. Only the manager, who initiated the enrollment, can call this function."},"disableWithdrawalLimit(address)":{"notice":"Unset withdrawal limit for a token."},"enableWithdrawalLimit(address)":{"notice":"Set withdrawal limit for a token."},"enrollToken(address)":{"notice":"Initiates the enrollment of a token into the system. This function is used to initiate the enrollment process of a token. The token is marked as 'Pending' because the success of the deployment is uncertain at this stage. The deployment message's existence is checked, indicating that deployment has been attempted. The success of the deployment is determined at a later stage during the application's lifecycle. Only the manager, who initiates the deployment, can call this function."},"getRemainingIntradayAllowance(address)":{"notice":"Returns the remaining amount of withdrawal allowed for this day. If the daily allowance was not yet set, it is calculated and returned. If the withdraw limit is not enabled for that token - the uint256.max is returned."},"isServicingToken(address)":{"notice":"Checks whether the calling contract is providing a service for the specified token. Returns True if the calling contract is providing a service for the token, otherwise false."},"setMaxTotalBalance(address,uint256)":{"notice":"Set the maximum allowed balance of the bridge. Note: It is possible to set a lower value than the current total balance. In this case, deposits will not be possible, until enough withdrawls are done, such that the total balance is below the limit."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/solidity/StarknetTokenBridge.sol":"StarknetTokenBridge"},"evmVersion":"paris","libraries":{}},"sources":{"src/solidity/Fees.sol":{"keccak256":"0x6fa10e28a17e78b1465187c9104996abb06b31174fc1eac497e70a150522c63b","urls":["bzz-raw://20948960e5b633ca1db0fccf80de4428278cfae251c203a77a06d4e71bdf618f","dweb:/ipfs/QmT8eEz1bBKDZe7CW7C9PXPU7WDzu29tnWM53K1X9kNupj"],"license":"Apache-2.0."},"src/solidity/IStarkgateBridge.sol":{"keccak256":"0xaf3121a6b46e199a684bcba5a1b43d26167f67454d70bb58cec9ccb9cd831878","urls":["bzz-raw://6e21adb919d6340cd68fa9199c6b54fb209a9ecf8de4ab2918a693313b9aa004","dweb:/ipfs/QmaWoVA3EXV8sSFK5k3ZqDoBYutRpATzPzenH39GZHBqGn"],"license":"Apache-2.0."},"src/solidity/IStarkgateManager.sol":{"keccak256":"0x922e8c094ca384f808971ce133383a1f09a08a407ff9d42390f997c23b92e54c","urls":["bzz-raw://9bcf0a975b59d420a33d66e9ee2148c5a87a5ed717cb8087610750d176fd39d8","dweb:/ipfs/Qmf8nCJwwNN1pSB53wpV6hQzZdyNZtdgBuFt4y6JYX9PuT"],"license":"Apache-2.0."},"src/solidity/IStarkgateRegistry.sol":{"keccak256":"0xb57d52b80f0088308e988f56d04b02f139baae0f4cddfda371413beaf785fca2","urls":["bzz-raw://15e6bff9a16f9a3af5f2fcb4e4a863653e1bc16597f18800b0c4af2e75e73172","dweb:/ipfs/QmZ8uGovu7FcfepY3ZxkYUwbx49mogvGLp72XgUb8i3hv7"],"license":"Apache-2.0."},"src/solidity/IStarkgateService.sol":{"keccak256":"0xd867557468c043dbf6be2a2f98226964338258d108e55481202802311e122da8","urls":["bzz-raw://6db7ee4ebdc4765a12589afb705aea612126b84bae58cb8453568bd12e090946","dweb:/ipfs/QmXYxCtSSfYsxa9uiV1HKFX7puutZ2k2Zm3aCcgGZ5Frmx"],"license":"Apache-2.0."},"src/solidity/StarkgateConstants.sol":{"keccak256":"0x186842131c4c91bc58a6930491fa5619f76cd04d8ba43af9a5888ba21111d642","urls":["bzz-raw://227e204f799af5d6bf452f173270b64c0be880a27d25f82afbddce3f9833e94c","dweb:/ipfs/QmTk93uaih5Qx7KYDK6Fdh9qPeNiWMNkFFHmL98dKP29Qx"],"license":"Apache-2.0."},"src/solidity/StarkgateManager.sol":{"keccak256":"0x547e201622f2d7dc733e74aed2d0a3a6755f021fa047e91a2adb1ae51aad1927","urls":["bzz-raw://3b8694c133d78305a6465075f39957c4ca851774569b0414d6768a29d0bcd975","dweb:/ipfs/QmeS9S5fmjWzZ8EU9MnkyvuDUsy3YFbnBSam3DaLotU97X"],"license":"Apache-2.0."},"src/solidity/StarknetTokenBridge.sol":{"keccak256":"0x9ed45c3f13d5afeae5a10c63e6dbaf23c6e80c3dc27f8a1290df23e345cbdb13","urls":["bzz-raw://fe75594073da091d7d9380ed5f326b3af1d888eefd22e426635823c187de475d","dweb:/ipfs/QmUqf3kCWaAFzov1kp1Z2YyEqboAqipTzokaimbzFhAxjs"],"license":"Apache-2.0."},"src/solidity/StarknetTokenStorage.sol":{"keccak256":"0xcdcd69d9ff44db4e7a564cb22d6d5ff571f85448785b6712b8edadfc698a1582","urls":["bzz-raw://64f99efd55def7799ada9d6243d00c37007f9573a5ef1e627d830a94d7a33a52","dweb:/ipfs/QmTYGH8AfSDCDnKm9DNuwZXeKTZH4jrtAondVqA8Nmv7AQ"],"license":"Apache-2.0."},"src/solidity/WithdrawalLimit.sol":{"keccak256":"0x873fabcb885ffbb2228b8cc742485718d0fc3d773bfa86334b2146418bc3bb56","urls":["bzz-raw://677065f504fda831def60b0bd8b9d05676cb38f858f11230a482bfa2ca148ad6","dweb:/ipfs/QmPGm9f7kjEX8W1VbZYtj3pXPZj6MgWFEfKY9jX4c8651h"],"license":"Apache-2.0."},"src/solidity/utils/Felt252.sol":{"keccak256":"0x6086a12a4bcb59a3386630e9661a5720f4821169630e01c7287d014f0194a7f8","urls":["bzz-raw://12f16a493c1f91c3ec93c53c3ce4bdb46766ca6e1d425d65bf449d09068742d0","dweb:/ipfs/Qma7yEFLywp53jKCBX1HyKYYL4YJesptVn3zfFcSEX7Y4h"],"license":"Apache-2.0."},"starkware/cairo/eth/CairoConstants.sol":{"keccak256":"0x57c804ac02eda4fb9f9b345a1c088e8a8276e2cfd36ffe6e9878856fe8c12bef","urls":["bzz-raw://916e5076db8f5cf552ce6cf46911ae817d245a704be2815167dc62ffb2b6eddb","dweb:/ipfs/Qme5Wnz1iLGpi9WSnEUb2MAWmXZYrKwPFHarE7VQJr742E"],"license":"Apache-2.0."},"starkware/solidity/components/Roles.sol":{"keccak256":"0xfb44a782d25daf9906eed2bf0b851297a44236f959327f3cbaf872957e0df7cf","urls":["bzz-raw://964f3947cbf5b5a5bdad8de12cd3dd7a8a834b576fac1b1cb35cb7fc6ade76c3","dweb:/ipfs/QmfMqnZ4f6DJALUrYMzvxYv3T6nCnxiXXcm6vcYV841dbv"],"license":"Apache-2.0."},"starkware/solidity/interfaces/BlockDirectCall.sol":{"keccak256":"0x7515367c6834021f1c29ae9cc217d2cf8b9af394e17f9772a82b33865e71d6a6","urls":["bzz-raw://3b7078e5b739b2d551c790d154a8b99e9fdc9407046b21b8e93c0a91415f3af3","dweb:/ipfs/QmW5kYo5wMkEqcgSJGUVeP28qXMZPVcE6ZnopmhEf1irsS"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ContractInitializer.sol":{"keccak256":"0x5c04c50115659d88f74c4a3bb27af15b9f4d302be78a057b0c092e7c065ab36a","urls":["bzz-raw://45ad3e4b332ba7e99855ab84ef539c106021d0a2a45253e4cb2ab045aba81fa6","dweb:/ipfs/QmVWoh7scguCuzB5YgzujC2cWMA3priCn6RNZmasCNwGv7"],"license":"Apache-2.0."},"starkware/solidity/interfaces/Identity.sol":{"keccak256":"0x18b8ab7a912a2fca2567ad2adc811d9ed9123d5b2a8bdda77741581c2f7c9a08","urls":["bzz-raw://cf3cc21679c63e2e5481c0ceeba85a476ba10d11fd942e9f149ccbe4a1ee2888","dweb:/ipfs/QmUdC8rH8JX6ZSJ6ddF77hJADRJCbjLjVee92E7ZmagxHh"],"license":"Apache-2.0."},"starkware/solidity/interfaces/ProxySupport.sol":{"keccak256":"0x438167266a83e218bab512a996f5d30e3071dc552d407a8ab600511b4975c01a","urls":["bzz-raw://2f998adb2dff0baef1dfa08b6d6cd35248246cda7334598d8c2c24fc835073c6","dweb:/ipfs/QmX7t9h2aLu9HiEN371ipyrGSm6qW2EyrKbPhCWAimmmQ4"],"license":"Apache-2.0."},"starkware/solidity/libraries/AccessControl.sol":{"keccak256":"0x3b5af42da4adb23a3c56d62968b2a0058650c3f19c4ec0323f8c3958a02f2d32","urls":["bzz-raw://7cb26cce13390c59767822b9b317505757ee2438b7a1481fb4ee0435cf98b074","dweb:/ipfs/QmdULczhMowp2aCJSt7z4KQGrMjPzEZjGU4YyqEemwM22e"],"license":"MIT"},"starkware/solidity/libraries/Addresses.sol":{"keccak256":"0xf10c7ae374d9fa0599e2ee71ffaf882a96befca2793dbb600bfd080bae9f6179","urls":["bzz-raw://4d490f6daab8d654021f912d1fe3f676fb77fa15117ac706a8024d192047dc89","dweb:/ipfs/QmYmYtGkzDvTxodvUXobWqwQZoppN4iYM1ATD7aSEhzgzS"],"license":"Apache-2.0."},"starkware/solidity/libraries/NamedStorage.sol":{"keccak256":"0x73e777cd0ae5f60889e4784b788c345bc3a3edc6a7ec3eab636b3701f2a1f66e","urls":["bzz-raw://979e827ca68e8b00e8598cd67d0de96f10b5cb03197870e1f9a871533ca84e4a","dweb:/ipfs/QmPjoWoRTBRiVnNJ576hCuqr3UVoGomDmSdipFKoUZUpJi"],"license":"Apache-2.0."},"starkware/solidity/libraries/RolesLib.sol":{"keccak256":"0x2497bfb416c91633e1f373de9dbdbd85bd8cdb3d36a74df941ad392d8036a8c0","urls":["bzz-raw://7fd51947b57ca6ecf0c4d433def5b8793213d5c281dea1b2145bb13e6be483bb","dweb:/ipfs/QmXFCfdQJ9SsoMxbLXPMRkiC6jqmddnsn4T7KXs4fcdweL"],"license":"Apache-2.0."},"starkware/solidity/libraries/Transfers.sol":{"keccak256":"0x596ec057b47f24b7776a71a2de0100078c1fbb18d2762cb2501236e79b1331ef","urls":["bzz-raw://e595e54d35bd5ad0fbda03b7b105626b8b2a93fe4ee37f158070931e935b16b6","dweb:/ipfs/QmUKYd6GF5YaYWENtZo8NmBcYKuN4svuwyeVxA2CShXYji"],"license":"Apache-2.0."},"starkware/solidity/tokens/ERC20/IERC20.sol":{"keccak256":"0x04bae6eb13e8755ac10de0b0549806dadc167f4e22054f065478dda5bb5635f4","urls":["bzz-raw://b097f7cffcdd93ab330be7751bfad246d0d47c63ae0e3a3215b031895c821a68","dweb:/ipfs/QmVZRaTM2vopCZSskT2UMWLPkPQpiYYkRjgDNurrJAMuve"],"license":"Apache-2.0."},"starkware/solidity/tokens/ERC20/IERC20Metadata.sol":{"keccak256":"0x88b3f63040f3cc91d897fb09469ab21cd61388f4861d2e4bc4758d01f8339282","urls":["bzz-raw://b359ecd6460824213331e699bf0a70ab72ab9ffd03527a97c5669282a159551a","dweb:/ipfs/QmPPuhpDVGaeFSqoJTxn2k5bDU9agwbnbo5qx99ApGB2BX"],"license":"Apache-2.0."},"starkware/starknet/solidity/IStarknetMessaging.sol":{"keccak256":"0x0b5ad38d2ffea6fdc5dc39d9340871f06c98c56c3faa276f92a542690b57cf64","urls":["bzz-raw://9e28c6d7e599915e824ae100975b20174f5fa168904c81c0305facfd3f4f7651","dweb:/ipfs/QmWiRdEkNDyKwigTiXkNbYpTkLj5WUEVo5TLgtfeeSEhmp"],"license":"Apache-2.0."},"starkware/starknet/solidity/IStarknetMessagingEvents.sol":{"keccak256":"0x2f455c3c28792bded72e19d0c1a21af7459b66d6071c3d996f6259c93f096424","urls":["bzz-raw://95302fc273848d1c795344d6e6184c2def7866da81d563ae9ae9b3e9d8fcf7e7","dweb:/ipfs/QmaHb55eq8Su9gEtqe3XbiyQkuf1Pk7CwKJkF9CXYbRrFN"],"license":"Apache-2.0."},"third_party/open_zeppelin/utils/Strings.sol":{"keccak256":"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3","urls":["bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638","dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9"],"license":"MIT"}},"version":1},"id":36} \ No newline at end of file diff --git a/crates/starknet-token-bridge-client/src/clients/mod.rs b/crates/starknet-token-bridge-client/src/clients/mod.rs new file mode 100644 index 0000000..9ac28cf --- /dev/null +++ b/crates/starknet-token-bridge-client/src/clients/mod.rs @@ -0,0 +1,2 @@ +pub mod token_bridge; +pub use token_bridge::*; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/clients/token_bridge.rs b/crates/starknet-token-bridge-client/src/clients/token_bridge.rs similarity index 87% rename from crates/starknet-core-contract-client/src/clients/token_bridge.rs rename to crates/starknet-token-bridge-client/src/clients/token_bridge.rs index 8e2ad46..1746eed 100644 --- a/crates/starknet-core-contract-client/src/clients/token_bridge.rs +++ b/crates/starknet-token-bridge-client/src/clients/token_bridge.rs @@ -1,8 +1,8 @@ use std::sync::Arc; -use crate::{interfaces::{ - StarknetTokenBridge, ProxySupport -}, LocalWalletSignerMiddleware, StarknetContractClient}; +use starknet_proxy_client::proxy_support::ProxySupport; +use utils::{ LocalWalletSignerMiddleware, StarknetContractClient }; +use crate::interfaces::token_bridge::StarknetTokenBridge; use ethers::types::Address; diff --git a/crates/starknet-token-bridge-client/src/interfaces/mod.rs b/crates/starknet-token-bridge-client/src/interfaces/mod.rs new file mode 100644 index 0000000..f6dcfb4 --- /dev/null +++ b/crates/starknet-token-bridge-client/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod token_bridge; \ No newline at end of file diff --git a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs b/crates/starknet-token-bridge-client/src/interfaces/token_bridge.rs similarity index 99% rename from crates/starknet-core-contract-client/src/interfaces/token_bridge.rs rename to crates/starknet-token-bridge-client/src/interfaces/token_bridge.rs index 78e35d7..916d6aa 100644 --- a/crates/starknet-core-contract-client/src/interfaces/token_bridge.rs +++ b/crates/starknet-token-bridge-client/src/interfaces/token_bridge.rs @@ -6,7 +6,7 @@ use ethers::{ types::{TransactionReceipt, U256, H160}, }; -use crate::Error; +use utils::errors::Error; type Address = H160; diff --git a/crates/starknet-token-bridge-client/src/lib.rs b/crates/starknet-token-bridge-client/src/lib.rs new file mode 100644 index 0000000..8427b29 --- /dev/null +++ b/crates/starknet-token-bridge-client/src/lib.rs @@ -0,0 +1,22 @@ +use std::sync::Arc; + +use clients::token_bridge::StarknetTokenBridgeContractClient; +use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; +use utils::LocalWalletSignerMiddleware; + +pub mod clients; +pub mod interfaces; + +const STARKNET_TOKEN_BRIDGE: &str = include_str!("./artifacts/StarknetTokenBridge.json"); + +pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( + client: Arc +) -> Result { + // Deploy the Starknet Token Bridge contract (no explicit constructor) + let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; + + Ok(StarknetTokenBridgeContractClient::new( + token_bridge_contract.address(), + client.clone(), + )) +} \ No newline at end of file diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml new file mode 100644 index 0000000..a2b3edb --- /dev/null +++ b/crates/utils/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "utils" +authors.workspace = true +edition.workspace = true +repository.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +ethers = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +num-traits = { workspace = true } +async-trait = { workspace = true } +serde_json = { workspace = true } diff --git a/crates/starknet-core-contract-client/src/error.rs b/crates/utils/src/errors.rs similarity index 100% rename from crates/starknet-core-contract-client/src/error.rs rename to crates/utils/src/errors.rs diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs new file mode 100644 index 0000000..7731d7a --- /dev/null +++ b/crates/utils/src/lib.rs @@ -0,0 +1,13 @@ +pub mod errors; +use std::sync::Arc; +use ethers::types::Address; +use ethers::prelude::SignerMiddleware; +use ethers::providers::{Http, Provider}; +use ethers::signers::LocalWallet; + +pub type LocalWalletSignerMiddleware = SignerMiddleware, LocalWallet>; + +pub trait StarknetContractClient { + fn address(&self) -> Address; + fn client(&self) -> Arc; +} \ No newline at end of file From 2a84dbb93dd3bb84afcba9c6e4545bd2ed82900b Mon Sep 17 00:00:00 2001 From: ocdbytes Date: Mon, 8 Apr 2024 22:38:38 +0530 Subject: [PATCH 26/31] fix : fixed unwrap and clone changes --- crates/ethereum-instance/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/ethereum-instance/src/lib.rs b/crates/ethereum-instance/src/lib.rs index b5178b9..b40ec24 100644 --- a/crates/ethereum-instance/src/lib.rs +++ b/crates/ethereum-instance/src/lib.rs @@ -130,9 +130,9 @@ impl EthereumInstance { pub fn spawn(rpc_url: String, priv_key: String, chain_id: u64) -> Self { let provider = Provider::::try_from(rpc_url).expect("Failed to connect to the given rpc url"); - let wallet: LocalWallet = priv_key.parse::().unwrap(); + let wallet: LocalWallet = priv_key.parse::().expect("Error in initializing local wallet"); - let client = SignerMiddleware::new(provider.clone(), wallet.with_chain_id(chain_id)); + let client = SignerMiddleware::new(provider, wallet.with_chain_id(chain_id)); Self { client: Arc::new(client) } } From b37bae7e899fc033671f9e067c85712d76a0ae2d Mon Sep 17 00:00:00 2001 From: ocdbytes Date: Tue, 9 Apr 2024 15:52:01 +0530 Subject: [PATCH 27/31] fix : added fixes for unwrap and makefile updated --- .gitignore | 4 +++- Makefile | 7 ++++--- crates/starknet-proxy-client/src/deploy.rs | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 85b3bdb..fd7ed63 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ docs/ # Dotenv file .env -script/anvil.json \ No newline at end of file +script/anvil.json + +.idea \ No newline at end of file diff --git a/Makefile b/Makefile index e156602..27a1678 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,8 @@ .PHONY: artifacts artifacts: - mkdir crates/sandbox/artifacts || true + mkdir crates/starknet-proxy-client/src/artifacts || true + mkdir crates/starknet-core-contract-client/src/artifacts || true forge build - cp out/UnsafeProxy.sol/UnsafeProxy.json crates/sandbox/artifacts/ - cp out/StarknetSovereign.sol/Starknet.json crates/sandbox/artifacts/ \ No newline at end of file + cp out/UnsafeProxy.sol/UnsafeProxy.json crates/starknet-proxy-client/src/artifacts/ + cp out/StarknetSovereign.sol/Starknet.json crates/starknet-core-contract-client/src/artifacts/ \ No newline at end of file diff --git a/crates/starknet-proxy-client/src/deploy.rs b/crates/starknet-proxy-client/src/deploy.rs index 63739ba..d85243d 100644 --- a/crates/starknet-proxy-client/src/deploy.rs +++ b/crates/starknet-proxy-client/src/deploy.rs @@ -23,6 +23,8 @@ pub enum Error { EthersProvider(#[from] ProviderError), #[error("Invalid contract build artifacts: missing field `{0}`")] ContractBuildArtifacts(&'static str), + #[error("Failed to deploy the contract : {0}")] + DeployContract(#[from] ethereum_instance::Error) } const UNSAFE_PROXY: &str = include_str!("./artifacts/UnsafeProxy.json"); @@ -35,10 +37,10 @@ pub async fn deploy_contract_behind_unsafe_proxy( contract_path: &str, constructor_args: T, ) -> Result, LocalWalletSignerMiddleware>, Error> { - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await.unwrap(); + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; let proxy_contract = - deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await.unwrap(); + deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; return Ok(proxy_contract); } \ No newline at end of file From 6d289ed6eff6cf87ae51e4319ac62e2517476c9d Mon Sep 17 00:00:00 2001 From: ocdbytes Date: Wed, 10 Apr 2024 18:34:33 +0530 Subject: [PATCH 28/31] feat : updated ethereum client and added no arg type --- crates/ethereum-instance/src/lib.rs | 84 ++++--------------- crates/starkgate-manager-client/src/lib.rs | 4 +- crates/starkgate-registry-client/src/lib.rs | 4 +- .../starknet-core-contract-client/src/lib.rs | 4 +- crates/starknet-erc20-client/src/lib.rs | 4 +- crates/starknet-eth-bridge-client/src/lib.rs | 4 +- .../starknet-token-bridge-client/src/lib.rs | 4 +- crates/utils/src/lib.rs | 2 + 8 files changed, 28 insertions(+), 82 deletions(-) diff --git a/crates/ethereum-instance/src/lib.rs b/crates/ethereum-instance/src/lib.rs index b40ec24..744ef1f 100644 --- a/crates/ethereum-instance/src/lib.rs +++ b/crates/ethereum-instance/src/lib.rs @@ -44,41 +44,42 @@ pub enum Error { /// A convenient wrapper over an already running or spawned Anvil local devnet or ethereum pub struct EthereumClient { /// If initialized keeps an Anvil instance to properly shutdown it at the end - _anvil: Option, + client: Option, /// Pre-configured local signer signer: Arc, } impl EthereumClient { /// Creates a new sandbox instance. - /// Will try to attach to already running Anvil instance using one - /// of the following endpoints: - /// - `anvil_endpoint` parameter (if specified) - /// - ${ANVIL_ENDPOINT} environment variable (if set) - /// - http://127.0.0.1:8545 (default) - /// Also default values for chain ID and private keys will be used. - pub fn attach(anvil_endpoint: Option) -> Result { - let anvil_endpoint = anvil_endpoint.unwrap_or_else(|| { + /// Will try to attach to already running Anvil instance or custom rpc and private key provided to the function. + /// if not provided any argument it will attack to a default anvil instance with default anvil params. + pub fn attach(rpc_endpoint: Option, priv_key: Option) -> Result { + let rpc_endpoint = rpc_endpoint.unwrap_or_else(|| { std::env::var("ANVIL_ENDPOINT") .map(Into::into) .ok() .unwrap_or_else(|| ANVIL_DEFAULT_ENDPOINT.into()) }); - let provider = Provider::::try_from(anvil_endpoint) + let provider = Provider::::try_from(rpc_endpoint) .map_err(|_| Error::UrlParser)? .interval(Duration::from_millis(POLLING_INTERVAL_MS)); - let wallet: LocalWallet = ANVIL_DEFAULT_PRIVATE_KEY + let priv_key = priv_key.unwrap_or_else(|| { + ANVIL_DEFAULT_PRIVATE_KEY.to_owned() + }); + + let wallet: LocalWallet = priv_key .parse() .expect("Failed to parse private key"); + let client = SignerMiddleware::new( provider.clone(), wallet.with_chain_id(ANVIL_DEFAULT_CHAIN_ID), ); Ok(Self { - _anvil: None, + client: None, signer: Arc::new(client), }) } @@ -108,7 +109,7 @@ impl EthereumClient { SignerMiddleware::new(provider.clone(), wallet.with_chain_id(anvil.chain_id())); Self { - _anvil: Some(anvil), + client: Some(anvil), signer: Arc::new(client), } } @@ -118,60 +119,3 @@ impl EthereumClient { self.signer.clone() } } - - -/// Wrapper For Spawning a ethereum instance using the provider -/// Used for deploying on the main network purposes -pub struct EthereumInstance { - client: Arc -} - -impl EthereumInstance { - pub fn spawn(rpc_url: String, priv_key: String, chain_id: u64) -> Self { - - let provider = Provider::::try_from(rpc_url).expect("Failed to connect to the given rpc url"); - let wallet: LocalWallet = priv_key.parse::().expect("Error in initializing local wallet"); - - let client = SignerMiddleware::new(provider, wallet.with_chain_id(chain_id)); - - Self { client: Arc::new(client) } - } - - pub fn client(&self) -> Arc { - self.client.clone() - } -} - -pub async fn deploy_contract( - client: Arc, - contract_build_artifacts: &str, - contructor_args: T, -) -> Result, LocalWalletSignerMiddleware>, Error> -{ - let (abi, bytecode) = { - let mut artifacts: serde_json::Value = serde_json::from_str(contract_build_artifacts)?; - let abi_value = artifacts - .get_mut("abi") - .ok_or_else(|| Error::ContractBuildArtifacts("abi"))? - .take(); - let bytecode_value = artifacts - .get_mut("bytecode") - .ok_or_else(|| Error::ContractBuildArtifacts("bytecode"))? - .get_mut("object") - .ok_or_else(|| Error::ContractBuildArtifacts("bytecode.object"))? - .take(); - - let abi = serde_json::from_value(abi_value)?; - let bytecode = Bytes::from_hex(bytecode_value.as_str().ok_or(Error::BytecodeObject)?)?; - (abi, bytecode) - }; - - let factory = ContractFactory::new(abi, bytecode, client.clone()); - - Ok(factory - .deploy(contructor_args) - .map_err(Into::>::into)? - .send() - .await - .map_err(Into::>::into)?) -} \ No newline at end of file diff --git a/crates/starkgate-manager-client/src/lib.rs b/crates/starkgate-manager-client/src/lib.rs index dae42cd..0906ed3 100644 --- a/crates/starkgate-manager-client/src/lib.rs +++ b/crates/starkgate-manager-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::starkgate_manager::StarkgateManagerContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; pub mod clients; pub mod interfaces; @@ -12,7 +12,7 @@ pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starkgate Manager contract (no explicit constructor) - let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, ()).await?; + let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, NoConstructorArg).await?; Ok(StarkgateManagerContractClient::new( manager_contract.address(), diff --git a/crates/starkgate-registry-client/src/lib.rs b/crates/starkgate-registry-client/src/lib.rs index 9d2f813..2dda625 100644 --- a/crates/starkgate-registry-client/src/lib.rs +++ b/crates/starkgate-registry-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::starkgate_registry::StarkgateRegistryContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; pub mod clients; pub mod interfaces; @@ -13,7 +13,7 @@ pub async fn deploy_starkgate_registry_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starkgate Registry contract (no explicit constructor) - let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, ()).await?; + let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, NoConstructorArg).await?; Ok(StarkgateRegistryContractClient::new( registry_contract.address(), diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 5343ae1..7b3ca84 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::StarknetSovereignContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; pub mod clients; pub mod interfaces; @@ -15,7 +15,7 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, ()).await?; + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, NoConstructorArg).await?; Ok(StarknetSovereignContractClient::new( core_contract.address(), diff --git a/crates/starknet-erc20-client/src/lib.rs b/crates/starknet-erc20-client/src/lib.rs index 05de2ee..aa7bc29 100644 --- a/crates/starknet-erc20-client/src/lib.rs +++ b/crates/starknet-erc20-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::erc20::ERC20ContractClient; use starknet_proxy_client::deploy::Error; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; use ethereum_instance::deploy_contract; pub mod clients; @@ -14,7 +14,7 @@ pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, ()).await.unwrap(); + let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, NoConstructorArg).await.unwrap(); Ok(ERC20ContractClient::new( contract.address(), diff --git a/crates/starknet-eth-bridge-client/src/lib.rs b/crates/starknet-eth-bridge-client/src/lib.rs index cadc360..4b25389 100644 --- a/crates/starknet-eth-bridge-client/src/lib.rs +++ b/crates/starknet-eth-bridge-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::eth_bridge::StarknetEthBridgeContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; pub mod interfaces; pub mod clients; @@ -12,7 +12,7 @@ pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Eth Bridge contract (no explicit constructor) - let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, ()).await?; + let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, NoConstructorArg).await?; Ok(StarknetEthBridgeContractClient::new( eth_bridge_contract.address(), diff --git a/crates/starknet-token-bridge-client/src/lib.rs b/crates/starknet-token-bridge-client/src/lib.rs index 8427b29..35892f5 100644 --- a/crates/starknet-token-bridge-client/src/lib.rs +++ b/crates/starknet-token-bridge-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::token_bridge::StarknetTokenBridgeContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::LocalWalletSignerMiddleware; +use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; pub mod clients; pub mod interfaces; @@ -13,7 +13,7 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starknet Token Bridge contract (no explicit constructor) - let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, ()).await?; + let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, NoConstructorArg).await?; Ok(StarknetTokenBridgeContractClient::new( token_bridge_contract.address(), diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs index 7731d7a..3a7ef56 100644 --- a/crates/utils/src/lib.rs +++ b/crates/utils/src/lib.rs @@ -7,6 +7,8 @@ use ethers::signers::LocalWallet; pub type LocalWalletSignerMiddleware = SignerMiddleware, LocalWallet>; +pub type NoConstructorArg = (); + pub trait StarknetContractClient { fn address(&self) -> Address; fn client(&self) -> Arc; From e4f6689f59017e89eb1219c298a67866d89ba4b2 Mon Sep 17 00:00:00 2001 From: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:16:55 +0530 Subject: [PATCH 29/31] update readme for bridge contract sources --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 3c96060..db4c108 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,11 @@ Zaun sandbox crate can be used as dev dependency in external projects. If any ch make artifacts ``` +## Bridge Contracts Sources + +StarknetEthBridge.sol - https://etherscan.io/address/0x455603AD9ae671F6c1f0f746F24d7904cA603581#code +StarknetTokenBridge.sol (Starkgate v2.0.1) - https://github.com/starknet-io/starkgate-contracts/blob/5a10fd263d29cd032b7229691d043520edae0737/src/solidity/StarknetTokenBridge.sol + ## StarkNet Consensus Protocol Contracts PoC solidity implementation of the following Starknet Decentralized Protocol proposal: From 3b43f2ccf8f1d9e50722fa9f6576a2d853b5355a Mon Sep 17 00:00:00 2001 From: ocdbytes Date: Wed, 10 Apr 2024 22:40:34 +0530 Subject: [PATCH 30/31] pushed changes --- crates/ethereum-instance/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/ethereum-instance/src/lib.rs b/crates/ethereum-instance/src/lib.rs index 744ef1f..edd6d58 100644 --- a/crates/ethereum-instance/src/lib.rs +++ b/crates/ethereum-instance/src/lib.rs @@ -55,7 +55,7 @@ impl EthereumClient { /// if not provided any argument it will attack to a default anvil instance with default anvil params. pub fn attach(rpc_endpoint: Option, priv_key: Option) -> Result { let rpc_endpoint = rpc_endpoint.unwrap_or_else(|| { - std::env::var("ANVIL_ENDPOINT") + std::env::var("ETH_RPC_ENDPOINT") .map(Into::into) .ok() .unwrap_or_else(|| ANVIL_DEFAULT_ENDPOINT.into()) From 06d35f4b35c99ad07b2fdff6fd5dcce709487375 Mon Sep 17 00:00:00 2001 From: ocdbytes Date: Wed, 10 Apr 2024 22:47:06 +0530 Subject: [PATCH 31/31] fix : updated the vars --- crates/ethereum-instance/src/lib.rs | 38 +++++++++++++++++++ crates/starkgate-manager-client/src/lib.rs | 4 +- crates/starkgate-registry-client/src/lib.rs | 4 +- .../starknet-core-contract-client/src/lib.rs | 4 +- crates/starknet-erc20-client/src/lib.rs | 4 +- crates/starknet-eth-bridge-client/src/lib.rs | 4 +- .../starknet-token-bridge-client/src/lib.rs | 4 +- crates/utils/src/lib.rs | 2 +- 8 files changed, 51 insertions(+), 13 deletions(-) diff --git a/crates/ethereum-instance/src/lib.rs b/crates/ethereum-instance/src/lib.rs index edd6d58..a793fe6 100644 --- a/crates/ethereum-instance/src/lib.rs +++ b/crates/ethereum-instance/src/lib.rs @@ -119,3 +119,41 @@ impl EthereumClient { self.signer.clone() } } + + +/// Deploys new smart contract using: +/// - Forge build artifacts (JSON file contents) +/// - Constructor args (use () if no args expected) +pub async fn deploy_contract( + client: Arc, + contract_build_artifacts: &str, + contructor_args: T, +) -> Result, LocalWalletSignerMiddleware>, Error> +{ + let (abi, bytecode) = { + let mut artifacts: serde_json::Value = serde_json::from_str(contract_build_artifacts)?; + let abi_value = artifacts + .get_mut("abi") + .ok_or_else(|| Error::ContractBuildArtifacts("abi"))? + .take(); + let bytecode_value = artifacts + .get_mut("bytecode") + .ok_or_else(|| Error::ContractBuildArtifacts("bytecode"))? + .get_mut("object") + .ok_or_else(|| Error::ContractBuildArtifacts("bytecode.object"))? + .take(); + + let abi = serde_json::from_value(abi_value)?; + let bytecode = Bytes::from_hex(bytecode_value.as_str().ok_or(Error::BytecodeObject)?)?; + (abi, bytecode) + }; + + let factory = ContractFactory::new(abi, bytecode, client.clone()); + + Ok(factory + .deploy(contructor_args) + .map_err(Into::>::into)? + .send() + .await + .map_err(Into::>::into)?) +} \ No newline at end of file diff --git a/crates/starkgate-manager-client/src/lib.rs b/crates/starkgate-manager-client/src/lib.rs index 0906ed3..eb6ca9f 100644 --- a/crates/starkgate-manager-client/src/lib.rs +++ b/crates/starkgate-manager-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::starkgate_manager::StarkgateManagerContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -12,7 +12,7 @@ pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starkgate Manager contract (no explicit constructor) - let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, NoConstructorArg).await?; + let manager_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG).await?; Ok(StarkgateManagerContractClient::new( manager_contract.address(), diff --git a/crates/starkgate-registry-client/src/lib.rs b/crates/starkgate-registry-client/src/lib.rs index 2dda625..bc2d953 100644 --- a/crates/starkgate-registry-client/src/lib.rs +++ b/crates/starkgate-registry-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::starkgate_registry::StarkgateRegistryContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -13,7 +13,7 @@ pub async fn deploy_starkgate_registry_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starkgate Registry contract (no explicit constructor) - let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, NoConstructorArg).await?; + let registry_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, NO_CONSTRUCTOR_ARG).await?; Ok(StarkgateRegistryContractClient::new( registry_contract.address(), diff --git a/crates/starknet-core-contract-client/src/lib.rs b/crates/starknet-core-contract-client/src/lib.rs index 7b3ca84..7b5d999 100644 --- a/crates/starknet-core-contract-client/src/lib.rs +++ b/crates/starknet-core-contract-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::StarknetSovereignContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -15,7 +15,7 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, NoConstructorArg).await?; + let core_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, NO_CONSTRUCTOR_ARG).await?; Ok(StarknetSovereignContractClient::new( core_contract.address(), diff --git a/crates/starknet-erc20-client/src/lib.rs b/crates/starknet-erc20-client/src/lib.rs index aa7bc29..fef992a 100644 --- a/crates/starknet-erc20-client/src/lib.rs +++ b/crates/starknet-erc20-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::erc20::ERC20ContractClient; use starknet_proxy_client::deploy::Error; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; use ethereum_instance::deploy_contract; pub mod clients; @@ -14,7 +14,7 @@ pub async fn deploy_dai_erc20_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Dai ERC20 Token contract (no explicit constructor) - let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, NoConstructorArg).await.unwrap(); + let contract = deploy_contract(client.clone(), DAI_ERC20_TOKEN, NO_CONSTRUCTOR_ARG).await.unwrap(); Ok(ERC20ContractClient::new( contract.address(), diff --git a/crates/starknet-eth-bridge-client/src/lib.rs b/crates/starknet-eth-bridge-client/src/lib.rs index 4b25389..7f87f03 100644 --- a/crates/starknet-eth-bridge-client/src/lib.rs +++ b/crates/starknet-eth-bridge-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::eth_bridge::StarknetEthBridgeContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod interfaces; pub mod clients; @@ -12,7 +12,7 @@ pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Eth Bridge contract (no explicit constructor) - let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, NoConstructorArg).await?; + let eth_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_ETH_BRIDGE, NO_CONSTRUCTOR_ARG).await?; Ok(StarknetEthBridgeContractClient::new( eth_bridge_contract.address(), diff --git a/crates/starknet-token-bridge-client/src/lib.rs b/crates/starknet-token-bridge-client/src/lib.rs index 35892f5..8de5fb3 100644 --- a/crates/starknet-token-bridge-client/src/lib.rs +++ b/crates/starknet-token-bridge-client/src/lib.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use clients::token_bridge::StarknetTokenBridgeContractClient; use starknet_proxy_client::deploy::{deploy_contract_behind_unsafe_proxy, Error}; -use utils::{LocalWalletSignerMiddleware, NoConstructorArg}; +use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -13,7 +13,7 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc ) -> Result { // Deploy the Starknet Token Bridge contract (no explicit constructor) - let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, NoConstructorArg).await?; + let token_bridge_contract = deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_TOKEN_BRIDGE, NO_CONSTRUCTOR_ARG).await?; Ok(StarknetTokenBridgeContractClient::new( token_bridge_contract.address(), diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs index 3a7ef56..4d19672 100644 --- a/crates/utils/src/lib.rs +++ b/crates/utils/src/lib.rs @@ -7,7 +7,7 @@ use ethers::signers::LocalWallet; pub type LocalWalletSignerMiddleware = SignerMiddleware, LocalWallet>; -pub type NoConstructorArg = (); +pub const NO_CONSTRUCTOR_ARG:() = (); pub trait StarknetContractClient { fn address(&self) -> Address;