diff --git a/RuleEngineV2.0.2.json b/RuleEngineV2.0.2.json deleted file mode 100644 index aaf230e..0000000 --- a/RuleEngineV2.0.2.json +++ /dev/null @@ -1,1449 +0,0 @@ -{ - "contractName": "RuleEngine", - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "admin", "type": "address", "internalType": "address" }, - { - "name": "forwarderIrrevocable", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenContract", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RULE_ENGINE_OPERATOR_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TOKEN_CONTRACT_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addRuleOperation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleOperation" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addRuleValidation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleValidation" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clearRulesOperation", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clearRulesValidation", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "detectTransferRestriction", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "detectTransferRestrictionValidation", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRuleIndexOperation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleOperation" - } - ], - "outputs": [ - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRuleIndexValidation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleValidation" - } - ], - "outputs": [ - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTrustedForwarder", - "inputs": [ - { "name": "forwarder", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageForTransferRestriction", - "inputs": [ - { "name": "_restrictionCode", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "operateOnTransfer", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "isValid", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeRuleOperation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleOperation" - }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeRuleValidation", - "inputs": [ - { - "name": "rule_", - "type": "address", - "internalType": "contract IRuleValidation" - }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ruleOperation", - "inputs": [ - { "name": "ruleId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ruleValidation", - "inputs": [ - { "name": "ruleId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rulesCountOperation", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rulesCountValidation", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rulesOperation", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rulesValidation", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setRulesOperation", - "inputs": [ - { "name": "rules_", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setRulesValidation", - "inputs": [ - { "name": "rules_", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "trustedForwarder", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "validateTransfer", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "validateTransferValidation", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "AddRule", - "inputs": [ - { - "name": "rule", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ClearRules", - "inputs": [ - { - "name": "rulesRemoved", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RemoveRule", - "inputs": [ - { - "name": "rule", - "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": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "RuleEngine_AdminWithAddressZeroNotAllowed", - "inputs": [] - }, - { "type": "error", "name": "RuleEngine_ArrayIsEmpty", "inputs": [] }, - { - "type": "error", - "name": "RuleEngine_RuleAddressZeroNotAllowed", - "inputs": [] - }, - { "type": "error", "name": "RuleEngine_RuleAlreadyExists", "inputs": [] }, - { "type": "error", "name": "RuleEngine_RuleDoNotMatch", "inputs": [] }, - { "type": "error", "name": "RuleEngine_TransferInvalid", "inputs": [] } - ], - "bytecode":"0x60a06040523480156200001157600080fd5b5060405162001db338038062001db3833981016040819052620000349162000246565b6001600160a01b0380831660805283166200006257604051630872273360e21b815260040160405180910390fd5b6001600160a01b03811615620000a0576200009e7fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a382620000e4565b505b620000ad600084620000e4565b50620000da7fb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f99984620000e4565b505050506200030f565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200018b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200014262000195565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200018f565b5060005b92915050565b6000620001a1620001a6565b905090565b6000366014620001b63362000202565b8015620001c35750808210155b15620001fa57600036620001d8838562000290565b620001e5928290620002b2565b620001f091620002de565b60601c9250505090565b339250505090565b60006200020e60805190565b6001600160a01b0316826001600160a01b0316149050919050565b80516001600160a01b03811681146200024157600080fd5b919050565b6000806000606084860312156200025c57600080fd5b620002678462000229565b9250620002776020850162000229565b9150620002876040850162000229565b90509250925092565b818103818111156200018f57634e487b7160e01b600052601160045260246000fd5b60008085851115620002c357600080fd5b83861115620002d157600080fd5b5050820193919092039150565b6001600160601b03198135818116916014851015620003075780818660140360031b1b83161692505b505092915050565b608051611a7a620003396000396000818161033d01528181610384015261137d0152611a7a6000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a1b6c8e1161011a578063c6946a12116100ad578063ce29ed351161007c578063ce29ed3514610495578063d0e835f2146104a8578063d4ce1415146104bb578063d547741f146104ce578063eb2647e3146104e157600080fd5b8063c6946a1214610449578063ca1f6c4d1461045c578063ca3e16e71461046f578063cd1d4dc71461048257600080fd5b8063a39eda14116100e9578063a39eda1414610406578063c03888c21461041b578063c57086a11461042e578063c68a651a1461043657600080fd5b80638a1b6c8e146103db5780638a2021b1146103e357806391d14854146103eb578063a217fddf146103fe57600080fd5b806336568abe116101925780636728f545116101615780636728f5451461036d5780637da0a877146103825780637f4ab1dd146103a857806383304df0146103c857600080fd5b806336568abe146102dc578063397a7d3c146102ef5780634d53374e1461031a578063572b6c051461032d57600080fd5b806328aa67bc116101ce57806328aa67bc146102895780632f2ff15d146102ae578063323a4616146102c1578063334a29cc146102c957600080fd5b80621582f7146101ff57806301ffc9a7146102095780630fbbfb5514610231578063248a9ca314610266575b600080fd5b6102076104f4565b005b61021c6102173660046115bc565b610517565b60405190151581526020015b60405180910390f35b6102587fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a381565b604051908152602001610228565b6102586102743660046115e6565b60009081526020819052604090206001015490565b61029c610297366004611614565b61054e565b60405160ff9091168152602001610228565b6102076102bc366004611655565b610626565b600354610258565b6102076102d7366004611685565b610651565b6102076102ea366004611655565b61068f565b6103026102fd3660046115e6565b6106d7565b6040516001600160a01b039091168152602001610228565b6102076103283660046116fa565b610707565b61021c61033b366004611726565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b610258600080516020611a2583398151915281565b7f0000000000000000000000000000000000000000000000000000000000000000610302565b6103bb6103b6366004611752565b610729565b6040516102289190611793565b6102586103d6366004611726565b610960565b61020761096d565b600254610258565b61021c6103f9366004611655565b61098d565b610258600081565b61040e6109b6565b60405161022891906117c6565b61021c610429366004611614565b610a18565b61040e610a6f565b610207610444366004611726565b610acf565b61021c610457366004611614565b610b2a565b61020761046a366004611685565b610b44565b61030261047d3660046115e6565b610b82565b610207610490366004611726565b610b97565b6102076104a33660046116fa565b610bba565b6102586104b6366004611726565b610bdc565b61029c6104c9366004611614565b610be9565b6102076104dc366004611655565b610cde565b61021c6104ef366004611614565b610d03565b600080516020611a2583398151915261050c81610d11565b610514610d22565b50565b60006001600160e01b03198216637965db0b60e01b148061054857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600254600090815b818110156106175760006002828154811061057357610573611813565b60009182526020909120015460405163d4ce141560e01b81526001600160a01b0389811660048301528881166024830152604482018890529091169063d4ce141590606401602060405180830381865afa1580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190611829565b905060ff81161561060e57925061061f915050565b50600101610556565b5060005b9150505b9392505050565b60008281526020819052604090206001015461064181610d11565b61064b8383610db2565b50505050565b600080516020611a2583398151915261066981610d11565b6002541561067957610679610e45565b6106838383610eca565b61064b60028484611544565b610697611065565b6001600160a01b0316816001600160a01b0316146106c85760405163334bd91960e11b815260040160405180910390fd5b6106d28282611074565b505050565b6000600282815481106106ec576106ec611813565b6000918252602090912001546001600160a01b031692915050565b600080516020611a2583398151915261071f81610d11565b6106d283836110fd565b60025460609060005b81811015610869576002818154811061074d5761074d611813565b600091825260209091200154604051633e822efb60e11b815260ff861660048201526001600160a01b0390911690637d045df690602401602060405180830381865afa1580156107a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c59190611846565b1561086157600281815481106107dd576107dd611813565b600091825260209091200154604051637f4ab1dd60e01b815260ff861660048201526001600160a01b0390911690637f4ab1dd90602401600060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610859919081019061187e565b949350505050565b600101610732565b505060035460005b81811015610924576003818154811061088c5761088c611813565b600091825260209091200154604051633e822efb60e11b815260ff861660048201526001600160a01b0390911690637d045df690602401602060405180830381865afa1580156108e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109049190611846565b1561091c57600381815481106107dd576107dd611813565b600101610871565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015292915050565b6000610548600283611141565b600080516020611a2583398151915261098581610d11565b610514610e45565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606003805480602002602001604051908101604052809291908181526020018280548015610a0e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f0575b5050505050905090565b60007fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a3610a4481610d11565b610a4f858585610d03565b610a5c5760009150610a67565b61061b85858561119f565b509392505050565b60606002805480602002602001604051908101604052809291908181526020018280548015610a0e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109f0575050505050905090565b600080516020611a25833981519152610ae781610d11565b610af2600383611274565b6040516001600160a01b038316907f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4690600090a25050565b600080610b38858585610be9565b60ff1614949350505050565b600080516020611a25833981519152610b5c81610d11565b60035415610b6c57610b6c610d22565b610b768383610eca565b61064b60038484611544565b6000600382815481106106ec576106ec611813565b600080516020611a25833981519152610baf81610d11565b610af2600283611274565b600080516020611a25833981519152610bd281610d11565b6106d28383611320565b6000610548600383611141565b600080610bf785858561054e565b905060ff811615610c0957905061061f565b60035460005b81811015610cd157600060038281548110610c2c57610c2c611813565b60009182526020909120015460405163d4ce141560e01b81526001600160a01b038a811660048301528981166024830152604482018990529091169063d4ce141590606401602060405180830381865afa158015610c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb29190611829565b905060ff811615610cc857935061061f92505050565b50600101610c0f565b5060009695505050505050565b600082815260208190526040902060010154610cf981610d11565b61064b8383611074565b600080610b3885858561054e565b61051481610d1d611065565b61132c565b6003546000905b8015610d7657600181039150610d6660038381548110610d4b57610d4b611813565b6000918252602090912001546001600160a01b031683611320565b610d6f81611941565b9050610d29565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26003604051610da79190611958565b60405180910390a150565b6000610dbe838361098d565b610e3d576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610df5611065565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610548565b506000610548565b6002546000905b8015610e9957600181039150610e8960028381548110610e6e57610e6e611813565b6000918252602090912001546001600160a01b0316836110fd565b610e9281611941565b9050610e4c565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26002604051610da79190611958565b6000819003610eec57604051630b9b3e5960e21b815260040160405180910390fd5b60005b818110156106d2576000838383818110610f0b57610f0b611813565b9050602002016020810190610f209190611726565b6001600160a01b031603610f47576040516350092f7560e11b815260040160405180910390fd5b60016000848484818110610f5d57610f5d611813565b9050602002016020810190610f729190611726565b6001600160a01b0316815260208101919091526040016000205460ff1615610fad5760405163860d015160e01b815260040160405180910390fd5b6001806000858585818110610fc457610fc4611813565b9050602002016020810190610fd99190611726565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061101357611013611813565b90506020020160208101906110289190611726565b6001600160a01b03167f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4660405160405180910390a2600101610eef565b600061106f61136d565b905090565b6000611080838361098d565b15610e3d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191690556110b5611065565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610548565b611109600283836113e2565b6040516001600160a01b038316907f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc490600090a25050565b81546000905b8082101561119657826001600160a01b031684838154811061116b5761116b611813565b6000918252602090912001546001600160a01b03160361118b5750610548565b816001019150611147565b50509054919050565b600354600090815b81811015611268576000600382815481106111c4576111c4611813565b60009182526020909120015460405163601c446160e11b81526001600160a01b0389811660048301528881166024830152604482018890529091169063c03888c2906064016020604051808303816000875af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611846565b90508061125f576000935050505061061f565b506001016111a7565b50600195945050505050565b6001600160a01b03811661129b576040516350092f7560e11b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156112d55760405163860d015160e01b815260040160405180910390fd5b8154600181810184556000938452602080852090920180546001600160a01b039094166001600160a01b0319909416841790559183528190526040909120805460ff19169091179055565b611109600383836113e2565b611336828261098d565b6113695760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156113aa5750808210155b156113da576000366113bc838561199c565b6113c79282906119af565b6113d0916119d9565b60601c9250505090565b339250505090565b816001600160a01b03168382815481106113fe576113fe611813565b6000918252602090912001546001600160a01b03161461143157604051632f64842d60e11b815260040160405180910390fd5b825461143f9060019061199c565b81146114c457825483906114559060019061199c565b8154811061146557611465611813565b9060005260206000200160009054906101000a90046001600160a01b031683828154811061149557611495611813565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b828054806114d4576114d4611a0e565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841680835260019091526040808320805460ff191690555190917f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc491a2505050565b828054828255906000526020600020908101928215611597579160200282015b828111156115975781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611564565b506115a39291506115a7565b5090565b5b808211156115a357600081556001016115a8565b6000602082840312156115ce57600080fd5b81356001600160e01b03198116811461061f57600080fd5b6000602082840312156115f857600080fd5b5035919050565b6001600160a01b038116811461051457600080fd5b60008060006060848603121561162957600080fd5b8335611634816115ff565b92506020840135611644816115ff565b929592945050506040919091013590565b6000806040838503121561166857600080fd5b82359150602083013561167a816115ff565b809150509250929050565b6000806020838503121561169857600080fd5b823567ffffffffffffffff808211156116b057600080fd5b818501915085601f8301126116c457600080fd5b8135818111156116d357600080fd5b8660208260051b85010111156116e857600080fd5b60209290920196919550909350505050565b6000806040838503121561170d57600080fd5b8235611718816115ff565b946020939093013593505050565b60006020828403121561173857600080fd5b813561061f816115ff565b60ff8116811461051457600080fd5b60006020828403121561176457600080fd5b813561061f81611743565b60005b8381101561178a578181015183820152602001611772565b50506000910152565b60208152600082518060208401526117b281604085016020870161176f565b601f01601f19169190910160400192915050565b6020808252825182820181905260009190848201906040850190845b818110156118075783516001600160a01b0316835292840192918401916001016117e2565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561183b57600080fd5b815161061f81611743565b60006020828403121561185857600080fd5b8151801515811461061f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561189057600080fd5b815167ffffffffffffffff808211156118a857600080fd5b818401915084601f8301126118bc57600080fd5b8151818111156118ce576118ce611868565b604051601f8201601f19908116603f011681019083821181831017156118f6576118f6611868565b8160405282815287602084870101111561190f57600080fd5b61192083602083016020880161176f565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816119505761195061192b565b506000190190565b6020808252825482820181905260008481528281209092916040850190845b818110156118075783546001600160a01b031683526001938401939285019201611977565b818103818111156105485761054861192b565b600080858511156119bf57600080fd5b838611156119cc57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015611a065780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052603160045260246000fdfeb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f999a264697066735822122001e96293b791a1cb7a365e53c8a2381e86a2d2227bf7299377f4ae8437a930e364736f6c63430008160033", - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a1b6c8e1161011a578063c6946a12116100ad578063ce29ed351161007c578063ce29ed3514610495578063d0e835f2146104a8578063d4ce1415146104bb578063d547741f146104ce578063eb2647e3146104e157600080fd5b8063c6946a1214610449578063ca1f6c4d1461045c578063ca3e16e71461046f578063cd1d4dc71461048257600080fd5b8063a39eda14116100e9578063a39eda1414610406578063c03888c21461041b578063c57086a11461042e578063c68a651a1461043657600080fd5b80638a1b6c8e146103db5780638a2021b1146103e357806391d14854146103eb578063a217fddf146103fe57600080fd5b806336568abe116101925780636728f545116101615780636728f5451461036d5780637da0a877146103825780637f4ab1dd146103a857806383304df0146103c857600080fd5b806336568abe146102dc578063397a7d3c146102ef5780634d53374e1461031a578063572b6c051461032d57600080fd5b806328aa67bc116101ce57806328aa67bc146102895780632f2ff15d146102ae578063323a4616146102c1578063334a29cc146102c957600080fd5b80621582f7146101ff57806301ffc9a7146102095780630fbbfb5514610231578063248a9ca314610266575b600080fd5b6102076104f4565b005b61021c6102173660046115bc565b610517565b60405190151581526020015b60405180910390f35b6102587fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a381565b604051908152602001610228565b6102586102743660046115e6565b60009081526020819052604090206001015490565b61029c610297366004611614565b61054e565b60405160ff9091168152602001610228565b6102076102bc366004611655565b610626565b600354610258565b6102076102d7366004611685565b610651565b6102076102ea366004611655565b61068f565b6103026102fd3660046115e6565b6106d7565b6040516001600160a01b039091168152602001610228565b6102076103283660046116fa565b610707565b61021c61033b366004611726565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b610258600080516020611a2583398151915281565b7f0000000000000000000000000000000000000000000000000000000000000000610302565b6103bb6103b6366004611752565b610729565b6040516102289190611793565b6102586103d6366004611726565b610960565b61020761096d565b600254610258565b61021c6103f9366004611655565b61098d565b610258600081565b61040e6109b6565b60405161022891906117c6565b61021c610429366004611614565b610a18565b61040e610a6f565b610207610444366004611726565b610acf565b61021c610457366004611614565b610b2a565b61020761046a366004611685565b610b44565b61030261047d3660046115e6565b610b82565b610207610490366004611726565b610b97565b6102076104a33660046116fa565b610bba565b6102586104b6366004611726565b610bdc565b61029c6104c9366004611614565b610be9565b6102076104dc366004611655565b610cde565b61021c6104ef366004611614565b610d03565b600080516020611a2583398151915261050c81610d11565b610514610d22565b50565b60006001600160e01b03198216637965db0b60e01b148061054857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600254600090815b818110156106175760006002828154811061057357610573611813565b60009182526020909120015460405163d4ce141560e01b81526001600160a01b0389811660048301528881166024830152604482018890529091169063d4ce141590606401602060405180830381865afa1580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190611829565b905060ff81161561060e57925061061f915050565b50600101610556565b5060005b9150505b9392505050565b60008281526020819052604090206001015461064181610d11565b61064b8383610db2565b50505050565b600080516020611a2583398151915261066981610d11565b6002541561067957610679610e45565b6106838383610eca565b61064b60028484611544565b610697611065565b6001600160a01b0316816001600160a01b0316146106c85760405163334bd91960e11b815260040160405180910390fd5b6106d28282611074565b505050565b6000600282815481106106ec576106ec611813565b6000918252602090912001546001600160a01b031692915050565b600080516020611a2583398151915261071f81610d11565b6106d283836110fd565b60025460609060005b81811015610869576002818154811061074d5761074d611813565b600091825260209091200154604051633e822efb60e11b815260ff861660048201526001600160a01b0390911690637d045df690602401602060405180830381865afa1580156107a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c59190611846565b1561086157600281815481106107dd576107dd611813565b600091825260209091200154604051637f4ab1dd60e01b815260ff861660048201526001600160a01b0390911690637f4ab1dd90602401600060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610859919081019061187e565b949350505050565b600101610732565b505060035460005b81811015610924576003818154811061088c5761088c611813565b600091825260209091200154604051633e822efb60e11b815260ff861660048201526001600160a01b0390911690637d045df690602401602060405180830381865afa1580156108e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109049190611846565b1561091c57600381815481106107dd576107dd611813565b600101610871565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015292915050565b6000610548600283611141565b600080516020611a2583398151915261098581610d11565b610514610e45565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606003805480602002602001604051908101604052809291908181526020018280548015610a0e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f0575b5050505050905090565b60007fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a3610a4481610d11565b610a4f858585610d03565b610a5c5760009150610a67565b61061b85858561119f565b509392505050565b60606002805480602002602001604051908101604052809291908181526020018280548015610a0e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116109f0575050505050905090565b600080516020611a25833981519152610ae781610d11565b610af2600383611274565b6040516001600160a01b038316907f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4690600090a25050565b600080610b38858585610be9565b60ff1614949350505050565b600080516020611a25833981519152610b5c81610d11565b60035415610b6c57610b6c610d22565b610b768383610eca565b61064b60038484611544565b6000600382815481106106ec576106ec611813565b600080516020611a25833981519152610baf81610d11565b610af2600283611274565b600080516020611a25833981519152610bd281610d11565b6106d28383611320565b6000610548600383611141565b600080610bf785858561054e565b905060ff811615610c0957905061061f565b60035460005b81811015610cd157600060038281548110610c2c57610c2c611813565b60009182526020909120015460405163d4ce141560e01b81526001600160a01b038a811660048301528981166024830152604482018990529091169063d4ce141590606401602060405180830381865afa158015610c8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb29190611829565b905060ff811615610cc857935061061f92505050565b50600101610c0f565b5060009695505050505050565b600082815260208190526040902060010154610cf981610d11565b61064b8383611074565b600080610b3885858561054e565b61051481610d1d611065565b61132c565b6003546000905b8015610d7657600181039150610d6660038381548110610d4b57610d4b611813565b6000918252602090912001546001600160a01b031683611320565b610d6f81611941565b9050610d29565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26003604051610da79190611958565b60405180910390a150565b6000610dbe838361098d565b610e3d576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610df5611065565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610548565b506000610548565b6002546000905b8015610e9957600181039150610e8960028381548110610e6e57610e6e611813565b6000918252602090912001546001600160a01b0316836110fd565b610e9281611941565b9050610e4c565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26002604051610da79190611958565b6000819003610eec57604051630b9b3e5960e21b815260040160405180910390fd5b60005b818110156106d2576000838383818110610f0b57610f0b611813565b9050602002016020810190610f209190611726565b6001600160a01b031603610f47576040516350092f7560e11b815260040160405180910390fd5b60016000848484818110610f5d57610f5d611813565b9050602002016020810190610f729190611726565b6001600160a01b0316815260208101919091526040016000205460ff1615610fad5760405163860d015160e01b815260040160405180910390fd5b6001806000858585818110610fc457610fc4611813565b9050602002016020810190610fd99190611726565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061101357611013611813565b90506020020160208101906110289190611726565b6001600160a01b03167f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4660405160405180910390a2600101610eef565b600061106f61136d565b905090565b6000611080838361098d565b15610e3d576000838152602081815260408083206001600160a01b03861684529091529020805460ff191690556110b5611065565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610548565b611109600283836113e2565b6040516001600160a01b038316907f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc490600090a25050565b81546000905b8082101561119657826001600160a01b031684838154811061116b5761116b611813565b6000918252602090912001546001600160a01b03160361118b5750610548565b816001019150611147565b50509054919050565b600354600090815b81811015611268576000600382815481106111c4576111c4611813565b60009182526020909120015460405163601c446160e11b81526001600160a01b0389811660048301528881166024830152604482018890529091169063c03888c2906064016020604051808303816000875af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611846565b90508061125f576000935050505061061f565b506001016111a7565b50600195945050505050565b6001600160a01b03811661129b576040516350092f7560e11b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156112d55760405163860d015160e01b815260040160405180910390fd5b8154600181810184556000938452602080852090920180546001600160a01b039094166001600160a01b0319909416841790559183528190526040909120805460ff19169091179055565b611109600383836113e2565b611336828261098d565b6113695760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000366014336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156113aa5750808210155b156113da576000366113bc838561199c565b6113c79282906119af565b6113d0916119d9565b60601c9250505090565b339250505090565b816001600160a01b03168382815481106113fe576113fe611813565b6000918252602090912001546001600160a01b03161461143157604051632f64842d60e11b815260040160405180910390fd5b825461143f9060019061199c565b81146114c457825483906114559060019061199c565b8154811061146557611465611813565b9060005260206000200160009054906101000a90046001600160a01b031683828154811061149557611495611813565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b828054806114d4576114d4611a0e565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841680835260019091526040808320805460ff191690555190917f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc491a2505050565b828054828255906000526020600020908101928215611597579160200282015b828111156115975781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611564565b506115a39291506115a7565b5090565b5b808211156115a357600081556001016115a8565b6000602082840312156115ce57600080fd5b81356001600160e01b03198116811461061f57600080fd5b6000602082840312156115f857600080fd5b5035919050565b6001600160a01b038116811461051457600080fd5b60008060006060848603121561162957600080fd5b8335611634816115ff565b92506020840135611644816115ff565b929592945050506040919091013590565b6000806040838503121561166857600080fd5b82359150602083013561167a816115ff565b809150509250929050565b6000806020838503121561169857600080fd5b823567ffffffffffffffff808211156116b057600080fd5b818501915085601f8301126116c457600080fd5b8135818111156116d357600080fd5b8660208260051b85010111156116e857600080fd5b60209290920196919550909350505050565b6000806040838503121561170d57600080fd5b8235611718816115ff565b946020939093013593505050565b60006020828403121561173857600080fd5b813561061f816115ff565b60ff8116811461051457600080fd5b60006020828403121561176457600080fd5b813561061f81611743565b60005b8381101561178a578181015183820152602001611772565b50506000910152565b60208152600082518060208401526117b281604085016020870161176f565b601f01601f19169190910160400192915050565b6020808252825182820181905260009190848201906040850190845b818110156118075783516001600160a01b0316835292840192918401916001016117e2565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561183b57600080fd5b815161061f81611743565b60006020828403121561185857600080fd5b8151801515811461061f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561189057600080fd5b815167ffffffffffffffff808211156118a857600080fd5b818401915084601f8301126118bc57600080fd5b8151818111156118ce576118ce611868565b604051601f8201601f19908116603f011681019083821181831017156118f6576118f6611868565b8160405282815287602084870101111561190f57600080fd5b61192083602083016020880161176f565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816119505761195061192b565b506000190190565b6020808252825482820181905260008481528281209092916040850190845b818110156118075783546001600160a01b031683526001938401939285019201611977565b818103818111156105485761054861192b565b600080858511156119bf57600080fd5b838611156119cc57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015611a065780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052603160045260246000fdfeb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f999a264697066735822122001e96293b791a1cb7a365e53c8a2381e86a2d2227bf7299377f4ae8437a930e364736f6c63430008160033", - "sourceMap": "323:5144:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1001:113:91;;;:::i;:::-;;2565:202:62;;;;;;:::i;:::-;;:::i;:::-;;;470:14:139;;463:22;445:41;;433:2;418:18;2565:202:62;;;;;;;;802:86:90;;856:32;802:86;;;;;643:25:139;;;631:2;616:18;802:86:90;497:177:139;3810:120:62;;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;860:555:92;;;;;;:::i;:::-;;:::i;:::-;;;1633:4:139;1621:17;;;1603:36;;1591:2;1576:18;860:555:92;1461:184:139;4226:136:62;;;;;;:::i;:::-;;:::i;3255:118:91:-;3344:15;:22;3255:118;;797:280:93;;;;;;:::i;:::-;;:::i;5328:245:62:-;;;;;;:::i;:::-;;:::i;4051:143:93:-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3121:32:139;;;3103:51;;3091:2;3076:18;4051:143:93;2957:203:139;2580:194:93;;;;;;:::i;:::-;;:::i;1830:137:66:-;;;;;;:::i;:::-;1705:17;-1:-1:-1;;;;;1929:31:66;;;;;;;1830:137;666:98:90;;-1:-1:-1;;;;;;;;;;;666:98:90;;1622:107:66;1705:17;1622:107;;2978:1092:84;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3706:190:93:-;;;;;;:::i;:::-;;:::i;1163:115::-;;;:::i;3432:120::-;3522:16;:23;3432:120;;2854:136:62;;;;;;:::i;:::-;;:::i;2187:49::-;;2232:4;2187:49;;4097:151:91;;;:::i;:::-;;;;;;;:::i;4143:464:84:-;;;;;;:::i;:::-;;:::i;4282:153:93:-;;;:::i;1794:214:91:-;;;;;;:::i;:::-;;:::i;2502:272:84:-;;;;;;:::i;:::-;;:::i;648:267:91:-;;;;;;:::i;:::-;;:::i;3868:141::-;;;;;;:::i;:::-;;:::i;1963:217:93:-;;;;;;:::i;:::-;;:::i;2408:191:91:-;;;;;;:::i;:::-;;:::i;3526:187::-;;;;;;:::i;:::-;;:::i;1438:829:84:-;;;;;;:::i;:::-;;:::i;4642:138:62:-;;;;;;:::i;:::-;;:::i;1650:292:92:-;;;;;;:::i;:::-;;:::i;1001:113:91:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;1085:22:91::1;:20;:22::i;:::-;1001:113:::0;:::o;2565:202:62:-;2650:4;-1:-1:-1;;;;;;2673:47:62;;-1:-1:-1;;;2673:47:62;;:87;;-1:-1:-1;;;;;;;;;;861:40:78;;;2724:36:62;2666:94;2565:202;-1:-1:-1;;2565:202:62:o;860:555:92:-;1049:16;:23;1010:5;;;1082:272;1106:11;1102:1;:15;1082:272;;;1138:17;1174:16;1191:1;1174:19;;;;;;;;:::i;:::-;;;;;;;;;;;1158:100;;-1:-1:-1;;;1158:100:92;;-1:-1:-1;;;;;6735:15:139;;;1158:100:92;;;6717:34:139;6787:15;;;6767:18;;;6760:43;6819:18;;;6812:34;;;1174:19:92;;;;1158:79;;6652:18:139;;1158:100:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1138:120;-1:-1:-1;1276:15:92;;;;1272:72;;1318:11;-1:-1:-1;1311:18:92;;-1:-1:-1;;1311:18:92;1272:72;-1:-1:-1;1119:3:92;;1082:272;;;-1:-1:-1;1377:30:92;1371:37;1364:44;;;860:555;;;;;;:::o;4226:136:62:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;797:280:93:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;932::93::1;:23:::0;:27;928:81:::1;;975:23;:21;:23::i;:::-;1018:17;1028:6;;1018:9;:17::i;:::-;1045:25;:16;1064:6:::0;;1045:25:::1;:::i;5328:245:62:-:0;5443:12;:10;:12::i;:::-;-1:-1:-1;;;;;5421:34:62;:18;-1:-1:-1;;;;;5421:34:62;;5417:102;;5478:30;;-1:-1:-1;;;5478:30:62;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;:::-;;5328:245;;:::o;4051:143:93:-;4137:7;4163:16;4180:6;4163:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4163:24:93;;4051:143;-1:-1:-1;;4051:143:93:o;2580:194::-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;2723:44:93::1;2753:5;2761;2723:21;:44::i;2978:1092:84:-:0;3156:16;:23;3087:13;;3134:19;3189:379;3213:11;3209:1;:15;3189:379;;;3282:16;3299:1;3282:19;;;;;;;;:::i;:::-;;;;;;;;;;;3266:108;;-1:-1:-1;;;3266:108:84;;1633:4:139;1621:17;;3266:108:84;;;1603:36:139;-1:-1:-1;;;;;3282:19:84;;;;3266:90;;1576:18:139;;3266:108:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3245:313;;;3450:16;3467:1;3450:19;;;;;;;;:::i;:::-;;;;;;;;;;;3434:109;;-1:-1:-1;;;3434:109:84;;1633:4:139;1621:17;;3434:109:84;;;1603:36:139;-1:-1:-1;;;;;3450:19:84;;;;3434:91;;1576:18:139;;3434:109:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3434:109:84;;;;;;;;;;;;:::i;:::-;3407:136;2978:1092;-1:-1:-1;;;;2978:1092:84:o;3245:313::-;3226:3;;3189:379;;;-1:-1:-1;;3612:15:84;:22;3649:9;3644:377;3668:11;3664:1;:15;3644:377;;;3737:15;3753:1;3737:18;;;;;;;;:::i;:::-;;;;;;;;;;;3721:107;;-1:-1:-1;;;3721:107:84;;1633:4:139;1621:17;;3721:107:84;;;1603:36:139;-1:-1:-1;;;;;3737:18:84;;;;3721:89;;1576:18:139;;3721:107:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3700:311;;;3904:15;3920:1;3904:18;;;;;;;;:::i;3700:311::-;3681:3;;3644:377;;;-1:-1:-1;;4030:33:84;;;;;;;;;;;;;;;;;;2978:1092;-1:-1:-1;;2978:1092:84:o;3706:190:93:-;3798:13;3830:59;3856:16;3882:5;3830:25;:59::i;1163:115::-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;1248:23:93::1;:21;:23::i;2854:136:62:-:0;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:62;;;;;;;;;;;;;;;2854:136::o;4097:151:91:-;4187:16;4226:15;4219:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4219:22:91;;;;;;;;;;;;;;;;;;;;;;;4097:151;:::o;4143:464:84:-;4299:12;856:32:90;2464:16:62;2475:4;2464:10;:16::i;:::-;4374:65:84::1;4422:4;4428:2;4432:6;4374:47;:65::i;:::-;4356:131;;4471:5;4464:12;;;;4356:131;4544:56;4583:4;4589:2;4593:6;4544:38;:56::i;2490:1:62:-;4143:464:84::0;;;;;;:::o;4282:153:93:-;4373:16;4412;4405:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4405:23:93;;;;;;;;;;;;;;;;;;;;;;4282:153;:::o;1794:214:91:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;1909:54:91::1;1931:15;1956:5;1909:21;:54::i;:::-;1978:23;::::0;-1:-1:-1;;;;;1978:23:91;::::1;::::0;::::1;::::0;;;::::1;1794:214:::0;;:::o;2502:272:84:-;2633:4;;2668:46;2694:5;2701:3;2706:7;2668:25;:46::i;:::-;:99;;;;2502:272;-1:-1:-1;;;;2502:272:84:o;648:267:91:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;773:15:91::1;:22:::0;:26;769:79:::1;;815:22;:20;:22::i;:::-;857:17;867:6;;857:9;:17::i;:::-;884:24;:15;902:6:::0;;884:24:::1;:::i;3868:141::-:0;3953:7;3979:15;3995:6;3979:23;;;;;;;;:::i;1963:217:93:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;2080:55:93::1;2102:16;2128:5;2080:21;:55::i;2408:191:91:-:0;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;2549:43:91::1;2578:5;2586;2549:20;:43::i;3526:187::-:0;3616:13;3648:58;3674:15;3699:5;3648:25;:58::i;1438:829:84:-;1578:5;1617:10;1630:123;1700:5;1719:3;1736:7;1630:56;:123::i;:::-;1617:136;-1:-1:-1;1767:45:84;;;;1763:87;;1835:4;-1:-1:-1;1828:11:84;;1763:87;1903:15;:22;1881:19;1935:271;1959:11;1955:1;:15;1935:271;;;1991:17;2027:15;2043:1;2027:18;;;;;;;;:::i;:::-;;;;;;;;;;;2011:99;;-1:-1:-1;;;2011:99:84;;-1:-1:-1;;;;;6735:15:139;;;2011:99:84;;;6717:34:139;6787:15;;;6767:18;;;6760:43;6819:18;;;6812:34;;;2027:18:84;;;;2011:78;;6652:18:139;;2011:99:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1991:119;-1:-1:-1;2128:15:84;;;;2124:72;;2170:11;-1:-1:-1;2163:18:84;;-1:-1:-1;;;2163:18:84;2124:72;-1:-1:-1;1972:3:84;;1935:271;;;-1:-1:-1;2229:30:84;2216:44;1438:829;-1:-1:-1;;;;;;1438:829:84:o;4642:138:62:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;1650:292:92:-:0;1791:4;;1826:56;1862:5;1869:3;1874:7;1826:35;:56::i;3199:103:62:-;3265:30;3276:4;3282:12;:10;:12::i;:::-;3265:10;:30::i;1200:439:91:-;1363:15;:22;1251:13;;1346:245;1387:5;;1346:245;;1500:1;1496;:5;1488:13;;1529:51;1550:15;1566:5;1550:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1550:22:91;1574:5;1529:20;:51::i;:::-;1394:3;;;:::i;:::-;;;1346:245;;;;1605:27;1616:15;1605:27;;;;;;:::i;:::-;;;;;;;;1241:398;1200:439::o;6179:316:62:-;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:62;;;;;;;;;:36;;-1:-1:-1;;6315:36:62;6347:4;6315:36;;;6397:12;:10;:12::i;:::-;-1:-1:-1;;;;;6370:40:62;6388:7;-1:-1:-1;;;;;6370:40:62;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:62;6424:11;;6272:217;-1:-1:-1;6473:5:62;6466:12;;1364:444:93;1528:16;:23;1416:13;;1511:248;1553:5;;1511:248;;1666:1;1662;:5;1654:13;;1695:53;1717:16;1734:5;1717:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1717:23:93;1742:5;1695:21;:53::i;:::-;1560:3;;;:::i;:::-;;;1511:248;;;;1773:28;1784:16;1773:28;;;;;;:::i;596:600:94:-;682:1;665:18;;;661:81;;706:25;;-1:-1:-1;;;706:25:94;;;;;;;;;;;661:81;756:9;751:439;771:17;;;751:439;;;840:3;818:6;;825:1;818:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;810:34:94;;806:118;;871:38;;-1:-1:-1;;;871:38:94;;;;;;;;;;;806:118;941:14;:25;956:6;;963:1;956:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;941:25:94;;;;;;;;;;;;-1:-1:-1;941:25:94;;;;937:101;;;993:30;;-1:-1:-1;;;993:30:94;;;;;;;;;;;937:101;1079:4;1051:14;:25;1066:6;;1073:1;1066:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1051:25:94;;;;;;;;;;;;-1:-1:-1;1051:25:94;:32;;-1:-1:-1;;1051:32:94;;;;;;;;;;1110:6;;1117:1;1110:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1102:18:94;;;;;;;;;;;1162:3;;751:439;;4708:182:84;4819:14;4856:27;:25;:27::i;:::-;4849:34;;4708:182;:::o;6730:317:62:-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:62;;;;;;;;;:37;;-1:-1:-1;;6866:37:62;;;6949:12;:10;:12::i;:::-;-1:-1:-1;;;;;6922:40:62;6940:7;-1:-1:-1;;;;;6922:40:62;6934:4;6922:40;;;;;;;;;;-1:-1:-1;6983:4:62;6976:11;;3174:184:93;3254:56;3279:16;3297:5;3304;3254:24;:56::i;:::-;3325:26;;-1:-1:-1;;;;;3325:26:93;;;;;;;;3174:184;;:::o;2668:413:94:-;2823:13;;2776;;2846:199;2870:11;2862:5;:19;2846:199;;;2920:5;-1:-1:-1;;;;;2903:22:94;:6;2910:5;2903:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2903:13:94;:22;2899:73;;2945:12;;;2899:73;3013:7;;;;;2846:199;;;-1:-1:-1;;3061:13:94;;;2668:413;-1:-1:-1;2668:413:94:o;4473:513:91:-;4640:15;:22;4594:12;;;4672:287;4696:11;4692:1;:15;4672:287;;;4728:11;4757:15;4773:1;4757:18;;;;;;;;:::i;:::-;;;;;;;;;;;4742:135;;-1:-1:-1;;;4742:135:91;;-1:-1:-1;;;;;6735:15:139;;;4742:135:91;;;6717:34:139;6787:15;;;6767:18;;;6760:43;6819:18;;;6812:34;;;4757:18:91;;;;4742:52;;6652:18:139;;4742:135:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4728:149;;4896:6;4891:58;;4929:5;4922:12;;;;;;;4891:58;-1:-1:-1;4709:3:91;;4672:287;;;-1:-1:-1;4975:4:91;;4473:513;-1:-1:-1;;;;;4473:513:91:o;1351:354:94:-;-1:-1:-1;;;;;1433:30:94;;1429:106;;1486:38;;-1:-1:-1;;;1486:38:94;;;;;;;;;;;1429:106;-1:-1:-1;;;;;1548:21:94;;;;;;:14;:21;;;;;;;;1544:89;;;1592:30;;-1:-1:-1;;;1592:30:94;;;;;;;;;;;1544:89;1642:18;;;;;;;;-1:-1:-1;1642:18:94;;;;;;;;;;;;-1:-1:-1;;;;;1642:18:94;;;-1:-1:-1;;;;;;1642:18:94;;;;;;;1670:21;;;;;;;;;;:28;;-1:-1:-1;;1670:28:94;;;;;;1351:354::o;2999:182:91:-;3078:55;3103:15;3120:5;3127;3078:24;:55::i;3432:197:62:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:62;;-1:-1:-1;;;;;9708:32:139;;3565:47:62;;;9690:51:139;9757:18;;;9750:34;;;9663:18;;3565:47:62;;;;;;;3515:108;3432:197;;:::o;2204:429:66:-;2266:7;2310:8;3481:2;2420:10;-1:-1:-1;;;;;1705:17:66;1929:31;;2401:71;;;;;2453:19;2435:14;:37;;2401:71;2397:230;;;2511:8;;2520:36;2537:19;2520:14;:36;:::i;:::-;2511:47;;;;;:::i;:::-;2503:56;;;:::i;:::-;2495:65;;2488:72;;;;2204:429;:::o;2397:230::-;735:10:73;2591:25:66;;;;2204:429;:::o;2105:419:94:-;2252:5;-1:-1:-1;;;;;2235:22:94;:6;2242:5;2235:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2235:13:94;:22;2231:87;;2280:27;;-1:-1:-1;;;2280:27:94;;;;;;;;;;;2231:87;2340:13;;:17;;2356:1;;2340:17;:::i;:::-;2331:5;:26;2327:98;;2396:13;;2389:6;;2396:17;;2412:1;;2396:17;:::i;:::-;2389:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2389:25:94;2373:6;2380:5;2373:13;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;;-1:-1:-1;;;;;2373:41:94;;;;;-1:-1:-1;;;;;2373:41:94;;;;;;2327:98;2434:6;:12;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;2434:12:94;;;;;-1:-1:-1;;;;;;2434:12:94;;;;;;;;;-1:-1:-1;;;;;2456:21:94;;;;;2434:12;2456:21;;;;;;;:29;;-1:-1:-1;;2456:29:94;;;2500:17;2456:21;;2500:17;;;2105:419;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:286:139;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:139;;209:43;;199:71;;266:1;263;256:12;679:180;738:6;791:2;779:9;770:7;766:23;762:32;759:52;;;807:1;804;797:12;759:52;-1:-1:-1;830:23:139;;679:180;-1:-1:-1;679:180:139:o;864:131::-;-1:-1:-1;;;;;939:31:139;;929:42;;919:70;;985:1;982;975:12;1000:456;1077:6;1085;1093;1146:2;1134:9;1125:7;1121:23;1117:32;1114:52;;;1162:1;1159;1152:12;1114:52;1201:9;1188:23;1220:31;1245:5;1220:31;:::i;:::-;1270:5;-1:-1:-1;1327:2:139;1312:18;;1299:32;1340:33;1299:32;1340:33;:::i;:::-;1000:456;;1392:7;;-1:-1:-1;;;1446:2:139;1431:18;;;;1418:32;;1000:456::o;1650:315::-;1718:6;1726;1779:2;1767:9;1758:7;1754:23;1750:32;1747:52;;;1795:1;1792;1785:12;1747:52;1831:9;1818:23;1808:33;;1891:2;1880:9;1876:18;1863:32;1904:31;1929:5;1904:31;:::i;:::-;1954:5;1944:15;;;1650:315;;;;;:::o;2152:615::-;2238:6;2246;2299:2;2287:9;2278:7;2274:23;2270:32;2267:52;;;2315:1;2312;2305:12;2267:52;2355:9;2342:23;2384:18;2425:2;2417:6;2414:14;2411:34;;;2441:1;2438;2431:12;2411:34;2479:6;2468:9;2464:22;2454:32;;2524:7;2517:4;2513:2;2509:13;2505:27;2495:55;;2546:1;2543;2536:12;2495:55;2586:2;2573:16;2612:2;2604:6;2601:14;2598:34;;;2628:1;2625;2618:12;2598:34;2681:7;2676:2;2666:6;2663:1;2659:14;2655:2;2651:23;2647:32;2644:45;2641:65;;;2702:1;2699;2692:12;2641:65;2733:2;2725:11;;;;;2755:6;;-1:-1:-1;2152:615:139;;-1:-1:-1;;;;2152:615:139:o;3165:340::-;3258:6;3266;3319:2;3307:9;3298:7;3294:23;3290:32;3287:52;;;3335:1;3332;3325:12;3287:52;3374:9;3361:23;3393:31;3418:5;3393:31;:::i;:::-;3443:5;3495:2;3480:18;;;;3467:32;;-1:-1:-1;;;3165:340:139:o;3510:247::-;3569:6;3622:2;3610:9;3601:7;3597:23;3593:32;3590:52;;;3638:1;3635;3628:12;3590:52;3677:9;3664:23;3696:31;3721:5;3696:31;:::i;3762:114::-;3846:4;3839:5;3835:16;3828:5;3825:27;3815:55;;3866:1;3863;3856:12;3881:243;3938:6;3991:2;3979:9;3970:7;3966:23;3962:32;3959:52;;;4007:1;4004;3997:12;3959:52;4046:9;4033:23;4065:29;4088:5;4065:29;:::i;4129:250::-;4214:1;4224:113;4238:6;4235:1;4232:13;4224:113;;;4314:11;;;4308:18;4295:11;;;4288:39;4260:2;4253:10;4224:113;;;-1:-1:-1;;4371:1:139;4353:16;;4346:27;4129:250::o;4384:396::-;4533:2;4522:9;4515:21;4496:4;4565:6;4559:13;4608:6;4603:2;4592:9;4588:18;4581:34;4624:79;4696:6;4691:2;4680:9;4676:18;4671:2;4663:6;4659:15;4624:79;:::i;:::-;4764:2;4743:15;-1:-1:-1;;4739:29:139;4724:45;;;;4771:2;4720:54;;4384:396;-1:-1:-1;;4384:396:139:o;5062:658::-;5233:2;5285:21;;;5355:13;;5258:18;;;5377:22;;;5204:4;;5233:2;5456:15;;;;5430:2;5415:18;;;5204:4;5499:195;5513:6;5510:1;5507:13;5499:195;;;5578:13;;-1:-1:-1;;;;;5574:39:139;5562:52;;5669:15;;;;5634:12;;;;5610:1;5528:9;5499:195;;;-1:-1:-1;5711:3:139;;5062:658;-1:-1:-1;;;;;;5062:658:139:o;6345:127::-;6406:10;6401:3;6397:20;6394:1;6387:31;6437:4;6434:1;6427:15;6461:4;6458:1;6451:15;6857:247;6925:6;6978:2;6966:9;6957:7;6953:23;6949:32;6946:52;;;6994:1;6991;6984:12;6946:52;7026:9;7020:16;7045:29;7068:5;7045:29;:::i;7241:277::-;7308:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:52;;;7377:1;7374;7367:12;7329:52;7409:9;7403:16;7462:5;7455:13;7448:21;7441:5;7438:32;7428:60;;7484:1;7481;7474:12;7523:127;7584:10;7579:3;7575:20;7572:1;7565:31;7615:4;7612:1;7605:15;7639:4;7636:1;7629:15;7655:897;7735:6;7788:2;7776:9;7767:7;7763:23;7759:32;7756:52;;;7804:1;7801;7794:12;7756:52;7837:9;7831:16;7866:18;7907:2;7899:6;7896:14;7893:34;;;7923:1;7920;7913:12;7893:34;7961:6;7950:9;7946:22;7936:32;;8006:7;7999:4;7995:2;7991:13;7987:27;7977:55;;8028:1;8025;8018:12;7977:55;8057:2;8051:9;8079:2;8075;8072:10;8069:36;;;8085:18;;:::i;:::-;8160:2;8154:9;8128:2;8214:13;;-1:-1:-1;;8210:22:139;;;8234:2;8206:31;8202:40;8190:53;;;8258:18;;;8278:22;;;8255:46;8252:72;;;8304:18;;:::i;:::-;8344:10;8340:2;8333:22;8379:2;8371:6;8364:18;8419:7;8414:2;8409;8405;8401:11;8397:20;8394:33;8391:53;;;8440:1;8437;8430:12;8391:53;8453:68;8518:2;8513;8505:6;8501:15;8496:2;8492;8488:11;8453:68;:::i;:::-;8540:6;7655:897;-1:-1:-1;;;;;;;7655:897:139:o;8557:127::-;8618:10;8613:3;8609:20;8606:1;8599:31;8649:4;8646:1;8639:15;8673:4;8670:1;8663:15;8689:136;8728:3;8756:5;8746:39;;8765:18;;:::i;:::-;-1:-1:-1;;;8801:18:139;;8689:136::o;8830:681::-;8998:2;9050:21;;;9120:13;;9023:18;;;9142:22;;;8969:4;9207:17;;;9247:16;;;8969:4;;8998:2;9195;9180:18;;;8969:4;9291:194;9305:6;9302:1;9299:13;9291:194;;;9370:13;;-1:-1:-1;;;;;9366:39:139;9354:52;;9402:1;9461:14;;;;9426:12;;;;9320:9;9291:194;;9795:128;9862:9;;;9883:11;;;9880:37;;;9897:18;;:::i;9928:331::-;10033:9;10044;10086:8;10074:10;10071:24;10068:44;;;10108:1;10105;10098:12;10068:44;10137:6;10127:8;10124:20;10121:40;;;10157:1;10154;10147:12;10121:40;-1:-1:-1;;10183:23:139;;;10228:25;;;;;-1:-1:-1;9928:331:139:o;10264:337::-;-1:-1:-1;;10385:19:139;;10472:11;;;;10503:2;10495:11;;10492:103;;;10582:2;10576;10569:3;10565:2;10561:12;10558:1;10554:20;10550:29;10546:2;10542:38;10538:47;10529:56;;10492:103;;;10264:337;;;;:::o;10606:127::-;10667:10;10662:3;10658:20;10655:1;10648:31;10698:4;10695:1;10688:15;10722:4;10719:1;10712:15", - "linkReferences": {}, - "immutableReferences": { - "54247": [ - { "start": 829, "length": 32 }, - { "start": 900, "length": 32 }, - { "start": 4989, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "RULE_ENGINE_OPERATOR_ROLE()": "6728f545", - "TOKEN_CONTRACT_ROLE()": "0fbbfb55", - "addRuleOperation(address)": "c68a651a", - "addRuleValidation(address)": "cd1d4dc7", - "clearRulesOperation()": "001582f7", - "clearRulesValidation()": "8a1b6c8e", - "detectTransferRestriction(address,address,uint256)": "d4ce1415", - "detectTransferRestrictionValidation(address,address,uint256)": "28aa67bc", - "getRoleAdmin(bytes32)": "248a9ca3", - "getRuleIndexOperation(address)": "d0e835f2", - "getRuleIndexValidation(address)": "83304df0", - "grantRole(bytes32,address)": "2f2ff15d", - "hasRole(bytes32,address)": "91d14854", - "isTrustedForwarder(address)": "572b6c05", - "messageForTransferRestriction(uint8)": "7f4ab1dd", - "operateOnTransfer(address,address,uint256)": "c03888c2", - "removeRuleOperation(address,uint256)": "ce29ed35", - "removeRuleValidation(address,uint256)": "4d53374e", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "ruleOperation(uint256)": "ca3e16e7", - "ruleValidation(uint256)": "397a7d3c", - "rulesCountOperation()": "323a4616", - "rulesCountValidation()": "8a2021b1", - "rulesOperation()": "a39eda14", - "rulesValidation()": "c57086a1", - "setRulesOperation(address[])": "ca1f6c4d", - "setRulesValidation(address[])": "334a29cc", - "supportsInterface(bytes4)": "01ffc9a7", - "trustedForwarder()": "7da0a877", - "validateTransfer(address,address,uint256)": "c6946a12", - "validateTransferValidation(address,address,uint256)": "eb2647e3" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarderIrrevocable\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_AdminWithAddressZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_ArrayIsEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleAddressZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleDoNotMatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_TransferInvalid\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rule\",\"type\":\"address\"}],\"name\":\"AddRule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"rulesRemoved\",\"type\":\"address[]\"}],\"name\":\"ClearRules\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rule\",\"type\":\"address\"}],\"name\":\"RemoveRule\",\"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\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RULE_ENGINE_OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_CONTRACT_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleOperation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"addRuleOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"addRuleValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearRulesOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearRulesValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"detectTransferRestriction\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"detectTransferRestrictionValidation\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleOperation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"getRuleIndexOperation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"getRuleIndexValidation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_restrictionCode\",\"type\":\"uint8\"}],\"name\":\"messageForTransferRestriction\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"operateOnTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleOperation\",\"name\":\"rule_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removeRuleOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removeRuleValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ruleId\",\"type\":\"uint256\"}],\"name\":\"ruleOperation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ruleId\",\"type\":\"uint256\"}],\"name\":\"ruleValidation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesCountOperation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesCountValidation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesOperation\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesValidation\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"rules_\",\"type\":\"address[]\"}],\"name\":\"setRulesOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"rules_\",\"type\":\"address[]\"}],\"name\":\"setRulesValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"validateTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"validateTransferValidation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"admin\":\"Address of the contract (Access Control)\",\"forwarderIrrevocable\":\"Address of the forwarder, required for the gasless support\"}},\"detectTransferRestriction(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*\"}},\"detectTransferRestrictionValidation(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRuleIndexOperation(address)\":{\"returns\":{\"index\":\"if the rule is found, _rulesOperation.length otherwise\"}},\"getRuleIndexValidation(address)\":{\"returns\":{\"index\":\"if the rule is found, _rulesValidation.length otherwise\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"messageForTransferRestriction(uint8)\":{\"params\":{\"_restrictionCode\":\"The target restriction code\"},\"returns\":{\"_0\":\"True if the transfer is valid, false otherwise*\"}},\"removeRuleOperation(address,uint256)\":{\"details\":\"To reduce the array size, the last rule is moved to the location occupied by the rule to remove\",\"params\":{\"index\":\"the position inside the array of rule\",\"rule_\":\"address of the target rule\"}},\"removeRuleValidation(address,uint256)\":{\"details\":\"To reduce the array size, the last rule is moved to the location occupied by the rule to remove\",\"params\":{\"index\":\"the position inside the array of rule\",\"rule_\":\"address of the target rule\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"ruleOperation(uint256)\":{\"params\":{\"ruleId\":\"index of the rule\"},\"returns\":{\"_0\":\"a rule address\"}},\"ruleValidation(uint256)\":{\"params\":{\"ruleId\":\"index of the rule\"},\"returns\":{\"_0\":\"a rule address\"}},\"rulesCountOperation()\":{\"returns\":{\"_0\":\"The number of rules inside the array\"}},\"rulesCountValidation()\":{\"returns\":{\"_0\":\"The number of rules inside the array\"}},\"rulesOperation()\":{\"returns\":{\"_0\":\"An array of rules\"}},\"rulesValidation()\":{\"returns\":{\"_0\":\"An array of rules\"}},\"setRulesValidation(address[])\":{\"details\":\"take address[] instead of IRuleEngineValidation[] since it is not possible to cast IRuleEngineValidation[] -> address[]\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"validateTransfer(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"True if the transfer is valid, false otherwise*\"}},\"validateTransferValidation(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"True if the transfer is valid, false otherwise*\"}}},\"title\":\"Implementation of a ruleEngine as defined by the CMTAT\",\"version\":1},\"userdoc\":{\"events\":{\"AddRule(address)\":{\"notice\":\"Generate when a rule is added\"},\"ClearRules(address[])\":{\"notice\":\"Generate when all the rules are cleared\"},\"RemoveRule(address)\":{\"notice\":\"Generate when a rule is removed\"}},\"kind\":\"user\",\"methods\":{\"RULE_ENGINE_OPERATOR_ROLE()\":{\"notice\":\"Role to manage the ruleEngine\"},\"TOKEN_CONTRACT_ROLE()\":{\"notice\":\"token contract\"},\"addRuleOperation(address)\":{\"notice\":\"Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present\"},\"addRuleValidation(address)\":{\"notice\":\"Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present\"},\"clearRulesOperation()\":{\"notice\":\"Clear all the rules of the array of rules\"},\"clearRulesValidation()\":{\"notice\":\"Clear all the rules of the array of rules\"},\"detectTransferRestriction(address,address,uint256)\":{\"notice\":\"Go through all the rule to know if a restriction exists on the transfer\"},\"detectTransferRestrictionValidation(address,address,uint256)\":{\"notice\":\"Go through all the rule to know if a restriction exists on the transfer\"},\"getRuleIndexOperation(address)\":{\"notice\":\"Get the index of a rule inside the list\"},\"getRuleIndexValidation(address)\":{\"notice\":\"Get the index of a rule inside the list\"},\"messageForTransferRestriction(uint8)\":{\"notice\":\"Return the message corresponding to the code\"},\"removeRuleOperation(address,uint256)\":{\"notice\":\"Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument\"},\"removeRuleValidation(address,uint256)\":{\"notice\":\"Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument\"},\"ruleOperation(uint256)\":{\"notice\":\"Get the rule at the position specified by ruleId\"},\"ruleValidation(uint256)\":{\"notice\":\"Get the rule at the position specified by ruleId\"},\"rulesOperation()\":{\"notice\":\"Get all the rules\"},\"rulesValidation()\":{\"notice\":\"Get all the rules\"},\"setRulesOperation(address[])\":{\"notice\":\"Set all the rules, will overwrite all the previous rules. \\\\n Revert if one rule is a zero address or if the rule is already present\"},\"setRulesValidation(address[])\":{\"notice\":\"Set all the rules, will overwrite all the previous rules. \\\\n Revert if one rule is a zero address or if the rule is already present\"},\"validateTransfer(address,address,uint256)\":{\"notice\":\"Validate a transfer\"},\"validateTransferValidation(address,address,uint256)\":{\"notice\":\"Validate a transfer\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RuleEngine.sol\":\"RuleEngine\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":CMTAT/=lib/CMTAT/contracts/\",\":OZ/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol\":{\"keccak256\":\"0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0\",\"dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol\":{\"keccak256\":\"0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423\",\"dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol\":{\"keccak256\":\"0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e\",\"dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF\"]},\"lib/CMTAT/contracts/interfaces/engine/IRuleEngine.sol\":{\"keccak256\":\"0x5db0b6db44e76f6b52541fdd68f5d534c035777c00df4f65e66a500e46d1049f\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a03b82a1cfcda98db1a52a0e6fb1a22cf4545604e59167a7c23439ef463b9607\",\"dweb:/ipfs/QmPwqKgMSBmURhgmvXi2hMxM7FTLTtEsZMn6mXRjpbqxSc\"]},\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"src/RuleEngine.sol\":{\"keccak256\":\"0x108df8613195e2df8429038ed65bdc4cf930bda8fa86ca2b13311ad5383727f5\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://f81ea56c32b2c8e92d80cd3ed0cad80b5f2a3fac35f54532ce1dcd2b436a5f9b\",\"dweb:/ipfs/QmW6GdVvEfyn47o9GkcpybmP8PYDfT6fvTFHAU1syMkdya\"]},\"src/interfaces/IRuleEngineOperation.sol\":{\"keccak256\":\"0x21f2fe8b4408853f65d5b9540426d93286c6be1a6e7424a243034453bb961809\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://3c0fc26eb256d6e6a1e85a07ed83b50a16cf0a519abf8d405388505e21dd6b91\",\"dweb:/ipfs/Qmamkpa5fBptqAa2kXZLAqKXJY4NMdFWw8ozwob9o8Ze76\"]},\"src/interfaces/IRuleEngineValidation.sol\":{\"keccak256\":\"0x19f9b71580dddb20a29570bff88f711abf0c8aec18bd563643764aa37355eac1\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://4a48e1abaa9d740c88bb33958b2227b1d98723a357fe35a6cc3a2843b00cdc20\",\"dweb:/ipfs/QmVaEQQhH522tKEJLizmFDuTeAyxb8bZP7byHpfNxwSmyT\"]},\"src/interfaces/IRuleOperation.sol\":{\"keccak256\":\"0x4960e62d6678d66d36d611f2e6819fbdeeed748c2d638965bf631b88c3beefb6\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://b5509fccac80d4ab115d73281b22cc3877a7295ed39d901aba8fd73ce9275fce\",\"dweb:/ipfs/QmZQHqPtv2K7Bv4no5gnqmpWX92Gq7ENTD7vvZNvj5bUZE\"]},\"src/interfaces/IRuleValidation.sol\":{\"keccak256\":\"0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9\",\"dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8\"]},\"src/modules/MetaTxModuleStandalone.sol\":{\"keccak256\":\"0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25\",\"dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj\"]},\"src/modules/RuleEngineInvariantStorage.sol\":{\"keccak256\":\"0x09093b1b80c8fd27ef80aaec46522ec5525aebcdb0fe77231821197d6fe7a1a0\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://4939364678439e43818b1efb114b662219629b5945ecd98b1e39eca64d46dc44\",\"dweb:/ipfs/QmSikHEsDZy8hzyQ33N3AhiM25S7pCFEmqADZxK53FpCDq\"]},\"src/modules/RuleEngineOperation.sol\":{\"keccak256\":\"0xb8c4fa96bc94d612ee39003f13092611b2ecaaf668d566636026a20fab957e7a\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://4249be172c68926880eb32292b9f4c917eb1b9e6ca14845b71757dd5c219b5bd\",\"dweb:/ipfs/QmQYNUiQGSANNtUTmMg2H7PiN68mEvKJzgWin9QdZzgNrs\"]},\"src/modules/RuleEngineValidation.sol\":{\"keccak256\":\"0x9922d5d720fb23684e32a17ea6a99d40b7f516b6c2078eb94ebe7efdc5ead367\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://0982786aeb0ce4e2a04a99cf306f67ce0d20f1a11c81070f070429d76117d26a\",\"dweb:/ipfs/QmPfmFe5D5eWiMFj1VKWfDhomMmqiUgmpGC4LaqLfTKR9w\"]},\"src/modules/RuleEngineValidationCommon.sol\":{\"keccak256\":\"0xf1d0fdd62ba10b81918a6749e1fcf9f020b298a8179a1cf6c849fe0aaa5edddb\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://57ae96630675750b371656a3e9ce3a5b1e2ce16327d3e292b934def1b85c8a1d\",\"dweb:/ipfs/QmZm9obyXiMCJzLPNCvvtN9QogngmRnkZJmBke2bc79Jgk\"]},\"src/modules/RuleInternal.sol\":{\"keccak256\":\"0xa6d2f8844062b318c31cb97570b840ac2faa50111564c97b7190bcadcab4419c\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://878b4ba012b1c46973bb50018973a90ea6b700706a2ae52b0bae7d240df510b3\",\"dweb:/ipfs/QmdRjwxgoo4xc3JmyAirRbbLupKVZ51r67e1D93bTFSF6A\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "admin", "type": "address" }, - { - "internalType": "address", - "name": "forwarderIrrevocable", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenContract", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "inputs": [], - "type": "error", - "name": "RuleEngine_AdminWithAddressZeroNotAllowed" - }, - { "inputs": [], "type": "error", "name": "RuleEngine_ArrayIsEmpty" }, - { - "inputs": [], - "type": "error", - "name": "RuleEngine_RuleAddressZeroNotAllowed" - }, - { - "inputs": [], - "type": "error", - "name": "RuleEngine_RuleAlreadyExists" - }, - { "inputs": [], "type": "error", "name": "RuleEngine_RuleDoNotMatch" }, - { "inputs": [], "type": "error", "name": "RuleEngine_TransferInvalid" }, - { - "inputs": [ - { - "internalType": "address", - "name": "rule", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "AddRule", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "rulesRemoved", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "ClearRules", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rule", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RemoveRule", - "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": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "RULE_ENGINE_OPERATOR_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "TOKEN_CONTRACT_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "contract IRuleOperation", - "name": "rule_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addRuleOperation" - }, - { - "inputs": [ - { - "internalType": "contract IRuleValidation", - "name": "rule_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addRuleValidation" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "clearRulesOperation" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "clearRulesValidation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "detectTransferRestriction", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "detectTransferRestrictionValidation", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "contract IRuleOperation", - "name": "rule_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getRuleIndexOperation", - "outputs": [ - { "internalType": "uint256", "name": "index", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "contract IRuleValidation", - "name": "rule_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getRuleIndexValidation", - "outputs": [ - { "internalType": "uint256", "name": "index", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isTrustedForwarder", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_restrictionCode", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function", - "name": "messageForTransferRestriction", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "operateOnTransfer", - "outputs": [ - { "internalType": "bool", "name": "isValid", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "contract IRuleOperation", - "name": "rule_", - "type": "address" - }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeRuleOperation" - }, - { - "inputs": [ - { - "internalType": "contract IRuleValidation", - "name": "rule_", - "type": "address" - }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeRuleValidation" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "ruleId", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "ruleOperation", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "ruleId", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "ruleValidation", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rulesCountOperation", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rulesCountValidation", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rulesOperation", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rulesValidation", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "rules_", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setRulesOperation" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "rules_", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setRulesValidation" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "trustedForwarder", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "validateTransfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "validateTransferValidation", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "params": { - "admin": "Address of the contract (Access Control)", - "forwarderIrrevocable": "Address of the forwarder, required for the gasless support" - } - }, - "detectTransferRestriction(address,address,uint256)": { - "params": { - "_amount": "to transfer", - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "_0": "The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*" - } - }, - "detectTransferRestrictionValidation(address,address,uint256)": { - "params": { - "_amount": "to transfer", - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "_0": "The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "getRuleIndexOperation(address)": { - "returns": { - "index": "if the rule is found, _rulesOperation.length otherwise" - } - }, - "getRuleIndexValidation(address)": { - "returns": { - "index": "if the rule is found, _rulesValidation.length otherwise" - } - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "isTrustedForwarder(address)": { - "details": "Indicates whether any particular address is the trusted forwarder." - }, - "messageForTransferRestriction(uint8)": { - "params": { "_restrictionCode": "The target restriction code" }, - "returns": { - "_0": "True if the transfer is valid, false otherwise*" - } - }, - "removeRuleOperation(address,uint256)": { - "details": "To reduce the array size, the last rule is moved to the location occupied by the rule to remove", - "params": { - "index": "the position inside the array of rule", - "rule_": "address of the target rule" - } - }, - "removeRuleValidation(address,uint256)": { - "details": "To reduce the array size, the last rule is moved to the location occupied by the rule to remove", - "params": { - "index": "the position inside the array of rule", - "rule_": "address of the target rule" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "ruleOperation(uint256)": { - "params": { "ruleId": "index of the rule" }, - "returns": { "_0": "a rule address" } - }, - "ruleValidation(uint256)": { - "params": { "ruleId": "index of the rule" }, - "returns": { "_0": "a rule address" } - }, - "rulesCountOperation()": { - "returns": { "_0": "The number of rules inside the array" } - }, - "rulesCountValidation()": { - "returns": { "_0": "The number of rules inside the array" } - }, - "rulesOperation()": { "returns": { "_0": "An array of rules" } }, - "rulesValidation()": { "returns": { "_0": "An array of rules" } }, - "setRulesValidation(address[])": { - "details": "take address[] instead of IRuleEngineValidation[] since it is not possible to cast IRuleEngineValidation[] -> address[]" - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "trustedForwarder()": { - "details": "Returns the address of the trusted forwarder." - }, - "validateTransfer(address,address,uint256)": { - "params": { - "_amount": "to transfer", - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "_0": "True if the transfer is valid, false otherwise*" - } - }, - "validateTransferValidation(address,address,uint256)": { - "params": { - "_amount": "to transfer", - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "_0": "True if the transfer is valid, false otherwise*" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "RULE_ENGINE_OPERATOR_ROLE()": { - "notice": "Role to manage the ruleEngine" - }, - "TOKEN_CONTRACT_ROLE()": { "notice": "token contract" }, - "addRuleOperation(address)": { - "notice": "Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present" - }, - "addRuleValidation(address)": { - "notice": "Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present" - }, - "clearRulesOperation()": { - "notice": "Clear all the rules of the array of rules" - }, - "clearRulesValidation()": { - "notice": "Clear all the rules of the array of rules" - }, - "detectTransferRestriction(address,address,uint256)": { - "notice": "Go through all the rule to know if a restriction exists on the transfer" - }, - "detectTransferRestrictionValidation(address,address,uint256)": { - "notice": "Go through all the rule to know if a restriction exists on the transfer" - }, - "getRuleIndexOperation(address)": { - "notice": "Get the index of a rule inside the list" - }, - "getRuleIndexValidation(address)": { - "notice": "Get the index of a rule inside the list" - }, - "messageForTransferRestriction(uint8)": { - "notice": "Return the message corresponding to the code" - }, - "removeRuleOperation(address,uint256)": { - "notice": "Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument" - }, - "removeRuleValidation(address,uint256)": { - "notice": "Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument" - }, - "ruleOperation(uint256)": { - "notice": "Get the rule at the position specified by ruleId" - }, - "ruleValidation(uint256)": { - "notice": "Get the rule at the position specified by ruleId" - }, - "rulesOperation()": { "notice": "Get all the rules" }, - "rulesValidation()": { "notice": "Get all the rules" }, - "setRulesOperation(address[])": { - "notice": "Set all the rules, will overwrite all the previous rules. \\n Revert if one rule is a zero address or if the rule is already present" - }, - "setRulesValidation(address[])": { - "notice": "Set all the rules, will overwrite all the previous rules. \\n Revert if one rule is a zero address or if the rule is already present" - }, - "validateTransfer(address,address,uint256)": { - "notice": "Validate a transfer" - }, - "validateTransferValidation(address,address,uint256)": { - "notice": "Validate a transfer" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "CMTAT/=lib/CMTAT/contracts/", - "OZ/=lib/openzeppelin-contracts/contracts/", - "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/RuleEngine.sol": "RuleEngine" }, - "evmVersion": "london", - "libraries": {} - }, - "sources": { - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol": { - "keccak256": "0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad", - "urls": [ - "bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0", - "dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg" - ], - "license": "MPL-2.0" - }, - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol": { - "keccak256": "0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed", - "urls": [ - "bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423", - "dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx" - ], - "license": "MPL-2.0" - }, - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol": { - "keccak256": "0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3", - "urls": [ - "bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e", - "dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF" - ], - "license": "MPL-2.0" - }, - "lib/CMTAT/contracts/interfaces/engine/IRuleEngine.sol": { - "keccak256": "0x5db0b6db44e76f6b52541fdd68f5d534c035777c00df4f65e66a500e46d1049f", - "urls": [ - "bzz-raw://a03b82a1cfcda98db1a52a0e6fb1a22cf4545604e59167a7c23439ef463b9607", - "dweb:/ipfs/QmPwqKgMSBmURhgmvXi2hMxM7FTLTtEsZMn6mXRjpbqxSc" - ], - "license": "MPL-2.0" - }, - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": { - "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", - "urls": [ - "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", - "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol": { - "keccak256": "0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6", - "urls": [ - "bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f", - "dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133", - "urls": [ - "bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8", - "dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", - "urls": [ - "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", - "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" - ], - "license": "MIT" - }, - "src/RuleEngine.sol": { - "keccak256": "0x108df8613195e2df8429038ed65bdc4cf930bda8fa86ca2b13311ad5383727f5", - "urls": [ - "bzz-raw://f81ea56c32b2c8e92d80cd3ed0cad80b5f2a3fac35f54532ce1dcd2b436a5f9b", - "dweb:/ipfs/QmW6GdVvEfyn47o9GkcpybmP8PYDfT6fvTFHAU1syMkdya" - ], - "license": "MPL-2.0" - }, - "src/interfaces/IRuleEngineOperation.sol": { - "keccak256": "0x21f2fe8b4408853f65d5b9540426d93286c6be1a6e7424a243034453bb961809", - "urls": [ - "bzz-raw://3c0fc26eb256d6e6a1e85a07ed83b50a16cf0a519abf8d405388505e21dd6b91", - "dweb:/ipfs/Qmamkpa5fBptqAa2kXZLAqKXJY4NMdFWw8ozwob9o8Ze76" - ], - "license": "MPL-2.0" - }, - "src/interfaces/IRuleEngineValidation.sol": { - "keccak256": "0x19f9b71580dddb20a29570bff88f711abf0c8aec18bd563643764aa37355eac1", - "urls": [ - "bzz-raw://4a48e1abaa9d740c88bb33958b2227b1d98723a357fe35a6cc3a2843b00cdc20", - "dweb:/ipfs/QmVaEQQhH522tKEJLizmFDuTeAyxb8bZP7byHpfNxwSmyT" - ], - "license": "MPL-2.0" - }, - "src/interfaces/IRuleOperation.sol": { - "keccak256": "0x4960e62d6678d66d36d611f2e6819fbdeeed748c2d638965bf631b88c3beefb6", - "urls": [ - "bzz-raw://b5509fccac80d4ab115d73281b22cc3877a7295ed39d901aba8fd73ce9275fce", - "dweb:/ipfs/QmZQHqPtv2K7Bv4no5gnqmpWX92Gq7ENTD7vvZNvj5bUZE" - ], - "license": "MPL-2.0" - }, - "src/interfaces/IRuleValidation.sol": { - "keccak256": "0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1", - "urls": [ - "bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9", - "dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8" - ], - "license": "MPL-2.0" - }, - "src/modules/MetaTxModuleStandalone.sol": { - "keccak256": "0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0", - "urls": [ - "bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25", - "dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj" - ], - "license": "MPL-2.0" - }, - "src/modules/RuleEngineInvariantStorage.sol": { - "keccak256": "0x09093b1b80c8fd27ef80aaec46522ec5525aebcdb0fe77231821197d6fe7a1a0", - "urls": [ - "bzz-raw://4939364678439e43818b1efb114b662219629b5945ecd98b1e39eca64d46dc44", - "dweb:/ipfs/QmSikHEsDZy8hzyQ33N3AhiM25S7pCFEmqADZxK53FpCDq" - ], - "license": "MPL-2.0" - }, - "src/modules/RuleEngineOperation.sol": { - "keccak256": "0xb8c4fa96bc94d612ee39003f13092611b2ecaaf668d566636026a20fab957e7a", - "urls": [ - "bzz-raw://4249be172c68926880eb32292b9f4c917eb1b9e6ca14845b71757dd5c219b5bd", - "dweb:/ipfs/QmQYNUiQGSANNtUTmMg2H7PiN68mEvKJzgWin9QdZzgNrs" - ], - "license": "MPL-2.0" - }, - "src/modules/RuleEngineValidation.sol": { - "keccak256": "0x9922d5d720fb23684e32a17ea6a99d40b7f516b6c2078eb94ebe7efdc5ead367", - "urls": [ - "bzz-raw://0982786aeb0ce4e2a04a99cf306f67ce0d20f1a11c81070f070429d76117d26a", - "dweb:/ipfs/QmPfmFe5D5eWiMFj1VKWfDhomMmqiUgmpGC4LaqLfTKR9w" - ], - "license": "MPL-2.0" - }, - "src/modules/RuleEngineValidationCommon.sol": { - "keccak256": "0xf1d0fdd62ba10b81918a6749e1fcf9f020b298a8179a1cf6c849fe0aaa5edddb", - "urls": [ - "bzz-raw://57ae96630675750b371656a3e9ce3a5b1e2ce16327d3e292b934def1b85c8a1d", - "dweb:/ipfs/QmZm9obyXiMCJzLPNCvvtN9QogngmRnkZJmBke2bc79Jgk" - ], - "license": "MPL-2.0" - }, - "src/modules/RuleInternal.sol": { - "keccak256": "0xa6d2f8844062b318c31cb97570b840ac2faa50111564c97b7190bcadcab4419c", - "urls": [ - "bzz-raw://878b4ba012b1c46973bb50018973a90ea6b700706a2ae52b0bae7d240df510b3", - "dweb:/ipfs/QmdRjwxgoo4xc3JmyAirRbbLupKVZ51r67e1D93bTFSF6A" - ], - "license": "MPL-2.0" - } - }, - "version": 1 - }, - "id": 84 -} diff --git a/RuleWhitelistWrapper.json b/RuleWhitelistWrapper.json deleted file mode 100644 index 73281c9..0000000 --- a/RuleWhitelistWrapper.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"admin","type":"address","internalType":"address"},{"name":"forwarderIrrevocable","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"CODE_ADDRESS_FROM_NOT_WHITELISTED","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"CODE_ADDRESS_TO_NOT_WHITELISTED","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"RULE_ENGINE_OPERATOR_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TOKEN_CONTRACT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addRuleValidation","inputs":[{"name":"rule_","type":"address","internalType":"contract IRuleValidation"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canReturnTransferRestrictionCode","inputs":[{"name":"_restrictionCode","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"clearRulesValidation","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"detectTransferRestriction","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getRuleIndexValidation","inputs":[{"name":"rule_","type":"address","internalType":"contract IRuleValidation"}],"outputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTrustedForwarder","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"messageForTransferRestriction","inputs":[{"name":"_restrictionCode","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"removeRuleValidation","inputs":[{"name":"rule_","type":"address","internalType":"contract IRuleValidation"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ruleValidation","inputs":[{"name":"ruleId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"rulesCountValidation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rulesValidation","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"setRulesValidation","inputs":[{"name":"rules_","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"trustedForwarder","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"validateTransfer","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"isValid","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AddRule","inputs":[{"name":"rule","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ClearRules","inputs":[{"name":"rulesRemoved","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"RemoveRule","inputs":[{"name":"rule","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":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"RuleEngine_AdminWithAddressZeroNotAllowed","inputs":[]},{"type":"error","name":"RuleEngine_ArrayIsEmpty","inputs":[]},{"type":"error","name":"RuleEngine_RuleAddressZeroNotAllowed","inputs":[]},{"type":"error","name":"RuleEngine_RuleAlreadyExists","inputs":[]},{"type":"error","name":"RuleEngine_RuleDoNotMatch","inputs":[]}],"bytecode":{"object":"0x60a06040523480156200001157600080fd5b506040516200197138038062001971833981016040819052620000349162000207565b6001600160a01b0380821660805282166200006257604051630872273360e21b815260040160405180910390fd5b6200006f600083620000a5565b506200009c7fb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f99983620000a5565b505050620002be565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200014c576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200010362000156565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000150565b5060005b92915050565b60006200016262000167565b905090565b60003660146200017733620001c3565b8015620001845750808210155b15620001bb576000366200019983856200023f565b620001a692829062000261565b620001b1916200028d565b60601c9250505090565b339250505090565b6000620001cf60805190565b6001600160a01b0316826001600160a01b0316149050919050565b80516001600160a01b03811681146200020257600080fd5b919050565b600080604083850312156200021b57600080fd5b6200022683620001ea565b91506200023660208401620001ea565b90509250929050565b818103818111156200015057634e487b7160e01b600052601160045260246000fd5b600080858511156200027257600080fd5b838611156200028057600080fd5b5050820193919092039150565b6001600160601b03198135818116916014851015620002b65780818660140360031b1b83161692505b505092915050565b608051611689620002e860003960008181610281015281816102f50152610f4701526116896000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80637da0a877116100de578063a217fddf11610097578063cd1d4dc711610071578063cd1d4dc71461039f578063d4ce1415146103b2578063d547741f146103c5578063db136dad146103d857600080fd5b8063a217fddf1461036f578063c57086a114610377578063c6946a121461038c57600080fd5b80637da0a877146102f35780637f4ab1dd1461031957806383304df0146103395780638a1b6c8e1461034c5780638a2021b11461035457806391d148541461035c57600080fd5b8063397a7d3c11610130578063397a7d3c146102335780634d53374e1461025e578063572b6c05146102715780635b119c0a146102b15780636728f545146102cb5780637d045df6146102e057600080fd5b806301ffc9a7146101785780630fbbfb55146101a0578063248a9ca3146101d55780632f2ff15d146101f8578063334a29cc1461020d57806336568abe14610220575b600080fd5b61018b610186366004611186565b6103e0565b60405190151581526020015b60405180910390f35b6101c77fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a381565b604051908152602001610197565b6101c76101e33660046111b0565b60009081526020819052604090206001015490565b61020b6102063660046111de565b610417565b005b61020b61021b36600461120e565b610442565b61020b61022e3660046111de565b610480565b6102466102413660046111b0565b6104c8565b6040516001600160a01b039091168152602001610197565b61020b61026c366004611283565b6104f8565b61018b61027f3660046112af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102b9601581565b60405160ff9091168152602001610197565b6101c76000805160206115ed83398151915281565b61018b6102ee3660046112db565b61051a565b7f0000000000000000000000000000000000000000000000000000000000000000610246565b61032c6103273660046112db565b610536565b60405161019791906112f8565b6101c76103473660046112af565b6105cc565b61020b6105d9565b6002546101c7565b61018b61036a3660046111de565b6105fc565b6101c7600081565b61037f610625565b6040516101979190611347565b61018b61039a366004611394565b610687565b61020b6103ad3660046112af565b610711565b6102b96103c0366004611394565b61076c565b61020b6103d33660046111de565b610a1c565b6102b9601681565b60006001600160e01b03198216637965db0b60e01b148061041157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461043281610a41565b61043c8383610a52565b50505050565b6000805160206115ed83398151915261045a81610a41565b6002541561046a5761046a610ae5565b6104748383610b75565b61043c6002848461110e565b610488610d10565b6001600160a01b0316816001600160a01b0316146104b95760405163334bd91960e11b815260040160405180910390fd5b6104c38282610d1f565b505050565b6000600282815481106104dd576104dd6113d5565b6000918252602090912001546001600160a01b031692915050565b6000805160206115ed83398151915261051081610a41565b6104c38383610da8565b600060ff821660151480610411575060ff821660161492915050565b606060141960ff831601610563576040518060600160405280602281526020016116326022913992915050565b60151960ff83160161058e5760405180606001604052806025815260200161160d6025913992915050565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015290565b919050565b6000610411600283610dec565b6000805160206115ed8339815191526105f181610a41565b6105f9610ae5565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600280548060200260200160405190810160405280929190818152602001828054801561067d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161065f575b5050505050905090565b60405163d4ce141560e01b81526001600160a01b03848116600483015283166024820152604481018290526000908190309063d4ce141590606401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906113eb565b60ff161490505b9392505050565b6000805160206115ed83398151915261072981610a41565b610734600283610e4a565b6040516001600160a01b038316907f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4690600090a25050565b6040805160028082526060820183526000928392919060208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750506040805160028082526060820183529394506000939092509060208301908036833701905050905086836000815181106107ed576107ed6113d5565b60200260200101906001600160a01b031690816001600160a01b0316815250508583600181518110610821576108216113d5565b6001600160a01b039092166020928302919091019091015260025460005b818110156109b6576002818154811061085a5761085a6113d5565b60009182526020909120015460405163051b206960e11b81526001600160a01b0390911690630a3640d290610893908890600401611347565b600060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d8919081019061142e565b9350836000815181106108ed576108ed6113d5565b6020026020010151801561091957508260008151811061090f5761090f6113d5565b6020026020010151155b1561094457600183600081518110610933576109336113d5565b911515602092830291909101909101525b83600181518110610957576109576113d5565b60200260200101518015610983575082600181518110610979576109796113d5565b6020026020010151155b156109ae5760018360018151811061099d5761099d6113d5565b911515602092830291909101909101525b60010161083f565b50816000815181106109ca576109ca6113d5565b60200260200101516109e357601594505050505061070a565b816001815181106109f6576109f66113d5565b6020026020010151610a0f57601694505050505061070a565b600094505050505061070a565b600082815260208190526040902060010154610a3781610a41565b61043c8383610d1f565b6105f981610a4d610d10565b610ef6565b6000610a5e83836105fc565b610add576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610a95610d10565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610411565b506000610411565b6002546000905b8015610b3957600181039150610b2960028381548110610b0e57610b0e6113d5565b6000918252602090912001546001600160a01b031683610da8565b610b3281611509565b9050610aec565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26002604051610b6a9190611520565b60405180910390a150565b6000819003610b9757604051630b9b3e5960e21b815260040160405180910390fd5b60005b818110156104c3576000838383818110610bb657610bb66113d5565b9050602002016020810190610bcb91906112af565b6001600160a01b031603610bf2576040516350092f7560e11b815260040160405180910390fd5b60016000848484818110610c0857610c086113d5565b9050602002016020810190610c1d91906112af565b6001600160a01b0316815260208101919091526040016000205460ff1615610c585760405163860d015160e01b815260040160405180910390fd5b6001806000858585818110610c6f57610c6f6113d5565b9050602002016020810190610c8491906112af565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110610cbe57610cbe6113d5565b9050602002016020810190610cd391906112af565b6001600160a01b03167f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4660405160405180910390a2600101610b9a565b6000610d1a610f37565b905090565b6000610d2b83836105fc565b15610add576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055610d60610d10565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610411565b610db460028383610fac565b6040516001600160a01b038316907f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc490600090a25050565b81546000905b80821015610e4157826001600160a01b0316848381548110610e1657610e166113d5565b6000918252602090912001546001600160a01b031603610e365750610411565b816001019150610df2565b50509054919050565b6001600160a01b038116610e71576040516350092f7560e11b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff1615610eab5760405163860d015160e01b815260040160405180910390fd5b8154600181810184556000938452602080852090920180546001600160a01b039094166001600160a01b0319909416841790559183528190526040909120805460ff19169091179055565b610f0082826105fc565b610f335760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610f745750808210155b15610fa457600036610f868385611564565b610f91928290611577565b610f9a916115a1565b60601c9250505090565b339250505090565b816001600160a01b0316838281548110610fc857610fc86113d5565b6000918252602090912001546001600160a01b031614610ffb57604051632f64842d60e11b815260040160405180910390fd5b825461100990600190611564565b811461108e578254839061101f90600190611564565b8154811061102f5761102f6113d5565b9060005260206000200160009054906101000a90046001600160a01b031683828154811061105f5761105f6113d5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8280548061109e5761109e6115d6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841680835260019091526040808320805460ff191690555190917f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc491a2505050565b828054828255906000526020600020908101928215611161579160200282015b828111156111615781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061112e565b5061116d929150611171565b5090565b5b8082111561116d5760008155600101611172565b60006020828403121561119857600080fd5b81356001600160e01b03198116811461070a57600080fd5b6000602082840312156111c257600080fd5b5035919050565b6001600160a01b03811681146105f957600080fd5b600080604083850312156111f157600080fd5b823591506020830135611203816111c9565b809150509250929050565b6000806020838503121561122157600080fd5b823567ffffffffffffffff8082111561123957600080fd5b818501915085601f83011261124d57600080fd5b81358181111561125c57600080fd5b8660208260051b850101111561127157600080fd5b60209290920196919550909350505050565b6000806040838503121561129657600080fd5b82356112a1816111c9565b946020939093013593505050565b6000602082840312156112c157600080fd5b813561070a816111c9565b60ff811681146105f957600080fd5b6000602082840312156112ed57600080fd5b813561070a816112cc565b60006020808352835180602085015260005b818110156113265785810183015185820160400152820161130a565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252825182820181905260009190848201906040850190845b818110156113885783516001600160a01b031683529284019291840191600101611363565b50909695505050505050565b6000806000606084860312156113a957600080fd5b83356113b4816111c9565b925060208401356113c4816111c9565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113fd57600080fd5b815161070a816112cc565b634e487b7160e01b600052604160045260246000fd5b805180151581146105c757600080fd5b6000602080838503121561144157600080fd5b825167ffffffffffffffff8082111561145957600080fd5b818501915085601f83011261146d57600080fd5b81518181111561147f5761147f611408565b8060051b604051601f19603f830116810181811085821117156114a4576114a4611408565b6040529182528482019250838101850191888311156114c257600080fd5b938501935b828510156114e7576114d88561141e565b845293850193928501926114c7565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600081611518576115186114f3565b506000190190565b6020808252825482820181905260008481528281209092916040850190845b818110156113885783546001600160a01b03168352600193840193928501920161153f565b81810381811115610411576104116114f3565b6000808585111561158757600080fd5b8386111561159457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156115ce5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052603160045260246000fdfeb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f99954686520726563697069656e74206973206e6f7420696e207468652077686974656c6973745468652073656e646572206973206e6f7420696e207468652077686974656c697374a2646970667358221220c9bcc22ff72080e0282cf07f741b675b81145f982e8e2d2edd186a14334e038e64736f6c63430008160033","sourceMap":"378:3013:101:-:0;;;672:341;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1498:37:66;;;;;810:19:101;::::1;806:100;;852:43;;-1:-1:-1::0;;;852:43:101::1;;;;;;;;;;;806:100;915:37;2232:4:62;946:5:101::0;915:10:::1;:37::i;:::-;-1:-1:-1::0;962:44:101::1;726:38:90;1000:5:101::0;962:10:::1;:44::i;:::-;;672:341:::0;;378:3013;;6179:316:62;6256:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:62;;;;;;;;;;;;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:62;;;;;;;;;:36;;-1:-1:-1;;6315:36:62;6347:4;6315:36;;;6397:12;:10;:12::i;:::-;-1:-1:-1;;;;;6370:40:62;6388:7;-1:-1:-1;;;;;6370:40:62;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:62;6424:11;;6272:217;-1:-1:-1;6473:5:62;6272:217;6179:316;;;;:::o;2632:182:101:-;2743:14;2780:27;:25;:27::i;:::-;2773:34;;2632:182;:::o;2204:429:66:-;2266:7;2310:8;3481:2;2401:30;2420:10;2401:18;:30::i;:::-;:71;;;;;2453:19;2435:14;:37;;2401:71;2397:230;;;2511:8;;2520:36;2537:19;2520:14;:36;:::i;:::-;2511:47;;;;;:::i;:::-;2503:56;;;:::i;:::-;2495:65;;2488:72;;;;2204:429;:::o;2397:230::-;735:10:73;2591:25:66;;;;2204:429;:::o;1830:137::-;1906:4;1942:18;1705:17;;;1622:107;1942:18;-1:-1:-1;;;;;1929:31:66;:9;-1:-1:-1;;;;;1929:31:66;;1922:38;;1830:137;;;:::o;14:177:139:-;93:13;;-1:-1:-1;;;;;135:31:139;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:225::-;561:9;;;582:11;;;579:134;;;635:10;630:3;626:20;623:1;616:31;670:4;667:1;660:15;698:4;695:1;688:15;724:331;829:9;840;882:8;870:10;867:24;864:44;;;904:1;901;894:12;864:44;933:6;923:8;920:20;917:40;;;953:1;950;943:12;917:40;-1:-1:-1;;979:23:139;;;1024:25;;;;;-1:-1:-1;724:331:139:o;1060:329::-;-1:-1:-1;;;;;;1181:19:139;;1260:11;;;;1291:2;1283:11;;1280:103;;;1370:2;1364;1357:3;1353:2;1349:12;1346:1;1342:20;1338:29;1334:2;1330:38;1326:47;1317:56;;1280:103;;;1060:329;;;;:::o;:::-;378:3013:101;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101735760003560e01c80637da0a877116100de578063a217fddf11610097578063cd1d4dc711610071578063cd1d4dc71461039f578063d4ce1415146103b2578063d547741f146103c5578063db136dad146103d857600080fd5b8063a217fddf1461036f578063c57086a114610377578063c6946a121461038c57600080fd5b80637da0a877146102f35780637f4ab1dd1461031957806383304df0146103395780638a1b6c8e1461034c5780638a2021b11461035457806391d148541461035c57600080fd5b8063397a7d3c11610130578063397a7d3c146102335780634d53374e1461025e578063572b6c05146102715780635b119c0a146102b15780636728f545146102cb5780637d045df6146102e057600080fd5b806301ffc9a7146101785780630fbbfb55146101a0578063248a9ca3146101d55780632f2ff15d146101f8578063334a29cc1461020d57806336568abe14610220575b600080fd5b61018b610186366004611186565b6103e0565b60405190151581526020015b60405180910390f35b6101c77fd32fd1ee5f4f111da6f27444787e5200ec57a8849509c00ef2998467052b32a381565b604051908152602001610197565b6101c76101e33660046111b0565b60009081526020819052604090206001015490565b61020b6102063660046111de565b610417565b005b61020b61021b36600461120e565b610442565b61020b61022e3660046111de565b610480565b6102466102413660046111b0565b6104c8565b6040516001600160a01b039091168152602001610197565b61020b61026c366004611283565b6104f8565b61018b61027f3660046112af565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6102b9601581565b60405160ff9091168152602001610197565b6101c76000805160206115ed83398151915281565b61018b6102ee3660046112db565b61051a565b7f0000000000000000000000000000000000000000000000000000000000000000610246565b61032c6103273660046112db565b610536565b60405161019791906112f8565b6101c76103473660046112af565b6105cc565b61020b6105d9565b6002546101c7565b61018b61036a3660046111de565b6105fc565b6101c7600081565b61037f610625565b6040516101979190611347565b61018b61039a366004611394565b610687565b61020b6103ad3660046112af565b610711565b6102b96103c0366004611394565b61076c565b61020b6103d33660046111de565b610a1c565b6102b9601681565b60006001600160e01b03198216637965db0b60e01b148061041157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461043281610a41565b61043c8383610a52565b50505050565b6000805160206115ed83398151915261045a81610a41565b6002541561046a5761046a610ae5565b6104748383610b75565b61043c6002848461110e565b610488610d10565b6001600160a01b0316816001600160a01b0316146104b95760405163334bd91960e11b815260040160405180910390fd5b6104c38282610d1f565b505050565b6000600282815481106104dd576104dd6113d5565b6000918252602090912001546001600160a01b031692915050565b6000805160206115ed83398151915261051081610a41565b6104c38383610da8565b600060ff821660151480610411575060ff821660161492915050565b606060141960ff831601610563576040518060600160405280602281526020016116326022913992915050565b60151960ff83160161058e5760405180606001604052806025815260200161160d6025913992915050565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015290565b919050565b6000610411600283610dec565b6000805160206115ed8339815191526105f181610a41565b6105f9610ae5565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600280548060200260200160405190810160405280929190818152602001828054801561067d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161065f575b5050505050905090565b60405163d4ce141560e01b81526001600160a01b03848116600483015283166024820152604481018290526000908190309063d4ce141590606401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906113eb565b60ff161490505b9392505050565b6000805160206115ed83398151915261072981610a41565b610734600283610e4a565b6040516001600160a01b038316907f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4690600090a25050565b6040805160028082526060820183526000928392919060208301908036833750506040805160028082526060820183529394506000939092509060208301908036833750506040805160028082526060820183529394506000939092509060208301908036833701905050905086836000815181106107ed576107ed6113d5565b60200260200101906001600160a01b031690816001600160a01b0316815250508583600181518110610821576108216113d5565b6001600160a01b039092166020928302919091019091015260025460005b818110156109b6576002818154811061085a5761085a6113d5565b60009182526020909120015460405163051b206960e11b81526001600160a01b0390911690630a3640d290610893908890600401611347565b600060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108d8919081019061142e565b9350836000815181106108ed576108ed6113d5565b6020026020010151801561091957508260008151811061090f5761090f6113d5565b6020026020010151155b1561094457600183600081518110610933576109336113d5565b911515602092830291909101909101525b83600181518110610957576109576113d5565b60200260200101518015610983575082600181518110610979576109796113d5565b6020026020010151155b156109ae5760018360018151811061099d5761099d6113d5565b911515602092830291909101909101525b60010161083f565b50816000815181106109ca576109ca6113d5565b60200260200101516109e357601594505050505061070a565b816001815181106109f6576109f66113d5565b6020026020010151610a0f57601694505050505061070a565b600094505050505061070a565b600082815260208190526040902060010154610a3781610a41565b61043c8383610d1f565b6105f981610a4d610d10565b610ef6565b6000610a5e83836105fc565b610add576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610a95610d10565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610411565b506000610411565b6002546000905b8015610b3957600181039150610b2960028381548110610b0e57610b0e6113d5565b6000918252602090912001546001600160a01b031683610da8565b610b3281611509565b9050610aec565b507f93dd3e43e4773b52a627c0ce6a20183638a2d2a264cfc9b6b7da0cccc95ea4b26002604051610b6a9190611520565b60405180910390a150565b6000819003610b9757604051630b9b3e5960e21b815260040160405180910390fd5b60005b818110156104c3576000838383818110610bb657610bb66113d5565b9050602002016020810190610bcb91906112af565b6001600160a01b031603610bf2576040516350092f7560e11b815260040160405180910390fd5b60016000848484818110610c0857610c086113d5565b9050602002016020810190610c1d91906112af565b6001600160a01b0316815260208101919091526040016000205460ff1615610c585760405163860d015160e01b815260040160405180910390fd5b6001806000858585818110610c6f57610c6f6113d5565b9050602002016020810190610c8491906112af565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110610cbe57610cbe6113d5565b9050602002016020810190610cd391906112af565b6001600160a01b03167f60305ce6c9104acd0969d358f926bf391174340660aaf5e6215261fd6847bf4660405160405180910390a2600101610b9a565b6000610d1a610f37565b905090565b6000610d2b83836105fc565b15610add576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055610d60610d10565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610411565b610db460028383610fac565b6040516001600160a01b038316907f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc490600090a25050565b81546000905b80821015610e4157826001600160a01b0316848381548110610e1657610e166113d5565b6000918252602090912001546001600160a01b031603610e365750610411565b816001019150610df2565b50509054919050565b6001600160a01b038116610e71576040516350092f7560e11b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff1615610eab5760405163860d015160e01b815260040160405180910390fd5b8154600181810184556000938452602080852090920180546001600160a01b039094166001600160a01b0319909416841790559183528190526040909120805460ff19169091179055565b610f0082826105fc565b610f335760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5050565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610f745750808210155b15610fa457600036610f868385611564565b610f91928290611577565b610f9a916115a1565b60601c9250505090565b339250505090565b816001600160a01b0316838281548110610fc857610fc86113d5565b6000918252602090912001546001600160a01b031614610ffb57604051632f64842d60e11b815260040160405180910390fd5b825461100990600190611564565b811461108e578254839061101f90600190611564565b8154811061102f5761102f6113d5565b9060005260206000200160009054906101000a90046001600160a01b031683828154811061105f5761105f6113d5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8280548061109e5761109e6115d6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841680835260019091526040808320805460ff191690555190917f6d83315c9718799346b67584ec64301b1457e989c8e35a8e2982a7776c04bfc491a2505050565b828054828255906000526020600020908101928215611161579160200282015b828111156111615781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061112e565b5061116d929150611171565b5090565b5b8082111561116d5760008155600101611172565b60006020828403121561119857600080fd5b81356001600160e01b03198116811461070a57600080fd5b6000602082840312156111c257600080fd5b5035919050565b6001600160a01b03811681146105f957600080fd5b600080604083850312156111f157600080fd5b823591506020830135611203816111c9565b809150509250929050565b6000806020838503121561122157600080fd5b823567ffffffffffffffff8082111561123957600080fd5b818501915085601f83011261124d57600080fd5b81358181111561125c57600080fd5b8660208260051b850101111561127157600080fd5b60209290920196919550909350505050565b6000806040838503121561129657600080fd5b82356112a1816111c9565b946020939093013593505050565b6000602082840312156112c157600080fd5b813561070a816111c9565b60ff811681146105f957600080fd5b6000602082840312156112ed57600080fd5b813561070a816112cc565b60006020808352835180602085015260005b818110156113265785810183015185820160400152820161130a565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252825182820181905260009190848201906040850190845b818110156113885783516001600160a01b031683529284019291840191600101611363565b50909695505050505050565b6000806000606084860312156113a957600080fd5b83356113b4816111c9565b925060208401356113c4816111c9565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156113fd57600080fd5b815161070a816112cc565b634e487b7160e01b600052604160045260246000fd5b805180151581146105c757600080fd5b6000602080838503121561144157600080fd5b825167ffffffffffffffff8082111561145957600080fd5b818501915085601f83011261146d57600080fd5b81518181111561147f5761147f611408565b8060051b604051601f19603f830116810181811085821117156114a4576114a4611408565b6040529182528482019250838101850191888311156114c257600080fd5b938501935b828510156114e7576114d88561141e565b845293850193928501926114c7565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600081611518576115186114f3565b506000190190565b6020808252825482820181905260008481528281209092916040850190845b818110156113885783546001600160a01b03168352600193840193928501920161153f565b81810381811115610411576104116114f3565b6000808585111561158757600080fd5b8386111561159457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156115ce5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052603160045260246000fdfeb3c151d85eb431da97012a1682e6ab41bddc7db1012e7c40bd326c24bf56f99954686520726563697069656e74206973206e6f7420696e207468652077686974656c6973745468652073656e646572206973206e6f7420696e207468652077686974656c697374a2646970667358221220c9bcc22ff72080e0282cf07f741b675b81145f982e8e2d2edd186a14334e038e64736f6c63430008160033","sourceMap":"378:3013:101:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2565:202:62;;;;;;:::i;:::-;;:::i;:::-;;;470:14:139;;463:22;445:41;;433:2;418:18;2565:202:62;;;;;;;;802:86:90;;856:32;802:86;;;;;643:25:139;;;631:2;616:18;802:86:90;497:177:139;3810:120:62;;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;4226:136;;;;;;:::i;:::-;;:::i;:::-;;797:280:93;;;;;;:::i;:::-;;:::i;5328:245:62:-;;;;;;:::i;:::-;;:::i;4051:143:93:-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2289:32:139;;;2271:51;;2259:2;2244:18;4051:143:93;2125:203:139;2580:194:93;;;;;;:::i;:::-;;:::i;1830:137:66:-;;;;;;:::i;:::-;1705:17;-1:-1:-1;;;;;1929:31:66;;;;;;;1830:137;490:60:106;;548:2;490:60;;;;;3102:4:139;3090:17;;;3072:36;;3060:2;3045:18;490:60:106;2930:184:139;666:98:90;;-1:-1:-1;;;;;;;;;;;666:98:90;;511:274:110;;;;;;:::i;:::-;;:::i;1622:107:66:-;1705:17;1622:107;;977:447:110;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3706:190:93:-;;;;;;:::i;:::-;;:::i;1163:115::-;;;:::i;3432:120::-;3522:16;:23;3432:120;;2854:136:62;;;;;;:::i;:::-;;:::i;2187:49::-;;2232:4;2187:49;;4282:153:93;;;:::i;:::-;;;;;;;:::i;418:355:109:-;;;;;;:::i;:::-;;:::i;1963:217:93:-;;;;;;:::i;:::-;;:::i;1284:1247:101:-;;;;;;:::i;:::-;;:::i;4642:138:62:-;;;;;;:::i;:::-;;:::i;556:58:106:-;;612:2;556:58;;2565:202:62;2650:4;-1:-1:-1;;;;;;2673:47:62;;-1:-1:-1;;;2673:47:62;;:87;;-1:-1:-1;;;;;;;;;;861:40:78;;;2724:36:62;2666:94;2565:202;-1:-1:-1;;2565:202:62:o;4226:136::-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;797:280:93:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;932::93::1;:23:::0;:27;928:81:::1;;975:23;:21;:23::i;:::-;1018:17;1028:6;;1018:9;:17::i;:::-;1045:25;:16;1064:6:::0;;1045:25:::1;:::i;5328:245:62:-:0;5443:12;:10;:12::i;:::-;-1:-1:-1;;;;;5421:34:62;:18;-1:-1:-1;;;;;5421:34:62;;5417:102;;5478:30;;-1:-1:-1;;;5478:30:62;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;:::-;;5328:245;;:::o;4051:143:93:-;4137:7;4163:16;4180:6;4163:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4163:24:93;;4051:143;-1:-1:-1;;4051:143:93:o;2580:194::-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;2723:44:93::1;2753:5;2761;2723:21;:44::i;511:274:110:-:0;623:4;658:53;;;548:2:106;658:53:110;;:120;;-1:-1:-1;727:51:110;;;612:2:106;727:51:110;639:139;511:274;-1:-1:-1;;511:274:110:o;977:447::-;1086:13;-1:-1:-1;;1115:53:110;;;;1111:307;;1191:33;;;;;;;;;;;;;;;;;1184:40;977:447;-1:-1:-1;;977:447:110:o;1111:307::-;-1:-1:-1;;1245:51:110;;;;1241:177;;1319:31;;;;;;;;;;;;;;;;;1312:38;977:447;-1:-1:-1;;977:447:110:o;1241:177::-;-1:-1:-1;;1388:19:110;;;;;;;;;;;;;;;;;;977:447::o;1241:177::-;977:447;;;:::o;3706:190:93:-;3798:13;3830:59;3856:16;3882:5;3830:25;:59::i;1163:115::-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;1248:23:93::1;:21;:23::i;:::-;1163:115:::0;:::o;2854:136:62:-;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:62;;;;;;;;;;;;;;;2854:136::o;4282:153:93:-;4373:16;4412;4405:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4405:23:93;;;;;;;;;;;;;;;;;;;;;;;4282:153;:::o;418:355:109:-;662:51;;-1:-1:-1;;;662:51:109;;-1:-1:-1;;;;;6144:15:139;;;662:51:109;;;6126:34:139;6196:15;;6176:18;;;6169:43;6228:18;;;6221:34;;;549:12:109;;;;662:4;;:30;;6061:18:139;;662:51:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:104;;;643:123;;418:355;;;;;;:::o;1963:217:93:-;-1:-1:-1;;;;;;;;;;;2464:16:62;2475:4;2464:10;:16::i;:::-;2080:55:93::1;2102:16;2128:5;2080:21;:55::i;:::-;2150:23;::::0;-1:-1:-1;;;;;2150:23:93;::::1;::::0;::::1;::::0;;;::::1;1963:217:::0;;:::o;1284:1247:101:-;1478:16;;;1492:1;1478:16;;;;;;;;1428:5;;;;1478:16;1492:1;1478:16;;;;;;;;-1:-1:-1;;1529:13:101;;;1540:1;1529:13;;;;;;;;1445:49;;-1:-1:-1;1504:22:101;;1529:13;;-1:-1:-1;1540:1:101;1529:13;;;;;;;;-1:-1:-1;;1575:13:101;;;1586:1;1575:13;;;;;;;;1504:38;;-1:-1:-1;1552:20:101;;1575:13;;-1:-1:-1;1586:1:101;1575:13;;;;;;;;;;-1:-1:-1;1575:13:101;1552:36;;1617:5;1598:13;1612:1;1598:16;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;1598:24:101;;;-1:-1:-1;;;;;1598:24:101;;;;;1651:3;1632:13;1646:1;1632:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1632:22:101;;;:16;;;;;;;;;;;:22;1686:16;:23;1664:19;1797:478;1821:11;1817:1;:15;1797:478;;;1909:16;1926:1;1909:19;;;;;;;;:::i;:::-;;;;;;;;;;;1893:89;;-1:-1:-1;;;1893:89:101;;-1:-1:-1;;;;;1909:19:101;;;;1893:74;;:89;;1968:13;;1893:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1893:89:101;;;;;;;;;;;;:::i;:::-;1882:100;;2000:8;2009:1;2000:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;2016:6;2023:1;2016:9;;;;;;;;:::i;:::-;;;;;;;2015:10;2000:25;1996:129;;;2106:4;2094:6;2101:1;2094:9;;;;;;;;:::i;:::-;:16;;;:9;;;;;;;;;;;:16;1996:129;2142:8;2151:1;2142:11;;;;;;;;:::i;:::-;;;;;;;:25;;;;;2158:6;2165:1;2158:9;;;;;;;;:::i;:::-;;;;;;;2157:10;2142:25;2138:127;;;2246:4;2234:6;2241:1;2234:9;;;;;;;;:::i;:::-;:16;;;:9;;;;;;;;;;;:16;2138:127;1834:3;;1797:478;;;;2289:6;2296:1;2289:9;;;;;;;;:::i;:::-;;;;;;;2284:241;;548:2:106;2314:40:101;;;;;;;;2284:241;2376:6;2383:1;2376:9;;;;;;;;:::i;:::-;;;;;;;2371:154;;612:2:106;2401:38:101;;;;;;;;2371:154;2483:30;2470:44;;;;;;;;4642:138:62;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;3199:103::-:0;3265:30;3276:4;3282:12;:10;:12::i;:::-;3265:10;:30::i;6179:316::-;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:62;;;;;;;;;:36;;-1:-1:-1;;6315:36:62;6347:4;6315:36;;;6397:12;:10;:12::i;:::-;-1:-1:-1;;;;;6370:40:62;6388:7;-1:-1:-1;;;;;6370:40:62;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:62;6424:11;;6272:217;-1:-1:-1;6473:5:62;6466:12;;1364:444:93;1528:16;:23;1416:13;;1511:248;1553:5;;1511:248;;1666:1;1662;:5;1654:13;;1695:53;1717:16;1734:5;1717:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1717:23:93;1742:5;1695:21;:53::i;:::-;1560:3;;;:::i;:::-;;;1511:248;;;;1773:28;1784:16;1773:28;;;;;;:::i;:::-;;;;;;;;1406:402;1364:444::o;596:600:94:-;682:1;665:18;;;661:81;;706:25;;-1:-1:-1;;;706:25:94;;;;;;;;;;;661:81;756:9;751:439;771:17;;;751:439;;;840:3;818:6;;825:1;818:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;810:34:94;;806:118;;871:38;;-1:-1:-1;;;871:38:94;;;;;;;;;;;806:118;941:14;:25;956:6;;963:1;956:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;941:25:94;;;;;;;;;;;;-1:-1:-1;941:25:94;;;;937:101;;;993:30;;-1:-1:-1;;;993:30:94;;;;;;;;;;;937:101;1079:4;1051:14;:25;1066:6;;1073:1;1066:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1051:25:94;;;;;;;;;;;;-1:-1:-1;1051:25:94;:32;;-1:-1:-1;;1051:32:94;;;;;;;;;;1110:6;;1117:1;1110:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1102:18:94;;;;;;;;;;;1162:3;;751:439;;2632:182:101;2743:14;2780:27;:25;:27::i;:::-;2773:34;;2632:182;:::o;6730:317:62:-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:62;;;;;;;;;:37;;-1:-1:-1;;6866:37:62;;;6949:12;:10;:12::i;:::-;-1:-1:-1;;;;;6922:40:62;6940:7;-1:-1:-1;;;;;6922:40:62;6934:4;6922:40;;;;;;;;;;-1:-1:-1;6983:4:62;6976:11;;3174:184:93;3254:56;3279:16;3297:5;3304;3254:24;:56::i;:::-;3325:26;;-1:-1:-1;;;;;3325:26:93;;;;;;;;3174:184;;:::o;2668:413:94:-;2823:13;;2776;;2846:199;2870:11;2862:5;:19;2846:199;;;2920:5;-1:-1:-1;;;;;2903:22:94;:6;2910:5;2903:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2903:13:94;:22;2899:73;;2945:12;;;2899:73;3013:7;;;;;2846:199;;;-1:-1:-1;;3061:13:94;;;2668:413;-1:-1:-1;2668:413:94:o;1351:354::-;-1:-1:-1;;;;;1433:30:94;;1429:106;;1486:38;;-1:-1:-1;;;1486:38:94;;;;;;;;;;;1429:106;-1:-1:-1;;;;;1548:21:94;;;;;;:14;:21;;;;;;;;1544:89;;;1592:30;;-1:-1:-1;;;1592:30:94;;;;;;;;;;;1544:89;1642:18;;;;;;;;-1:-1:-1;1642:18:94;;;;;;;;;;;;-1:-1:-1;;;;;1642:18:94;;;-1:-1:-1;;;;;;1642:18:94;;;;;;;1670:21;;;;;;;;;;:28;;-1:-1:-1;;1670:28:94;;;;;;1351:354::o;3432:197:62:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:62;;-1:-1:-1;;;;;9098:32:139;;3565:47:62;;;9080:51:139;9147:18;;;9140:34;;;9053:18;;3565:47:62;;;;;;;3515:108;3432:197;;:::o;2204:429:66:-;2266:7;2310:8;3481:2;2420:10;-1:-1:-1;;;;;1705:17:66;1929:31;;2401:71;;;;;2453:19;2435:14;:37;;2401:71;2397:230;;;2511:8;;2520:36;2537:19;2520:14;:36;:::i;:::-;2511:47;;;;;:::i;:::-;2503:56;;;:::i;:::-;2495:65;;2488:72;;;;2204:429;:::o;2397:230::-;735:10:73;2591:25:66;;;;2204:429;:::o;2105:419:94:-;2252:5;-1:-1:-1;;;;;2235:22:94;:6;2242:5;2235:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2235:13:94;:22;2231:87;;2280:27;;-1:-1:-1;;;2280:27:94;;;;;;;;;;;2231:87;2340:13;;:17;;2356:1;;2340:17;:::i;:::-;2331:5;:26;2327:98;;2396:13;;2389:6;;2396:17;;2412:1;;2396:17;:::i;:::-;2389:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2389:25:94;2373:6;2380:5;2373:13;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;;-1:-1:-1;;;;;2373:41:94;;;;;-1:-1:-1;;;;;2373:41:94;;;;;;2327:98;2434:6;:12;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;2434:12:94;;;;;-1:-1:-1;;;;;;2434:12:94;;;;;;;;;-1:-1:-1;;;;;2456:21:94;;;;;2434:12;2456:21;;;;;;;:29;;-1:-1:-1;;2456:29:94;;;2500:17;2456:21;;2500:17;;;2105:419;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:286:139;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:139;;209:43;;199:71;;266:1;263;256:12;679:180;738:6;791:2;779:9;770:7;766:23;762:32;759:52;;;807:1;804;797:12;759:52;-1:-1:-1;830:23:139;;679:180;-1:-1:-1;679:180:139:o;864:131::-;-1:-1:-1;;;;;939:31:139;;929:42;;919:70;;985:1;982;975:12;1000:315;1068:6;1076;1129:2;1117:9;1108:7;1104:23;1100:32;1097:52;;;1145:1;1142;1135:12;1097:52;1181:9;1168:23;1158:33;;1241:2;1230:9;1226:18;1213:32;1254:31;1279:5;1254:31;:::i;:::-;1304:5;1294:15;;;1000:315;;;;;:::o;1320:615::-;1406:6;1414;1467:2;1455:9;1446:7;1442:23;1438:32;1435:52;;;1483:1;1480;1473:12;1435:52;1523:9;1510:23;1552:18;1593:2;1585:6;1582:14;1579:34;;;1609:1;1606;1599:12;1579:34;1647:6;1636:9;1632:22;1622:32;;1692:7;1685:4;1681:2;1677:13;1673:27;1663:55;;1714:1;1711;1704:12;1663:55;1754:2;1741:16;1780:2;1772:6;1769:14;1766:34;;;1796:1;1793;1786:12;1766:34;1849:7;1844:2;1834:6;1831:1;1827:14;1823:2;1819:23;1815:32;1812:45;1809:65;;;1870:1;1867;1860:12;1809:65;1901:2;1893:11;;;;;1923:6;;-1:-1:-1;1320:615:139;;-1:-1:-1;;;;1320:615:139:o;2333:340::-;2426:6;2434;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2542:9;2529:23;2561:31;2586:5;2561:31;:::i;:::-;2611:5;2663:2;2648:18;;;;2635:32;;-1:-1:-1;;;2333:340:139:o;2678:247::-;2737:6;2790:2;2778:9;2769:7;2765:23;2761:32;2758:52;;;2806:1;2803;2796:12;2758:52;2845:9;2832:23;2864:31;2889:5;2864:31;:::i;3119:114::-;3203:4;3196:5;3192:16;3185:5;3182:27;3172:55;;3223:1;3220;3213:12;3238:243;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;3403:9;3390:23;3422:29;3445:5;3422:29;:::i;3486:548::-;3598:4;3627:2;3656;3645:9;3638:21;3688:6;3682:13;3731:6;3726:2;3715:9;3711:18;3704:34;3756:1;3766:140;3780:6;3777:1;3774:13;3766:140;;;3875:14;;;3871:23;;3865:30;3841:17;;;3860:2;3837:26;3830:66;3795:10;;3766:140;;;3770:3;3955:1;3950:2;3941:6;3930:9;3926:22;3922:31;3915:42;4025:2;4018;4014:7;4009:2;4001:6;3997:15;3993:29;3982:9;3978:45;3974:54;3966:62;;;;3486:548;;;;:::o;4498:658::-;4669:2;4721:21;;;4791:13;;4694:18;;;4813:22;;;4640:4;;4669:2;4892:15;;;;4866:2;4851:18;;;4640:4;4935:195;4949:6;4946:1;4943:13;4935:195;;;5014:13;;-1:-1:-1;;;;;5010:39:139;4998:52;;5105:15;;;;5070:12;;;;5046:1;4964:9;4935:195;;;-1:-1:-1;5147:3:139;;4498:658;-1:-1:-1;;;;;;4498:658:139:o;5161:456::-;5238:6;5246;5254;5307:2;5295:9;5286:7;5282:23;5278:32;5275:52;;;5323:1;5320;5313:12;5275:52;5362:9;5349:23;5381:31;5406:5;5381:31;:::i;:::-;5431:5;-1:-1:-1;5488:2:139;5473:18;;5460:32;5501:33;5460:32;5501:33;:::i;:::-;5161:456;;5553:7;;-1:-1:-1;;;5607:2:139;5592:18;;;;5579:32;;5161:456::o;5622:127::-;5683:10;5678:3;5674:20;5671:1;5664:31;5714:4;5711:1;5704:15;5738:4;5735:1;5728:15;6266:247;6334:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:52;;;6403:1;6400;6393:12;6355:52;6435:9;6429:16;6454:29;6477:5;6454:29;:::i;6518:127::-;6579:10;6574:3;6570:20;6567:1;6560:31;6610:4;6607:1;6600:15;6634:4;6631:1;6624:15;6650:164;6726:13;;6775;;6768:21;6758:32;;6748:60;;6804:1;6801;6794:12;6819:1123;6911:6;6942:2;6985;6973:9;6964:7;6960:23;6956:32;6953:52;;;7001:1;6998;6991:12;6953:52;7034:9;7028:16;7063:18;7104:2;7096:6;7093:14;7090:34;;;7120:1;7117;7110:12;7090:34;7158:6;7147:9;7143:22;7133:32;;7203:7;7196:4;7192:2;7188:13;7184:27;7174:55;;7225:1;7222;7215:12;7174:55;7254:2;7248:9;7276:2;7272;7269:10;7266:36;;;7282:18;;:::i;:::-;7328:2;7325:1;7321:10;7360:2;7354:9;7423:2;7419:7;7414:2;7410;7406:11;7402:25;7394:6;7390:38;7478:6;7466:10;7463:22;7458:2;7446:10;7443:18;7440:46;7437:72;;;7489:18;;:::i;:::-;7525:2;7518:22;7575:18;;;7609:15;;;;-1:-1:-1;7651:11:139;;;7647:20;;;7679:19;;;7676:39;;;7711:1;7708;7701:12;7676:39;7735:11;;;;7755:156;7771:6;7766:3;7763:15;7755:156;;;7837:31;7864:3;7837:31;:::i;:::-;7825:44;;7788:12;;;;7889;;;;7755:156;;;7930:6;6819:1123;-1:-1:-1;;;;;;;;6819:1123:139:o;7947:127::-;8008:10;8003:3;7999:20;7996:1;7989:31;8039:4;8036:1;8029:15;8063:4;8060:1;8053:15;8079:136;8118:3;8146:5;8136:39;;8155:18;;:::i;:::-;-1:-1:-1;;;8191:18:139;;8079:136::o;8220:681::-;8388:2;8440:21;;;8510:13;;8413:18;;;8532:22;;;8359:4;8597:17;;;8637:16;;;8359:4;;8388:2;8585;8570:18;;;8359:4;8681:194;8695:6;8692:1;8689:13;8681:194;;;8760:13;;-1:-1:-1;;;;;8756:39:139;8744:52;;8792:1;8851:14;;;;8816:12;;;;8710:9;8681:194;;9185:128;9252:9;;;9273:11;;;9270:37;;;9287:18;;:::i;9318:331::-;9423:9;9434;9476:8;9464:10;9461:24;9458:44;;;9498:1;9495;9488:12;9458:44;9527:6;9517:8;9514:20;9511:40;;;9547:1;9544;9537:12;9511:40;-1:-1:-1;;9573:23:139;;;9618:25;;;;;-1:-1:-1;9318:331:139:o;9654:337::-;-1:-1:-1;;9775:19:139;;9862:11;;;;9893:2;9885:11;;9882:103;;;9972:2;9966;9959:3;9955:2;9951:12;9948:1;9944:20;9940:29;9936:2;9932:38;9928:47;9919:56;;9882:103;;;9654:337;;;;:::o;9996:127::-;10057:10;10052:3;10048:20;10045:1;10038:31;10088:4;10085:1;10078:15;10112:4;10109:1;10102:15","linkReferences":{},"immutableReferences":{"54247":[{"start":641,"length":32},{"start":757,"length":32},{"start":3911,"length":32}]}},"methodIdentifiers":{"CODE_ADDRESS_FROM_NOT_WHITELISTED()":"5b119c0a","CODE_ADDRESS_TO_NOT_WHITELISTED()":"db136dad","DEFAULT_ADMIN_ROLE()":"a217fddf","RULE_ENGINE_OPERATOR_ROLE()":"6728f545","TOKEN_CONTRACT_ROLE()":"0fbbfb55","addRuleValidation(address)":"cd1d4dc7","canReturnTransferRestrictionCode(uint8)":"7d045df6","clearRulesValidation()":"8a1b6c8e","detectTransferRestriction(address,address,uint256)":"d4ce1415","getRoleAdmin(bytes32)":"248a9ca3","getRuleIndexValidation(address)":"83304df0","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","isTrustedForwarder(address)":"572b6c05","messageForTransferRestriction(uint8)":"7f4ab1dd","removeRuleValidation(address,uint256)":"4d53374e","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","ruleValidation(uint256)":"397a7d3c","rulesCountValidation()":"8a2021b1","rulesValidation()":"c57086a1","setRulesValidation(address[])":"334a29cc","supportsInterface(bytes4)":"01ffc9a7","trustedForwarder()":"7da0a877","validateTransfer(address,address,uint256)":"c6946a12"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarderIrrevocable\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_AdminWithAddressZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_ArrayIsEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleAddressZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleEngine_RuleDoNotMatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rule\",\"type\":\"address\"}],\"name\":\"AddRule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"rulesRemoved\",\"type\":\"address[]\"}],\"name\":\"ClearRules\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rule\",\"type\":\"address\"}],\"name\":\"RemoveRule\",\"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\"},{\"inputs\":[],\"name\":\"CODE_ADDRESS_FROM_NOT_WHITELISTED\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CODE_ADDRESS_TO_NOT_WHITELISTED\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RULE_ENGINE_OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_CONTRACT_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"addRuleValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_restrictionCode\",\"type\":\"uint8\"}],\"name\":\"canReturnTransferRestrictionCode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearRulesValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"detectTransferRestriction\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"}],\"name\":\"getRuleIndexValidation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_restrictionCode\",\"type\":\"uint8\"}],\"name\":\"messageForTransferRestriction\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRuleValidation\",\"name\":\"rule_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removeRuleValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ruleId\",\"type\":\"uint256\"}],\"name\":\"ruleValidation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesCountValidation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rulesValidation\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"rules_\",\"type\":\"address[]\"}],\"name\":\"setRulesValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"validateTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"canReturnTransferRestrictionCode(uint8)\":{\"params\":{\"_restrictionCode\":\"The target restriction code\"},\"returns\":{\"_0\":\"true if the restriction code is known, false otherwise*\"}},\"constructor\":{\"params\":{\"admin\":\"Address of the contract (Access Control)\",\"forwarderIrrevocable\":\"Address of the forwarder, required for the gasless support\"}},\"detectTransferRestriction(address,address,uint256)\":{\"params\":{\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRuleIndexValidation(address)\":{\"returns\":{\"index\":\"if the rule is found, _rulesValidation.length otherwise\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"messageForTransferRestriction(uint8)\":{\"params\":{\"_restrictionCode\":\"The target restriction code\"},\"returns\":{\"_0\":\"true if the transfer is valid, false otherwise*\"}},\"removeRuleValidation(address,uint256)\":{\"details\":\"To reduce the array size, the last rule is moved to the location occupied by the rule to remove\",\"params\":{\"index\":\"the position inside the array of rule\",\"rule_\":\"address of the target rule\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"ruleValidation(uint256)\":{\"params\":{\"ruleId\":\"index of the rule\"},\"returns\":{\"_0\":\"a rule address\"}},\"rulesCountValidation()\":{\"returns\":{\"_0\":\"The number of rules inside the array\"}},\"rulesValidation()\":{\"returns\":{\"_0\":\"An array of rules\"}},\"setRulesValidation(address[])\":{\"details\":\"take address[] instead of IRuleEngineValidation[] since it is not possible to cast IRuleEngineValidation[] -> address[]\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"validateTransfer(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"isValid\":\"=> true if the transfer is valid, false otherwise*\"}}},\"title\":\"Wrapper to call several different whitelist rules\",\"version\":1},\"userdoc\":{\"events\":{\"AddRule(address)\":{\"notice\":\"Generate when a rule is added\"},\"ClearRules(address[])\":{\"notice\":\"Generate when all the rules are cleared\"},\"RemoveRule(address)\":{\"notice\":\"Generate when a rule is removed\"}},\"kind\":\"user\",\"methods\":{\"RULE_ENGINE_OPERATOR_ROLE()\":{\"notice\":\"Role to manage the ruleEngine\"},\"TOKEN_CONTRACT_ROLE()\":{\"notice\":\"token contract\"},\"addRuleValidation(address)\":{\"notice\":\"Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present\"},\"canReturnTransferRestrictionCode(uint8)\":{\"notice\":\"To know if the restriction code is valid for this rule or not\"},\"clearRulesValidation()\":{\"notice\":\"Clear all the rules of the array of rules\"},\"detectTransferRestriction(address,address,uint256)\":{\"notice\":\"Go through all the whitelist rules to know if a restriction exists on the transfer\"},\"getRuleIndexValidation(address)\":{\"notice\":\"Get the index of a rule inside the list\"},\"messageForTransferRestriction(uint8)\":{\"notice\":\"Return the corresponding message\"},\"removeRuleValidation(address,uint256)\":{\"notice\":\"Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument\"},\"ruleValidation(uint256)\":{\"notice\":\"Get the rule at the position specified by ruleId\"},\"rulesValidation()\":{\"notice\":\"Get all the rules\"},\"setRulesValidation(address[])\":{\"notice\":\"Set all the rules, will overwrite all the previous rules. \\\\n Revert if one rule is a zero address or if the rule is already present\"},\"validateTransfer(address,address,uint256)\":{\"notice\":\"Validate a transfer\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rules/validation/RuleWhitelistWrapper.sol\":\"RuleWhitelistWrapper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":CMTAT/=lib/CMTAT/contracts/\",\":OZ/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol\":{\"keccak256\":\"0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0\",\"dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol\":{\"keccak256\":\"0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423\",\"dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol\":{\"keccak256\":\"0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e\",\"dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF\"]},\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"src/interfaces/IRuleEngineValidation.sol\":{\"keccak256\":\"0x19f9b71580dddb20a29570bff88f711abf0c8aec18bd563643764aa37355eac1\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://4a48e1abaa9d740c88bb33958b2227b1d98723a357fe35a6cc3a2843b00cdc20\",\"dweb:/ipfs/QmVaEQQhH522tKEJLizmFDuTeAyxb8bZP7byHpfNxwSmyT\"]},\"src/interfaces/IRuleValidation.sol\":{\"keccak256\":\"0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9\",\"dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8\"]},\"src/modules/MetaTxModuleStandalone.sol\":{\"keccak256\":\"0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25\",\"dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj\"]},\"src/modules/RuleEngineInvariantStorage.sol\":{\"keccak256\":\"0x09093b1b80c8fd27ef80aaec46522ec5525aebcdb0fe77231821197d6fe7a1a0\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://4939364678439e43818b1efb114b662219629b5945ecd98b1e39eca64d46dc44\",\"dweb:/ipfs/QmSikHEsDZy8hzyQ33N3AhiM25S7pCFEmqADZxK53FpCDq\"]},\"src/modules/RuleEngineValidationCommon.sol\":{\"keccak256\":\"0xf1d0fdd62ba10b81918a6749e1fcf9f020b298a8179a1cf6c849fe0aaa5edddb\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://57ae96630675750b371656a3e9ce3a5b1e2ce16327d3e292b934def1b85c8a1d\",\"dweb:/ipfs/QmZm9obyXiMCJzLPNCvvtN9QogngmRnkZJmBke2bc79Jgk\"]},\"src/modules/RuleInternal.sol\":{\"keccak256\":\"0xa6d2f8844062b318c31cb97570b840ac2faa50111564c97b7190bcadcab4419c\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://878b4ba012b1c46973bb50018973a90ea6b700706a2ae52b0bae7d240df510b3\",\"dweb:/ipfs/QmdRjwxgoo4xc3JmyAirRbbLupKVZ51r67e1D93bTFSF6A\"]},\"src/rules/validation/RuleWhitelistWrapper.sol\":{\"keccak256\":\"0x98dea2f3986bd3490f2ba10dc027cdcb8fe7b5f0f4b21ab47f72fb5eb1bad785\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://e777ea68de9b49e8193d94d0255de3949cfd237507016ced64870431eef36644\",\"dweb:/ipfs/QmawDNARGnscDspWEdN7nLKVGVwFpNwa13vCKVXdrUGxpc\"]},\"src/rules/validation/abstract/RuleAddressList/RuleAddressList.sol\":{\"keccak256\":\"0x062f188bd35d2e2ca224c7a5b576c5720275e5175d3fa3ffd9ab896dcf21c400\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://fa847c271016bae89e056f66898f4fba411b348bb312face86c94758f8a378ac\",\"dweb:/ipfs/QmPGHHbsmxVgL7tcc77qNVMfxtESgnYqrvdLqxGXdXw2bM\"]},\"src/rules/validation/abstract/RuleAddressList/RuleAddressListInternal.sol\":{\"keccak256\":\"0x4fe41635bb8060e980ed5d9847afd0f2bb89c64501254bea619e65a727ba67b6\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://e0e417e96caa101c0a8a6a25944c89d9690cd166680dd298918e4819f415c531\",\"dweb:/ipfs/QmPJeFJW8g4dzfHU81Kt5kfLBgVWevChUzArFSjh5iDVR8\"]},\"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleAddressListInvariantStorage.sol\":{\"keccak256\":\"0x56c9ca1310dccae89d1019b5a9041fcd11f8344656221995fe2fbc4d095b37c3\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://ce143c19d8c1d192e4fddabb32be213caef4c6bfa19dcf79f3ae6a6cc518a1b7\",\"dweb:/ipfs/Qmbn9wRsiRybULTaKqBkPWe6SEbbfKVRttD1mi2cb8RznB\"]},\"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleWhitelistInvariantStorage.sol\":{\"keccak256\":\"0x39a4b0b5ef4d03b32e826c67c0244bd0bdc803656e6f7d2301c395b7a3bd5bb2\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://5c6222cc7a6e87d1bd11c5989c83ee6bf09dca003c3002845dbf41a4b694246e\",\"dweb:/ipfs/QmXQy7odhSupb6BjG1T1KjbmaLs7mcBrag7Sn3cp2JGUyb\"]},\"src/rules/validation/abstract/RuleCommonInvariantStorage.sol\":{\"keccak256\":\"0xea52693dfabf31d5b94201b78ba04cd4e7f9985b616965530317dcb25c59b678\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://c6a24a2b31405e5511548afd5dca62ea8670a71ebb7fce8604637609ff320749\",\"dweb:/ipfs/QmUDXyeySu8nBRyTWGxdrTs4NC813F5w9PyBTgMs9Y7N7u\"]},\"src/rules/validation/abstract/RuleValidateTransfer.sol\":{\"keccak256\":\"0xd843208b93b04efb86fc20e5f0f8b1a725a6402fcbe5836aadf652c9804b749b\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://2ce6f485b6d7c43e823fe0add5b894c252dbc36e61143df6e4a00c1bd12dc1cd\",\"dweb:/ipfs/QmQaKkmwo8UacTADjRh9ebj1B8CCjpLRfHoUt3xMcDYhAt\"]},\"src/rules/validation/abstract/RuleWhitelistCommon.sol\":{\"keccak256\":\"0xbab37a174342a2a1d3343bb575b5e85450f662973f8c06cba6103f4071480c7c\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a45604ae07b94bec85e15b9d79d24b3ba98d8fed9eebee4e3769da215be1022c\",\"dweb:/ipfs/QmNsESHhPwpHpJiuYiFRADLXGyUuKZmXrGVMcVvt8XyALZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.22+commit.4fc1097e"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"forwarderIrrevocable","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[],"type":"error","name":"RuleEngine_AdminWithAddressZeroNotAllowed"},{"inputs":[],"type":"error","name":"RuleEngine_ArrayIsEmpty"},{"inputs":[],"type":"error","name":"RuleEngine_RuleAddressZeroNotAllowed"},{"inputs":[],"type":"error","name":"RuleEngine_RuleAlreadyExists"},{"inputs":[],"type":"error","name":"RuleEngine_RuleDoNotMatch"},{"inputs":[{"internalType":"address","name":"rule","type":"address","indexed":true}],"type":"event","name":"AddRule","anonymous":false},{"inputs":[{"internalType":"address[]","name":"rulesRemoved","type":"address[]","indexed":false}],"type":"event","name":"ClearRules","anonymous":false},{"inputs":[{"internalType":"address","name":"rule","type":"address","indexed":true}],"type":"event","name":"RemoveRule","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":[],"stateMutability":"view","type":"function","name":"CODE_ADDRESS_FROM_NOT_WHITELISTED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"CODE_ADDRESS_TO_NOT_WHITELISTED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RULE_ENGINE_OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TOKEN_CONTRACT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"contract IRuleValidation","name":"rule_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"addRuleValidation"},{"inputs":[{"internalType":"uint8","name":"_restrictionCode","type":"uint8"}],"stateMutability":"pure","type":"function","name":"canReturnTransferRestrictionCode","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"clearRulesValidation"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"detectTransferRestriction","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"contract IRuleValidation","name":"rule_","type":"address"}],"stateMutability":"view","type":"function","name":"getRuleIndexValidation","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"view","type":"function","name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint8","name":"_restrictionCode","type":"uint8"}],"stateMutability":"pure","type":"function","name":"messageForTransferRestriction","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"contract IRuleValidation","name":"rule_","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"removeRuleValidation"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"uint256","name":"ruleId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ruleValidation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rulesCountValidation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rulesValidation","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address[]","name":"rules_","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"setRulesValidation"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function","name":"validateTransfer","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"canReturnTransferRestrictionCode(uint8)":{"params":{"_restrictionCode":"The target restriction code"},"returns":{"_0":"true if the restriction code is known, false otherwise*"}},"constructor":{"params":{"admin":"Address of the contract (Access Control)","forwarderIrrevocable":"Address of the forwarder, required for the gasless support"}},"detectTransferRestriction(address,address,uint256)":{"params":{"_from":"the origin address","_to":"the destination address"},"returns":{"_0":"The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"getRuleIndexValidation(address)":{"returns":{"index":"if the rule is found, _rulesValidation.length otherwise"}},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"isTrustedForwarder(address)":{"details":"Indicates whether any particular address is the trusted forwarder."},"messageForTransferRestriction(uint8)":{"params":{"_restrictionCode":"The target restriction code"},"returns":{"_0":"true if the transfer is valid, false otherwise*"}},"removeRuleValidation(address,uint256)":{"details":"To reduce the array size, the last rule is moved to the location occupied by the rule to remove","params":{"index":"the position inside the array of rule","rule_":"address of the target rule"}},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"ruleValidation(uint256)":{"params":{"ruleId":"index of the rule"},"returns":{"_0":"a rule address"}},"rulesCountValidation()":{"returns":{"_0":"The number of rules inside the array"}},"rulesValidation()":{"returns":{"_0":"An array of rules"}},"setRulesValidation(address[])":{"details":"take address[] instead of IRuleEngineValidation[] since it is not possible to cast IRuleEngineValidation[] -> address[]"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"trustedForwarder()":{"details":"Returns the address of the trusted forwarder."},"validateTransfer(address,address,uint256)":{"params":{"_amount":"to transfer","_from":"the origin address","_to":"the destination address"},"returns":{"isValid":"=> true if the transfer is valid, false otherwise*"}}},"version":1},"userdoc":{"kind":"user","methods":{"RULE_ENGINE_OPERATOR_ROLE()":{"notice":"Role to manage the ruleEngine"},"TOKEN_CONTRACT_ROLE()":{"notice":"token contract"},"addRuleValidation(address)":{"notice":"Add a rule to the array of rules Revert if one rule is a zero address or if the rule is already present"},"canReturnTransferRestrictionCode(uint8)":{"notice":"To know if the restriction code is valid for this rule or not"},"clearRulesValidation()":{"notice":"Clear all the rules of the array of rules"},"detectTransferRestriction(address,address,uint256)":{"notice":"Go through all the whitelist rules to know if a restriction exists on the transfer"},"getRuleIndexValidation(address)":{"notice":"Get the index of a rule inside the list"},"messageForTransferRestriction(uint8)":{"notice":"Return the corresponding message"},"removeRuleValidation(address,uint256)":{"notice":"Remove a rule from the array of rules Revert if the rule found at the specified index does not match the rule in argument"},"ruleValidation(uint256)":{"notice":"Get the rule at the position specified by ruleId"},"rulesValidation()":{"notice":"Get all the rules"},"setRulesValidation(address[])":{"notice":"Set all the rules, will overwrite all the previous rules. \\n Revert if one rule is a zero address or if the rule is already present"},"validateTransfer(address,address,uint256)":{"notice":"Validate a transfer"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","CMTAT/=lib/CMTAT/contracts/","OZ/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/rules/validation/RuleWhitelistWrapper.sol":"RuleWhitelistWrapper"},"evmVersion":"london","libraries":{}},"sources":{"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol":{"keccak256":"0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad","urls":["bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0","dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg"],"license":"MPL-2.0"},"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol":{"keccak256":"0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed","urls":["bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423","dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx"],"license":"MPL-2.0"},"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol":{"keccak256":"0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3","urls":["bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e","dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF"],"license":"MPL-2.0"},"lib/openzeppelin-contracts/contracts/access/AccessControl.sol":{"keccak256":"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308","urls":["bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80","dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol":{"keccak256":"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6","urls":["bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f","dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"src/interfaces/IRuleEngineValidation.sol":{"keccak256":"0x19f9b71580dddb20a29570bff88f711abf0c8aec18bd563643764aa37355eac1","urls":["bzz-raw://4a48e1abaa9d740c88bb33958b2227b1d98723a357fe35a6cc3a2843b00cdc20","dweb:/ipfs/QmVaEQQhH522tKEJLizmFDuTeAyxb8bZP7byHpfNxwSmyT"],"license":"MPL-2.0"},"src/interfaces/IRuleValidation.sol":{"keccak256":"0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1","urls":["bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9","dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8"],"license":"MPL-2.0"},"src/modules/MetaTxModuleStandalone.sol":{"keccak256":"0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0","urls":["bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25","dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj"],"license":"MPL-2.0"},"src/modules/RuleEngineInvariantStorage.sol":{"keccak256":"0x09093b1b80c8fd27ef80aaec46522ec5525aebcdb0fe77231821197d6fe7a1a0","urls":["bzz-raw://4939364678439e43818b1efb114b662219629b5945ecd98b1e39eca64d46dc44","dweb:/ipfs/QmSikHEsDZy8hzyQ33N3AhiM25S7pCFEmqADZxK53FpCDq"],"license":"MPL-2.0"},"src/modules/RuleEngineValidationCommon.sol":{"keccak256":"0xf1d0fdd62ba10b81918a6749e1fcf9f020b298a8179a1cf6c849fe0aaa5edddb","urls":["bzz-raw://57ae96630675750b371656a3e9ce3a5b1e2ce16327d3e292b934def1b85c8a1d","dweb:/ipfs/QmZm9obyXiMCJzLPNCvvtN9QogngmRnkZJmBke2bc79Jgk"],"license":"MPL-2.0"},"src/modules/RuleInternal.sol":{"keccak256":"0xa6d2f8844062b318c31cb97570b840ac2faa50111564c97b7190bcadcab4419c","urls":["bzz-raw://878b4ba012b1c46973bb50018973a90ea6b700706a2ae52b0bae7d240df510b3","dweb:/ipfs/QmdRjwxgoo4xc3JmyAirRbbLupKVZ51r67e1D93bTFSF6A"],"license":"MPL-2.0"},"src/rules/validation/RuleWhitelistWrapper.sol":{"keccak256":"0x98dea2f3986bd3490f2ba10dc027cdcb8fe7b5f0f4b21ab47f72fb5eb1bad785","urls":["bzz-raw://e777ea68de9b49e8193d94d0255de3949cfd237507016ced64870431eef36644","dweb:/ipfs/QmawDNARGnscDspWEdN7nLKVGVwFpNwa13vCKVXdrUGxpc"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleAddressList/RuleAddressList.sol":{"keccak256":"0x062f188bd35d2e2ca224c7a5b576c5720275e5175d3fa3ffd9ab896dcf21c400","urls":["bzz-raw://fa847c271016bae89e056f66898f4fba411b348bb312face86c94758f8a378ac","dweb:/ipfs/QmPGHHbsmxVgL7tcc77qNVMfxtESgnYqrvdLqxGXdXw2bM"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleAddressList/RuleAddressListInternal.sol":{"keccak256":"0x4fe41635bb8060e980ed5d9847afd0f2bb89c64501254bea619e65a727ba67b6","urls":["bzz-raw://e0e417e96caa101c0a8a6a25944c89d9690cd166680dd298918e4819f415c531","dweb:/ipfs/QmPJeFJW8g4dzfHU81Kt5kfLBgVWevChUzArFSjh5iDVR8"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleAddressListInvariantStorage.sol":{"keccak256":"0x56c9ca1310dccae89d1019b5a9041fcd11f8344656221995fe2fbc4d095b37c3","urls":["bzz-raw://ce143c19d8c1d192e4fddabb32be213caef4c6bfa19dcf79f3ae6a6cc518a1b7","dweb:/ipfs/Qmbn9wRsiRybULTaKqBkPWe6SEbbfKVRttD1mi2cb8RznB"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleWhitelistInvariantStorage.sol":{"keccak256":"0x39a4b0b5ef4d03b32e826c67c0244bd0bdc803656e6f7d2301c395b7a3bd5bb2","urls":["bzz-raw://5c6222cc7a6e87d1bd11c5989c83ee6bf09dca003c3002845dbf41a4b694246e","dweb:/ipfs/QmXQy7odhSupb6BjG1T1KjbmaLs7mcBrag7Sn3cp2JGUyb"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleCommonInvariantStorage.sol":{"keccak256":"0xea52693dfabf31d5b94201b78ba04cd4e7f9985b616965530317dcb25c59b678","urls":["bzz-raw://c6a24a2b31405e5511548afd5dca62ea8670a71ebb7fce8604637609ff320749","dweb:/ipfs/QmUDXyeySu8nBRyTWGxdrTs4NC813F5w9PyBTgMs9Y7N7u"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleValidateTransfer.sol":{"keccak256":"0xd843208b93b04efb86fc20e5f0f8b1a725a6402fcbe5836aadf652c9804b749b","urls":["bzz-raw://2ce6f485b6d7c43e823fe0add5b894c252dbc36e61143df6e4a00c1bd12dc1cd","dweb:/ipfs/QmQaKkmwo8UacTADjRh9ebj1B8CCjpLRfHoUt3xMcDYhAt"],"license":"MPL-2.0"},"src/rules/validation/abstract/RuleWhitelistCommon.sol":{"keccak256":"0xbab37a174342a2a1d3343bb575b5e85450f662973f8c06cba6103f4071480c7c","urls":["bzz-raw://a45604ae07b94bec85e15b9d79d24b3ba98d8fed9eebee4e3769da215be1022c","dweb:/ipfs/QmNsESHhPwpHpJiuYiFRADLXGyUuKZmXrGVMcVvt8XyALZ"],"license":"MPL-2.0"}},"version":1},"id":101} \ No newline at end of file diff --git a/RuleWhitelistv2.0.2.json b/RuleWhitelistv2.0.2.json deleted file mode 100644 index 21cfa2a..0000000 --- a/RuleWhitelistv2.0.2.json +++ /dev/null @@ -1,1081 +0,0 @@ -{ - "contractName": "RuleWhitelist", - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "admin", "type": "address", "internalType": "address" }, - { - "name": "forwarderIrrevocable", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ADDRESS_LIST_ADD_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ADDRESS_LIST_REMOVE_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "CODE_ADDRESS_FROM_NOT_WHITELISTED", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "CODE_ADDRESS_TO_NOT_WHITELISTED", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addAddressToTheList", - "inputs": [ - { - "name": "_newWhitelistAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addAddressesToTheList", - "inputs": [ - { - "name": "listWhitelistedAddress", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addressIsListed", - "inputs": [ - { - "name": "_targetAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addressIsListedBatch", - "inputs": [ - { - "name": "_targetAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [{ "name": "", "type": "bool[]", "internalType": "bool[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "canReturnTransferRestrictionCode", - "inputs": [ - { "name": "_restrictionCode", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "detectTransferRestriction", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTrustedForwarder", - "inputs": [ - { "name": "forwarder", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageForTransferRestriction", - "inputs": [ - { "name": "_restrictionCode", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "numberListedAddress", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "removeAddressFromTheList", - "inputs": [ - { - "name": "_removeWhitelistAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeAddressesFromTheList", - "inputs": [ - { - "name": "listWhitelistedAddress", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "trustedForwarder", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "validateTransfer", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "isValid", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "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": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "RuleAddressList_AdminWithAddressZeroNotAllowed", - "inputs": [] - }, - { "type": "error", "name": "Rulelist_AddressAlreadylisted", "inputs": [] }, - { "type": "error", "name": "Rulelist_AddressNotPresent", "inputs": [] } - ], - "bytecode":"0x60a06040523480156200001157600080fd5b50604051620013ca380380620013ca83398101604081905262000034916200023a565b6001600160a01b0380821660805282908290821662000066576040516317c69b0360e21b815260040160405180910390fd5b62000073600083620000d8565b50620000a07f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf6183620000d8565b50620000cd7f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec83620000d8565b5050505050620002f1565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200017f576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200013662000189565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000183565b5060005b92915050565b6000620001956200019a565b905090565b6000366014620001aa33620001f6565b8015620001b75750808210155b15620001ee57600036620001cc838562000272565b620001d992829062000294565b620001e491620002c0565b60601c9250505090565b339250505090565b60006200020260805190565b6001600160a01b0316826001600160a01b0316149050919050565b80516001600160a01b03811681146200023557600080fd5b919050565b600080604083850312156200024e57600080fd5b62000259836200021d565b915062000269602084016200021d565b90509250929050565b818103818111156200018357634e487b7160e01b600052601160045260246000fd5b60008085851115620002a557600080fd5b83861115620002b357600080fd5b5050820193919092039150565b6001600160601b03198135818116916014851015620002e95780818660140360031b1b83161692505b505092915050565b6080516110af6200031b6000396000818161023c015281816102b90152610bf401526110af6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637da0a877116100c3578063c6946a121161007c578063c6946a1214610358578063d4ce14151461036b578063d547741f1461037e578063daafd1c714610391578063db136dad146103a4578063fa83a2da146103ac57600080fd5b80637da0a877146102ac5780637f4ab1dd146102e3578063893c14401461030357806391d1485414610316578063948b851e14610329578063a217fddf1461035057600080fd5b80633630e2ea116101155780633630e2ea1461020657806336568abe14610219578063572b6c051461022c5780635b119c0a1461026c5780635b577f66146102865780637d045df61461029957600080fd5b806301ffc9a71461015d5780630a3640d21461018557806311d1c5ca146101a557806313be3212146101ba578063248a9ca3146101d05780632f2ff15d146101f3575b600080fd5b61017061016b366004610c59565b6103d3565b60405190151581526020015b60405180910390f35b610198610193366004610cb0565b61040a565b60405161017c9190610d75565b6101b86101b3366004610dbb565b6104cc565b005b6101c2610505565b60405190815260200161017c565b6101c26101de366004610e30565b60009081526020819052604090206001015490565b6101b8610201366004610e49565b610515565b6101b8610214366004610dbb565b610540565b6101b8610227366004610e49565b610574565b61017061023a366004610e75565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b610274601581565b60405160ff909116815260200161017c565b610170610294366004610e75565b6105b7565b6101706102a7366004610e9f565b6105d8565b6040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161017c565b6102f66102f1366004610e9f565b6105f4565b60405161017c9190610ebc565b6101b8610311366004610e75565b61068a565b610170610324366004610e49565b6106c1565b6101c27f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf6181565b6101c2600081565b610170610366366004610f0b565b6106ea565b610274610379366004610f0b565b610774565b6101b861038c366004610e49565b6107a8565b6101b861039f366004610e75565b6107cd565b610274601681565b6101c27f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec81565b60006001600160e01b03198216637965db0b60e01b148061040457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000825167ffffffffffffffff81111561042857610428610c83565b604051908082528060200260200182016040528015610451578160200160208202803683370190505b50905060005b83518110156104c55761049b84828151811061047557610475610f47565b60200260200101516001600160a01b031660009081526001602052604090205460ff1690565b8282815181106104ad576104ad610f47565b91151560209283029190910190910152600101610457565b5092915050565b7f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf616104f681610800565b6105008383610814565b505050565b600061051060025490565b905090565b60008281526020819052604090206001015461053081610800565b61053a83836108de565b50505050565b7f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec61056a81610800565b6105008383610971565b61057c610a35565b6001600160a01b0316816001600160a01b0316146105ad5760405163334bd91960e11b815260040160405180910390fd5b6105008282610a3f565b6001600160a01b03811660009081526001602052604081205460ff16610404565b600060ff821660151480610404575060ff821660161492915050565b606060141960ff831601610621576040518060600160405280602281526020016110586022913992915050565b60151960ff83160161064c576040518060600160405280602581526020016110336025913992915050565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015290565b919050565b7f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec6106b481610800565b6106bd82610ac8565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60405163d4ce141560e01b81526001600160a01b03848116600483015283166024820152604481018290526000908190309063d4ce141590606401602060405180830381865afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107669190610f5d565b60ff161490505b9392505050565b600061077f846105b7565b61078b5750601561076d565b610794836105b7565b6107a05750601661076d565b50600061076d565b6000828152602081905260409020600101546107c381610800565b61053a8383610a3f565b7f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf616107f781610800565b6106bd82610b38565b6108118161080c610a35565b610ba7565b50565b60025460005b828110156108d6576001600085858481811061083857610838610f47565b905060200201602081019061084d9190610e75565b6001600160a01b0316815260208101919091526040016000205460ff166108ce57600180600086868581811061088557610885610f47565b905060200201602081019061089a9190610e75565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556108cb82610f90565b91505b60010161081a565b506002555050565b60006108ea83836106c1565b610969576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610921610a35565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610404565b506000610404565b60025460005b828110156108d6576001600085858481811061099557610995610f47565b90506020020160208101906109aa9190610e75565b6001600160a01b0316815260208101919091526040016000205460ff1615610a2d576000600160008686858181106109e4576109e4610f47565b90506020020160208101906109f99190610e75565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a2a82610fa9565b91505b600101610977565b6000610510610be4565b6000610a4b83836106c1565b15610969576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055610a80610a35565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610404565b6001600160a01b03811660009081526001602052604090205460ff16610b015760405163cfc5cc9560e01b815260040160405180910390fd5b6001600160a01b0381166000908152600160205260408120805460ff1916905560028054909190610b3190610fa9565b9091555050565b6001600160a01b03811660009081526001602052604090205460ff1615610b72576040516357845b8b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526001602081905260408220805460ff1916909117905560028054909190610b3190610f90565b610bb182826106c1565b6106bd5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610c215750808210155b15610c5157600036610c338385610fc0565b610c3e928290610fd3565b610c4791610ffd565b60601c9250505090565b339250505090565b600060208284031215610c6b57600080fd5b81356001600160e01b03198116811461076d57600080fd5b634e487b7160e01b600052604160045260246000fd5b80356001600160a01b038116811461068557600080fd5b60006020808385031215610cc357600080fd5b823567ffffffffffffffff80821115610cdb57600080fd5b818501915085601f830112610cef57600080fd5b813581811115610d0157610d01610c83565b8060051b604051601f19603f83011681018181108582111715610d2657610d26610c83565b604052918252848201925083810185019188831115610d4457600080fd5b938501935b82851015610d6957610d5a85610c99565b84529385019392850192610d49565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610daf578351151583529284019291840191600101610d91565b50909695505050505050565b60008060208385031215610dce57600080fd5b823567ffffffffffffffff80821115610de657600080fd5b818501915085601f830112610dfa57600080fd5b813581811115610e0957600080fd5b8660208260051b8501011115610e1e57600080fd5b60209290920196919550909350505050565b600060208284031215610e4257600080fd5b5035919050565b60008060408385031215610e5c57600080fd5b82359150610e6c60208401610c99565b90509250929050565b600060208284031215610e8757600080fd5b61076d82610c99565b60ff8116811461081157600080fd5b600060208284031215610eb157600080fd5b813561076d81610e90565b60006020808352835180602085015260005b81811015610eea57858101830151858201604001528201610ece565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060608486031215610f2057600080fd5b610f2984610c99565b9250610f3760208501610c99565b9150604084013590509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610f6f57600080fd5b815161076d81610e90565b634e487b7160e01b600052601160045260246000fd5b600060018201610fa257610fa2610f7a565b5060010190565b600081610fb857610fb8610f7a565b506000190190565b8181038181111561040457610404610f7a565b60008085851115610fe357600080fd5b83861115610ff057600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff19813581811691601485101561102a5780818660140360031b1b83161692505b50509291505056fe54686520726563697069656e74206973206e6f7420696e207468652077686974656c6973745468652073656e646572206973206e6f7420696e207468652077686974656c697374a26469706673582212202f76450923b188395ecb3c568a17c231c8c077751daf86f1e09a79884d5888dc64736f6c63430008160033", - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c80637da0a877116100c3578063c6946a121161007c578063c6946a1214610358578063d4ce14151461036b578063d547741f1461037e578063daafd1c714610391578063db136dad146103a4578063fa83a2da146103ac57600080fd5b80637da0a877146102ac5780637f4ab1dd146102e3578063893c14401461030357806391d1485414610316578063948b851e14610329578063a217fddf1461035057600080fd5b80633630e2ea116101155780633630e2ea1461020657806336568abe14610219578063572b6c051461022c5780635b119c0a1461026c5780635b577f66146102865780637d045df61461029957600080fd5b806301ffc9a71461015d5780630a3640d21461018557806311d1c5ca146101a557806313be3212146101ba578063248a9ca3146101d05780632f2ff15d146101f3575b600080fd5b61017061016b366004610c59565b6103d3565b60405190151581526020015b60405180910390f35b610198610193366004610cb0565b61040a565b60405161017c9190610d75565b6101b86101b3366004610dbb565b6104cc565b005b6101c2610505565b60405190815260200161017c565b6101c26101de366004610e30565b60009081526020819052604090206001015490565b6101b8610201366004610e49565b610515565b6101b8610214366004610dbb565b610540565b6101b8610227366004610e49565b610574565b61017061023a366004610e75565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b610274601581565b60405160ff909116815260200161017c565b610170610294366004610e75565b6105b7565b6101706102a7366004610e9f565b6105d8565b6040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161017c565b6102f66102f1366004610e9f565b6105f4565b60405161017c9190610ebc565b6101b8610311366004610e75565b61068a565b610170610324366004610e49565b6106c1565b6101c27f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf6181565b6101c2600081565b610170610366366004610f0b565b6106ea565b610274610379366004610f0b565b610774565b6101b861038c366004610e49565b6107a8565b6101b861039f366004610e75565b6107cd565b610274601681565b6101c27f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec81565b60006001600160e01b03198216637965db0b60e01b148061040457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000825167ffffffffffffffff81111561042857610428610c83565b604051908082528060200260200182016040528015610451578160200160208202803683370190505b50905060005b83518110156104c55761049b84828151811061047557610475610f47565b60200260200101516001600160a01b031660009081526001602052604090205460ff1690565b8282815181106104ad576104ad610f47565b91151560209283029190910190910152600101610457565b5092915050565b7f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf616104f681610800565b6105008383610814565b505050565b600061051060025490565b905090565b60008281526020819052604090206001015461053081610800565b61053a83836108de565b50505050565b7f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec61056a81610800565b6105008383610971565b61057c610a35565b6001600160a01b0316816001600160a01b0316146105ad5760405163334bd91960e11b815260040160405180910390fd5b6105008282610a3f565b6001600160a01b03811660009081526001602052604081205460ff16610404565b600060ff821660151480610404575060ff821660161492915050565b606060141960ff831601610621576040518060600160405280602281526020016110586022913992915050565b60151960ff83160161064c576040518060600160405280602581526020016110336025913992915050565b505060408051808201909152601881527f556e6b6e6f776e207265737472696374696f6e20636f64650000000000000000602082015290565b919050565b7f1b94c92b564251ed6b49246d9a82eb7a486b6490f3b3a3bf3b28d2e99801f3ec6106b481610800565b6106bd82610ac8565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60405163d4ce141560e01b81526001600160a01b03848116600483015283166024820152604481018290526000908190309063d4ce141590606401602060405180830381865afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107669190610f5d565b60ff161490505b9392505050565b600061077f846105b7565b61078b5750601561076d565b610794836105b7565b6107a05750601661076d565b50600061076d565b6000828152602081905260409020600101546107c381610800565b61053a8383610a3f565b7f1b03c849816e077359373cf0a8d6d8f741d643bc1e95273ffe11515f83bebf616107f781610800565b6106bd82610b38565b6108118161080c610a35565b610ba7565b50565b60025460005b828110156108d6576001600085858481811061083857610838610f47565b905060200201602081019061084d9190610e75565b6001600160a01b0316815260208101919091526040016000205460ff166108ce57600180600086868581811061088557610885610f47565b905060200201602081019061089a9190610e75565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556108cb82610f90565b91505b60010161081a565b506002555050565b60006108ea83836106c1565b610969576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610921610a35565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610404565b506000610404565b60025460005b828110156108d6576001600085858481811061099557610995610f47565b90506020020160208101906109aa9190610e75565b6001600160a01b0316815260208101919091526040016000205460ff1615610a2d576000600160008686858181106109e4576109e4610f47565b90506020020160208101906109f99190610e75565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a2a82610fa9565b91505b600101610977565b6000610510610be4565b6000610a4b83836106c1565b15610969576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055610a80610a35565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4506001610404565b6001600160a01b03811660009081526001602052604090205460ff16610b015760405163cfc5cc9560e01b815260040160405180910390fd5b6001600160a01b0381166000908152600160205260408120805460ff1916905560028054909190610b3190610fa9565b9091555050565b6001600160a01b03811660009081526001602052604090205460ff1615610b72576040516357845b8b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526001602081905260408220805460ff1916909117905560028054909190610b3190610f90565b610bb182826106c1565b6106bd5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610c215750808210155b15610c5157600036610c338385610fc0565b610c3e928290610fd3565b610c4791610ffd565b60601c9250505090565b339250505090565b600060208284031215610c6b57600080fd5b81356001600160e01b03198116811461076d57600080fd5b634e487b7160e01b600052604160045260246000fd5b80356001600160a01b038116811461068557600080fd5b60006020808385031215610cc357600080fd5b823567ffffffffffffffff80821115610cdb57600080fd5b818501915085601f830112610cef57600080fd5b813581811115610d0157610d01610c83565b8060051b604051601f19603f83011681018181108582111715610d2657610d26610c83565b604052918252848201925083810185019188831115610d4457600080fd5b938501935b82851015610d6957610d5a85610c99565b84529385019392850192610d49565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610daf578351151583529284019291840191600101610d91565b50909695505050505050565b60008060208385031215610dce57600080fd5b823567ffffffffffffffff80821115610de657600080fd5b818501915085601f830112610dfa57600080fd5b813581811115610e0957600080fd5b8660208260051b8501011115610e1e57600080fd5b60209290920196919550909350505050565b600060208284031215610e4257600080fd5b5035919050565b60008060408385031215610e5c57600080fd5b82359150610e6c60208401610c99565b90509250929050565b600060208284031215610e8757600080fd5b61076d82610c99565b60ff8116811461081157600080fd5b600060208284031215610eb157600080fd5b813561076d81610e90565b60006020808352835180602085015260005b81811015610eea57858101830151858201604001528201610ece565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060608486031215610f2057600080fd5b610f2984610c99565b9250610f3760208501610c99565b9150604084013590509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610f6f57600080fd5b815161076d81610e90565b634e487b7160e01b600052601160045260246000fd5b600060018201610fa257610fa2610f7a565b5060010190565b600081610fb857610fb8610f7a565b506000190190565b8181038181111561040457610404610f7a565b60008085851115610fe357600080fd5b83861115610ff057600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff19813581811691601485101561102a5780818660140360031b1b83161692505b50509291505056fe54686520726563697069656e74206973206e6f7420696e207468652077686974656c6973745468652073656e646572206973206e6f7420696e207468652077686974656c697374a26469706673582212202f76450923b188395ecb3c568a17c231c8c077751daf86f1e09a79884d5888dc64736f6c63430008160033", - "sourceMap": "204:1035:100:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2565:202:62;;;;;;:::i;:::-;;:::i;:::-;;;470:14:139;;463:22;445:41;;433:2;418:18;2565:202:62;;;;;;;;3537:356:102;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1400:190::-;;;;;;:::i;:::-;;:::i;:::-;;3012:107;;;:::i;:::-;;;3346:25:139;;;3334:2;3319:18;3012:107:102;3200:177:139;3810:120:62;;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;4226:136;;;;;;:::i;:::-;;:::i;1880:203:102:-;;;;;;:::i;:::-;;:::i;5328:245:62:-;;;;;;:::i;:::-;;:::i;1830:137:66:-;;;;;;:::i;:::-;1705:17;-1:-1:-1;;;;;1929:31:66;;;;;;;1830:137;490:60:106;;548:2;490:60;;;;;4371:4:139;4359:17;;;4341:36;;4329:2;4314:18;490:60:106;4199:184:139;3312:146:102;;;;;;:::i;:::-;;:::i;511:274:110:-;;;;;;:::i;:::-;;:::i;1622:107:66:-;;;-1:-1:-1;;;;;1705:17:66;4919:32:139;4901:51;;4889:2;4874:18;1622:107:66;4755:203:139;977:447:110;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2701:190:102:-;;;;;;:::i;:::-;;:::i;2854:136:62:-;;;;;;:::i;:::-;;:::i;313:82:104:-;;361:34;313:82;;2187:49:62;;2232:4;2187:49;;418:355:109;;;;;;:::i;:::-;;:::i;804:433:100:-;;;;;;:::i;:::-;;:::i;4642:138:62:-;;;;;;:::i;:::-;;:::i;2292:171:102:-;;;;;;:::i;:::-;;:::i;556:58:106:-;;612:2;556:58;;219:88:104;;270:37;219:88;;2565:202:62;2650:4;-1:-1:-1;;;;;;2673:47:62;;-1:-1:-1;;;2673:47:62;;:87;;-1:-1:-1;;;;;;;;;;861:40:78;;;2724:36:62;2666:94;2565:202;-1:-1:-1;;2565:202:62:o;3537:356:102:-;3637:13;3662:22;3698:16;:23;3687:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3687:35:102;;3662:60;;3737:9;3732:130;3756:16;:23;3752:1;:27;3732:130;;;3814:37;3831:16;3848:1;3831:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3139:20:103;3116:4;3139:20;;;:4;:20;;;;;;;;;3029:137;3814:37:102;3800:8;3809:1;3800:11;;;;;;;;:::i;:::-;:51;;;:11;;;;;;;;;;;:51;3781:3;;3732:130;;;-1:-1:-1;3878:8:102;3537:356;-1:-1:-1;;3537:356:102:o;1400:190::-;361:34:104;2464:16:62;2475:4;2464:10;:16::i;:::-;1537:46:102::1;1560:22;;1537;:46::i;:::-;1400:190:::0;;;:::o;3012:107::-;3064:7;3090:22;2813:16:103;;;2732:104;3090:22:102;3083:29;;3012:107;:::o;4226:136:62:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;1880:203:102:-;270:37:104;2464:16:62;2475:4;2464:10;:16::i;:::-;2025:51:102::1;2053:22;;2025:27;:51::i;5328:245:62:-:0;5443:12;:10;:12::i;:::-;-1:-1:-1;;;;;5421:34:62;:18;-1:-1:-1;;;;;5421:34:62;;5417:102;;5478:30;;-1:-1:-1;;;5478:30:62;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;3312:146:102:-;-1:-1:-1;;;;;3139:20:103;;3396:4:102;3139:20:103;;;:4;:20;;;;;;;;3419:32:102;3029:137:103;511:274:110;623:4;658:53;;;548:2:106;658:53:110;;:120;;-1:-1:-1;727:51:110;;;612:2:106;727:51:110;639:139;511:274;-1:-1:-1;;511:274:110:o;977:447::-;1086:13;-1:-1:-1;;1115:53:110;;;;1111:307;;1191:33;;;;;;;;;;;;;;;;;1184:40;977:447;-1:-1:-1;;977:447:110:o;1111:307::-;-1:-1:-1;;1245:51:110;;;;1241:177;;1319:31;;;;;;;;;;;;;;;;;1312:38;977:447;-1:-1:-1;;977:447:110:o;1241:177::-;-1:-1:-1;;1388:19:110;;;;;;;;;;;;;;;;;;977:447::o;1241:177::-;977:447;;;:::o;2701:190:102:-;270:37:104;2464:16:62;2475:4;2464:10;:16::i;:::-;2834:50:102::1;2860:23;2834:25;:50::i;:::-;2701:190:::0;;:::o;2854:136:62:-;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:62;;;;;;;;;;;;;;;2854:136::o;418:355:109:-;662:51;;-1:-1:-1;;;662:51:109;;-1:-1:-1;;;;;6371:15:139;;;662:51:109;;;6353:34:139;6423:15;;6403:18;;;6396:43;6455:18;;;6448:34;;;549:12:109;;;;662:4;;:30;;6288:18:139;;662:51:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:104;;;643:123;;418:355;;;;;;:::o;804:433:100:-;949:5;971:22;987:5;971:15;:22::i;:::-;966:265;;-1:-1:-1;548:2:106;1009:40:100;;966:265;1071:20;1087:3;1071:15;:20::i;:::-;1066:165;;-1:-1:-1;612:2:106;1107:38:100;;1066:165;-1:-1:-1;1189:30:100;1176:44;;4642:138:62;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;2292:171:102:-:0;361:34:104;2464:16:62;2475:4;2464:10;:16::i;:::-;2414:42:102::1;2435:20;2414;:42::i;3199:103:62:-:0;3265:30;3276:4;3282:12;:10;:12::i;:::-;3265:10;:30::i;:::-;3199:103;:::o;607:406:103:-;724:16;;692:29;750:207;770:24;;;750:207;;;820:4;:22;825:13;;839:1;825:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;820:22:103;;;;;;;;;;;;-1:-1:-1;820:22:103;;;;815:132;;887:4;862;:22;867:13;;881:1;867:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;862:22:103;;;;;;;;;;;;-1:-1:-1;862:22:103;:29;;-1:-1:-1;;862:29:103;;;;;;;;;;909:23;;;:::i;:::-;;;815:132;796:3;;750:207;;;-1:-1:-1;966:16:103;:40;-1:-1:-1;;607:406:103:o;6179:316:62:-;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:62;;;;;;;;;:36;;-1:-1:-1;;6315:36:62;6347:4;6315:36;;;6397:12;:10;:12::i;:::-;-1:-1:-1;;;;;6370:40:62;6388:7;-1:-1:-1;;;;;6370:40:62;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:62;6424:11;;6272:217;-1:-1:-1;6473:5:62;6466:12;;1284:425:103;1420:16;;1388:29;1446:207;1466:24;;;1446:207;;;1515:4;:22;1520:13;;1534:1;1520:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1515:22:103;;;;;;;;;;;;-1:-1:-1;1515:22:103;;;;1511:132;;;1582:5;1557:4;:22;1562:13;;1576:1;1562:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1557:22:103;;;;;;;;;;;;-1:-1:-1;1557:22:103;:30;;-1:-1:-1;;1557:30:103;;;;;;;;;;1605:23;;;:::i;:::-;;;1511:132;1492:3;;1446:207;;3994:182:102;4105:14;4142:27;:25;:27::i;6730:317:62:-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:62;;;;;;;;;:37;;-1:-1:-1;;6866:37:62;;;6949:12;:10;:12::i;:::-;-1:-1:-1;;;;;6922:40:62;6940:7;-1:-1:-1;;;;;6922:40:62;6934:4;6922:40;;;;;;;;;;-1:-1:-1;6983:4:62;6976:11;;2362:249:103;-1:-1:-1;;;;;2449:24:103;;;;;;:4;:24;;;;;;;;2444:91;;2496:28;;-1:-1:-1;;;2496:28:103;;;;;;;;;;;2444:91;-1:-1:-1;;;;;2544:24:103;;2571:5;2544:24;;;:4;:24;;;;;:32;;-1:-1:-1;;2544:32:103;;;2588:16;2586:18;;2588:16;;2571:5;2586:18;;;:::i;:::-;;;;-1:-1:-1;;2362:249:103:o;1903:236::-;-1:-1:-1;;;;;1981:21:103;;;;;;:4;:21;;;;;;;;1977:90;;;2025:31;;-1:-1:-1;;;2025:31:103;;;;;;;;;;;1977:90;-1:-1:-1;;;;;2076:21:103;;;;;;2100:4;2076:21;;;;;;;:28;;-1:-1:-1;;2076:28:103;;;;;;2116:16;2114:18;;2116:16;;2076:21;2114:18;;;:::i;3432:197:62:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:62;;-1:-1:-1;;;;;7350:32:139;;3565:47:62;;;7332:51:139;7399:18;;;7392:34;;;7305:18;;3565:47:62;;;;;;;2204:429:66;2266:7;2310:8;3481:2;2420:10;-1:-1:-1;;;;;1705:17:66;1929:31;;2401:71;;;;;2453:19;2435:14;:37;;2401:71;2397:230;;;2511:8;;2520:36;2537:19;2520:14;:36;:::i;:::-;2511:47;;;;;:::i;:::-;2503:56;;;:::i;:::-;2495:65;;2488:72;;;;2204:429;:::o;2397:230::-;735:10:73;2591:25:66;;;;2204:429;:::o;14:286:139:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:139;;209:43;;199:71;;266:1;263;256:12;497:127;558:10;553:3;549:20;546:1;539:31;589:4;586:1;579:15;613:4;610:1;603:15;629:173;697:20;;-1:-1:-1;;;;;746:31:139;;736:42;;726:70;;792:1;789;782:12;807:1121;891:6;922:2;965;953:9;944:7;940:23;936:32;933:52;;;981:1;978;971:12;933:52;1021:9;1008:23;1050:18;1091:2;1083:6;1080:14;1077:34;;;1107:1;1104;1097:12;1077:34;1145:6;1134:9;1130:22;1120:32;;1190:7;1183:4;1179:2;1175:13;1171:27;1161:55;;1212:1;1209;1202:12;1161:55;1248:2;1235:16;1270:2;1266;1263:10;1260:36;;;1276:18;;:::i;:::-;1322:2;1319:1;1315:10;1354:2;1348:9;1417:2;1413:7;1408:2;1404;1400:11;1396:25;1388:6;1384:38;1472:6;1460:10;1457:22;1452:2;1440:10;1437:18;1434:46;1431:72;;;1483:18;;:::i;:::-;1519:2;1512:22;1569:18;;;1603:15;;;;-1:-1:-1;1645:11:139;;;1641:20;;;1673:19;;;1670:39;;;1705:1;1702;1695:12;1670:39;1729:11;;;;1749:148;1765:6;1760:3;1757:15;1749:148;;;1831:23;1850:3;1831:23;:::i;:::-;1819:36;;1782:12;;;;1875;;;;1749:148;;;1916:6;807:1121;-1:-1:-1;;;;;;;;807:1121:139:o;1933:642::-;2098:2;2150:21;;;2220:13;;2123:18;;;2242:22;;;2069:4;;2098:2;2321:15;;;;2295:2;2280:18;;;2069:4;2364:185;2378:6;2375:1;2372:13;2364:185;;;2453:13;;2446:21;2439:29;2427:42;;2524:15;;;;2489:12;;;;2400:1;2393:9;2364:185;;;-1:-1:-1;2566:3:139;;1933:642;-1:-1:-1;;;;;;1933:642:139:o;2580:615::-;2666:6;2674;2727:2;2715:9;2706:7;2702:23;2698:32;2695:52;;;2743:1;2740;2733:12;2695:52;2783:9;2770:23;2812:18;2853:2;2845:6;2842:14;2839:34;;;2869:1;2866;2859:12;2839:34;2907:6;2896:9;2892:22;2882:32;;2952:7;2945:4;2941:2;2937:13;2933:27;2923:55;;2974:1;2971;2964:12;2923:55;3014:2;3001:16;3040:2;3032:6;3029:14;3026:34;;;3056:1;3053;3046:12;3026:34;3109:7;3104:2;3094:6;3091:1;3087:14;3083:2;3079:23;3075:32;3072:45;3069:65;;;3130:1;3127;3120:12;3069:65;3161:2;3153:11;;;;;3183:6;;-1:-1:-1;2580:615:139;;-1:-1:-1;;;;2580:615:139:o;3382:180::-;3441:6;3494:2;3482:9;3473:7;3469:23;3465:32;3462:52;;;3510:1;3507;3500:12;3462:52;-1:-1:-1;3533:23:139;;3382:180;-1:-1:-1;3382:180:139:o;3749:254::-;3817:6;3825;3878:2;3866:9;3857:7;3853:23;3849:32;3846:52;;;3894:1;3891;3884:12;3846:52;3930:9;3917:23;3907:33;;3959:38;3993:2;3982:9;3978:18;3959:38;:::i;:::-;3949:48;;3749:254;;;;;:::o;4008:186::-;4067:6;4120:2;4108:9;4099:7;4095:23;4091:32;4088:52;;;4136:1;4133;4126:12;4088:52;4159:29;4178:9;4159:29;:::i;4388:114::-;4472:4;4465:5;4461:16;4454:5;4451:27;4441:55;;4492:1;4489;4482:12;4507:243;4564:6;4617:2;4605:9;4596:7;4592:23;4588:32;4585:52;;;4633:1;4630;4623:12;4585:52;4672:9;4659:23;4691:29;4714:5;4691:29;:::i;4963:548::-;5075:4;5104:2;5133;5122:9;5115:21;5165:6;5159:13;5208:6;5203:2;5192:9;5188:18;5181:34;5233:1;5243:140;5257:6;5254:1;5251:13;5243:140;;;5352:14;;;5348:23;;5342:30;5318:17;;;5337:2;5314:26;5307:66;5272:10;;5243:140;;;5247:3;5432:1;5427:2;5418:6;5407:9;5403:22;5399:31;5392:42;5502:2;5495;5491:7;5486:2;5478:6;5474:15;5470:29;5459:9;5455:45;5451:54;5443:62;;;;4963:548;;;;:::o;5516:328::-;5593:6;5601;5609;5662:2;5650:9;5641:7;5637:23;5633:32;5630:52;;;5678:1;5675;5668:12;5630:52;5701:29;5720:9;5701:29;:::i;:::-;5691:39;;5749:38;5783:2;5772:9;5768:18;5749:38;:::i;:::-;5739:48;;5834:2;5823:9;5819:18;5806:32;5796:42;;5516:328;;;;;:::o;5849:127::-;5910:10;5905:3;5901:20;5898:1;5891:31;5941:4;5938:1;5931:15;5965:4;5962:1;5955:15;6493:247;6561:6;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6662:9;6656:16;6681:29;6704:5;6681:29;:::i;6745:127::-;6806:10;6801:3;6797:20;6794:1;6787:31;6837:4;6834:1;6827:15;6861:4;6858:1;6851:15;6877:135;6916:3;6937:17;;;6934:43;;6957:18;;:::i;:::-;-1:-1:-1;7004:1:139;6993:13;;6877:135::o;7017:136::-;7056:3;7084:5;7074:39;;7093:18;;:::i;:::-;-1:-1:-1;;;7129:18:139;;7017:136::o;7437:128::-;7504:9;;;7525:11;;;7522:37;;;7539:18;;:::i;7570:331::-;7675:9;7686;7728:8;7716:10;7713:24;7710:44;;;7750:1;7747;7740:12;7710:44;7779:6;7769:8;7766:20;7763:40;;;7799:1;7796;7789:12;7763:40;-1:-1:-1;;7825:23:139;;;7870:25;;;;;-1:-1:-1;7570:331:139:o;7906:337::-;-1:-1:-1;;8027:19:139;;8114:11;;;;8145:2;8137:11;;8134:103;;;8224:2;8218;8211:3;8207:2;8203:12;8200:1;8196:20;8192:29;8188:2;8184:38;8180:47;8171:56;;8134:103;;;7906:337;;;;:::o", - "linkReferences": {}, - "immutableReferences": { - "54247": [ - { "start": 572, "length": 32 }, - { "start": 697, "length": 32 }, - { "start": 3060, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "ADDRESS_LIST_ADD_ROLE()": "948b851e", - "ADDRESS_LIST_REMOVE_ROLE()": "fa83a2da", - "CODE_ADDRESS_FROM_NOT_WHITELISTED()": "5b119c0a", - "CODE_ADDRESS_TO_NOT_WHITELISTED()": "db136dad", - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "addAddressToTheList(address)": "daafd1c7", - "addAddressesToTheList(address[])": "11d1c5ca", - "addressIsListed(address)": "5b577f66", - "addressIsListedBatch(address[])": "0a3640d2", - "canReturnTransferRestrictionCode(uint8)": "7d045df6", - "detectTransferRestriction(address,address,uint256)": "d4ce1415", - "getRoleAdmin(bytes32)": "248a9ca3", - "grantRole(bytes32,address)": "2f2ff15d", - "hasRole(bytes32,address)": "91d14854", - "isTrustedForwarder(address)": "572b6c05", - "messageForTransferRestriction(uint8)": "7f4ab1dd", - "numberListedAddress()": "13be3212", - "removeAddressFromTheList(address)": "893c1440", - "removeAddressesFromTheList(address[])": "3630e2ea", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "supportsInterface(bytes4)": "01ffc9a7", - "trustedForwarder()": "7da0a877", - "validateTransfer(address,address,uint256)": "c6946a12" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"forwarderIrrevocable\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RuleAddressList_AdminWithAddressZeroNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Rulelist_AddressAlreadylisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Rulelist_AddressNotPresent\",\"type\":\"error\"},{\"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\"},{\"inputs\":[],\"name\":\"ADDRESS_LIST_ADD_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ADDRESS_LIST_REMOVE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CODE_ADDRESS_FROM_NOT_WHITELISTED\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CODE_ADDRESS_TO_NOT_WHITELISTED\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistAddress\",\"type\":\"address\"}],\"name\":\"addAddressToTheList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"listWhitelistedAddress\",\"type\":\"address[]\"}],\"name\":\"addAddressesToTheList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_targetAddress\",\"type\":\"address\"}],\"name\":\"addressIsListed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_targetAddresses\",\"type\":\"address[]\"}],\"name\":\"addressIsListedBatch\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_restrictionCode\",\"type\":\"uint8\"}],\"name\":\"canReturnTransferRestrictionCode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"detectTransferRestriction\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_restrictionCode\",\"type\":\"uint8\"}],\"name\":\"messageForTransferRestriction\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numberListedAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_removeWhitelistAddress\",\"type\":\"address\"}],\"name\":\"removeAddressFromTheList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"listWhitelistedAddress\",\"type\":\"address[]\"}],\"name\":\"removeAddressesFromTheList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"validateTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"addAddressToTheList(address)\":{\"params\":{\"_newWhitelistAddress\":\"The address to whitelist\"}},\"addAddressesToTheList(address[])\":{\"params\":{\"listWhitelistedAddress\":\"an array with the addresses to whitelist\"}},\"addressIsListed(address)\":{\"params\":{\"_targetAddress\":\"The concerned address\"},\"returns\":{\"_0\":\"True if the address is listed, false otherwise\"}},\"canReturnTransferRestrictionCode(uint8)\":{\"params\":{\"_restrictionCode\":\"The target restriction code\"},\"returns\":{\"_0\":\"true if the restriction code is known, false otherwise*\"}},\"constructor\":{\"params\":{\"admin\":\"Address of the contract (Access Control)\",\"forwarderIrrevocable\":\"Address of the forwarder, required for the gasless support\"}},\"detectTransferRestriction(address,address,uint256)\":{\"params\":{\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"_0\":\"The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"messageForTransferRestriction(uint8)\":{\"params\":{\"_restrictionCode\":\"The target restriction code\"},\"returns\":{\"_0\":\"true if the transfer is valid, false otherwise*\"}},\"numberListedAddress()\":{\"returns\":{\"_0\":\"Number of listed addresses\"}},\"removeAddressFromTheList(address)\":{\"params\":{\"_removeWhitelistAddress\":\"The address to remove\"}},\"removeAddressesFromTheList(address[])\":{\"params\":{\"listWhitelistedAddress\":\"an array with the addresses to remove\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"validateTransfer(address,address,uint256)\":{\"params\":{\"_amount\":\"to transfer\",\"_from\":\"the origin address\",\"_to\":\"the destination address\"},\"returns\":{\"isValid\":\"=> true if the transfer is valid, false otherwise*\"}}},\"title\":\"a whitelist manager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addAddressToTheList(address)\":{\"notice\":\"Add one address to the whitelist If the address already exists, the transaction is reverted to save gas.\"},\"addAddressesToTheList(address[])\":{\"notice\":\"Add addresses to the whitelist If one of addresses already exist, there is no change for this address. The transaction remains valid (no revert).\"},\"addressIsListed(address)\":{\"notice\":\"Know if an address is listed or not\"},\"addressIsListedBatch(address[])\":{\"notice\":\"batch version of {addressIsListed}\"},\"canReturnTransferRestrictionCode(uint8)\":{\"notice\":\"To know if the restriction code is valid for this rule or not\"},\"detectTransferRestriction(address,address,uint256)\":{\"notice\":\"Check if an addres is in the whitelist or not\"},\"messageForTransferRestriction(uint8)\":{\"notice\":\"Return the corresponding message\"},\"numberListedAddress()\":{\"notice\":\"Get the number of listed addresses\"},\"removeAddressFromTheList(address)\":{\"notice\":\"Remove one address from the whitelist If the address does not exist in the whitelist, the transaction is reverted to save gas.\"},\"removeAddressesFromTheList(address[])\":{\"notice\":\"Remove addresses from the whitelist If the address does not exist in the whitelist, there is no change for this address. The transaction remains valid (no revert).\"},\"validateTransfer(address,address,uint256)\":{\"notice\":\"Validate a transfer\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/rules/validation/RuleWhitelist.sol\":\"RuleWhitelist\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":CMTAT/=lib/CMTAT/contracts/\",\":OZ/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol\":{\"keccak256\":\"0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0\",\"dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol\":{\"keccak256\":\"0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423\",\"dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx\"]},\"lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol\":{\"keccak256\":\"0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e\",\"dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF\"]},\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f\",\"dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"src/interfaces/IRuleValidation.sol\":{\"keccak256\":\"0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9\",\"dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8\"]},\"src/modules/MetaTxModuleStandalone.sol\":{\"keccak256\":\"0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25\",\"dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj\"]},\"src/rules/validation/RuleWhitelist.sol\":{\"keccak256\":\"0xf0e635201c41e836209c5b95410eee4f53917039e67d62e6d4b906f86fb6ef43\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a047917130bf5d3f6b64285f99bd9d5ff483b4b32753fa85d77d8858e2e2a690\",\"dweb:/ipfs/QmQpvEQXNWm1aitXH6fkDg7nirUzrKHCicmeuPNDXN3QBP\"]},\"src/rules/validation/abstract/RuleAddressList/RuleAddressList.sol\":{\"keccak256\":\"0x062f188bd35d2e2ca224c7a5b576c5720275e5175d3fa3ffd9ab896dcf21c400\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://fa847c271016bae89e056f66898f4fba411b348bb312face86c94758f8a378ac\",\"dweb:/ipfs/QmPGHHbsmxVgL7tcc77qNVMfxtESgnYqrvdLqxGXdXw2bM\"]},\"src/rules/validation/abstract/RuleAddressList/RuleAddressListInternal.sol\":{\"keccak256\":\"0x4fe41635bb8060e980ed5d9847afd0f2bb89c64501254bea619e65a727ba67b6\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://e0e417e96caa101c0a8a6a25944c89d9690cd166680dd298918e4819f415c531\",\"dweb:/ipfs/QmPJeFJW8g4dzfHU81Kt5kfLBgVWevChUzArFSjh5iDVR8\"]},\"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleAddressListInvariantStorage.sol\":{\"keccak256\":\"0x56c9ca1310dccae89d1019b5a9041fcd11f8344656221995fe2fbc4d095b37c3\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://ce143c19d8c1d192e4fddabb32be213caef4c6bfa19dcf79f3ae6a6cc518a1b7\",\"dweb:/ipfs/Qmbn9wRsiRybULTaKqBkPWe6SEbbfKVRttD1mi2cb8RznB\"]},\"src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleWhitelistInvariantStorage.sol\":{\"keccak256\":\"0x39a4b0b5ef4d03b32e826c67c0244bd0bdc803656e6f7d2301c395b7a3bd5bb2\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://5c6222cc7a6e87d1bd11c5989c83ee6bf09dca003c3002845dbf41a4b694246e\",\"dweb:/ipfs/QmXQy7odhSupb6BjG1T1KjbmaLs7mcBrag7Sn3cp2JGUyb\"]},\"src/rules/validation/abstract/RuleCommonInvariantStorage.sol\":{\"keccak256\":\"0xea52693dfabf31d5b94201b78ba04cd4e7f9985b616965530317dcb25c59b678\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://c6a24a2b31405e5511548afd5dca62ea8670a71ebb7fce8604637609ff320749\",\"dweb:/ipfs/QmUDXyeySu8nBRyTWGxdrTs4NC813F5w9PyBTgMs9Y7N7u\"]},\"src/rules/validation/abstract/RuleValidateTransfer.sol\":{\"keccak256\":\"0xd843208b93b04efb86fc20e5f0f8b1a725a6402fcbe5836aadf652c9804b749b\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://2ce6f485b6d7c43e823fe0add5b894c252dbc36e61143df6e4a00c1bd12dc1cd\",\"dweb:/ipfs/QmQaKkmwo8UacTADjRh9ebj1B8CCjpLRfHoUt3xMcDYhAt\"]},\"src/rules/validation/abstract/RuleWhitelistCommon.sol\":{\"keccak256\":\"0xbab37a174342a2a1d3343bb575b5e85450f662973f8c06cba6103f4071480c7c\",\"license\":\"MPL-2.0\",\"urls\":[\"bzz-raw://a45604ae07b94bec85e15b9d79d24b3ba98d8fed9eebee4e3769da215be1022c\",\"dweb:/ipfs/QmNsESHhPwpHpJiuYiFRADLXGyUuKZmXrGVMcVvt8XyALZ\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "admin", "type": "address" }, - { - "internalType": "address", - "name": "forwarderIrrevocable", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "inputs": [], - "type": "error", - "name": "RuleAddressList_AdminWithAddressZeroNotAllowed" - }, - { - "inputs": [], - "type": "error", - "name": "Rulelist_AddressAlreadylisted" - }, - { "inputs": [], "type": "error", "name": "Rulelist_AddressNotPresent" }, - { - "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": [], - "stateMutability": "view", - "type": "function", - "name": "ADDRESS_LIST_ADD_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "ADDRESS_LIST_REMOVE_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "CODE_ADDRESS_FROM_NOT_WHITELISTED", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "CODE_ADDRESS_TO_NOT_WHITELISTED", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newWhitelistAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addAddressToTheList" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "listWhitelistedAddress", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addAddressesToTheList" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "addressIsListed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_targetAddresses", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "addressIsListedBatch", - "outputs": [ - { "internalType": "bool[]", "name": "", "type": "bool[]" } - ] - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_restrictionCode", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "canReturnTransferRestrictionCode", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "detectTransferRestriction", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isTrustedForwarder", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_restrictionCode", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "messageForTransferRestriction", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "numberListedAddress", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_removeWhitelistAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeAddressFromTheList" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "listWhitelistedAddress", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeAddressesFromTheList" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "trustedForwarder", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "validateTransfer", - "outputs": [ - { "internalType": "bool", "name": "isValid", "type": "bool" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addAddressToTheList(address)": { - "params": { "_newWhitelistAddress": "The address to whitelist" } - }, - "addAddressesToTheList(address[])": { - "params": { - "listWhitelistedAddress": "an array with the addresses to whitelist" - } - }, - "addressIsListed(address)": { - "params": { "_targetAddress": "The concerned address" }, - "returns": { - "_0": "True if the address is listed, false otherwise" - } - }, - "canReturnTransferRestrictionCode(uint8)": { - "params": { "_restrictionCode": "The target restriction code" }, - "returns": { - "_0": "true if the restriction code is known, false otherwise*" - } - }, - "constructor": { - "params": { - "admin": "Address of the contract (Access Control)", - "forwarderIrrevocable": "Address of the forwarder, required for the gasless support" - } - }, - "detectTransferRestriction(address,address,uint256)": { - "params": { - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "_0": "The restricion code or REJECTED_CODE_BASE.TRANSFER_OK*" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "isTrustedForwarder(address)": { - "details": "Indicates whether any particular address is the trusted forwarder." - }, - "messageForTransferRestriction(uint8)": { - "params": { "_restrictionCode": "The target restriction code" }, - "returns": { - "_0": "true if the transfer is valid, false otherwise*" - } - }, - "numberListedAddress()": { - "returns": { "_0": "Number of listed addresses" } - }, - "removeAddressFromTheList(address)": { - "params": { "_removeWhitelistAddress": "The address to remove" } - }, - "removeAddressesFromTheList(address[])": { - "params": { - "listWhitelistedAddress": "an array with the addresses to remove" - } - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "trustedForwarder()": { - "details": "Returns the address of the trusted forwarder." - }, - "validateTransfer(address,address,uint256)": { - "params": { - "_amount": "to transfer", - "_from": "the origin address", - "_to": "the destination address" - }, - "returns": { - "isValid": "=> true if the transfer is valid, false otherwise*" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "addAddressToTheList(address)": { - "notice": "Add one address to the whitelist If the address already exists, the transaction is reverted to save gas." - }, - "addAddressesToTheList(address[])": { - "notice": "Add addresses to the whitelist If one of addresses already exist, there is no change for this address. The transaction remains valid (no revert)." - }, - "addressIsListed(address)": { - "notice": "Know if an address is listed or not" - }, - "addressIsListedBatch(address[])": { - "notice": "batch version of {addressIsListed}" - }, - "canReturnTransferRestrictionCode(uint8)": { - "notice": "To know if the restriction code is valid for this rule or not" - }, - "detectTransferRestriction(address,address,uint256)": { - "notice": "Check if an addres is in the whitelist or not" - }, - "messageForTransferRestriction(uint8)": { - "notice": "Return the corresponding message" - }, - "numberListedAddress()": { - "notice": "Get the number of listed addresses" - }, - "removeAddressFromTheList(address)": { - "notice": "Remove one address from the whitelist If the address does not exist in the whitelist, the transaction is reverted to save gas." - }, - "removeAddressesFromTheList(address[])": { - "notice": "Remove addresses from the whitelist If the address does not exist in the whitelist, there is no change for this address. The transaction remains valid (no revert)." - }, - "validateTransfer(address,address,uint256)": { - "notice": "Validate a transfer" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "CMTAT/=lib/CMTAT/contracts/", - "OZ/=lib/openzeppelin-contracts/contracts/", - "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "src/rules/validation/RuleWhitelist.sol": "RuleWhitelist" - }, - "evmVersion": "london", - "libraries": {} - }, - "sources": { - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol": { - "keccak256": "0xfba123f04b693467a10bffcc3d30c8ee0a55a159d1a50a9e6ad7efa6a08ad9ad", - "urls": [ - "bzz-raw://f0af9bead272c5af8153932efe6e464485aa27c82a2a5c79ed94e780ec373da0", - "dweb:/ipfs/QmZJj9B5sBDGY8b5qbFkadmQ377xugKwGoxkHPWW3BpnWg" - ], - "license": "MPL-2.0" - }, - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol": { - "keccak256": "0x5162820d851ed01a9ce5e0b28b58b4dfa6262d010e0f112ca1dd1867b37600ed", - "urls": [ - "bzz-raw://599cbb744369ec114f918eec3f462d0f2f0a33bab292683be34098bf98b31423", - "dweb:/ipfs/QmTSYGzsUDicQ5jCu88r2XnRqFyS5nJqfPGiz4q3aL35mx" - ], - "license": "MPL-2.0" - }, - "lib/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol": { - "keccak256": "0xefa53aa4e697f2fd338b56888c9492392100a146ccd7a2c107cbd189f5c99ea3", - "urls": [ - "bzz-raw://a7a5933297a01300d5eb8baa49cce9c98c5f3779e329f4ac41dae6e128bdf68e", - "dweb:/ipfs/QmcDMxLHuuc7n8dVw6PWtQaRrkqMrtQUoBt4XKeNHF69mF" - ], - "license": "MPL-2.0" - }, - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": { - "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", - "urls": [ - "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", - "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/metatx/ERC2771Context.sol": { - "keccak256": "0x98256cf37b71a69b2f5a8a6fe975ea03590dff703102bd141a830f94e8adebf6", - "urls": [ - "bzz-raw://6251fe1f6a1e45e6d619d150c123afc88b8646b38ee26a136efa9a6988a31d3f", - "dweb:/ipfs/QmeXDT85wSZdP31wkz3ah3KhponCiksJLP5o2LR5e1JxcK" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133", - "urls": [ - "bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8", - "dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", - "urls": [ - "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", - "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" - ], - "license": "MIT" - }, - "src/interfaces/IRuleValidation.sol": { - "keccak256": "0x6b23f8d7355937f0d304ceb498f661b004d1969f87782af7588a960273af38a1", - "urls": [ - "bzz-raw://b9c92ca4ce23304474c8236dd37c60f2c98627ca2a6156eb2ce0767436f40fa9", - "dweb:/ipfs/QmZMkCu57MjUXjN5TtkhDGgM9RzGQpTX3uD79P1M9Vn2G8" - ], - "license": "MPL-2.0" - }, - "src/modules/MetaTxModuleStandalone.sol": { - "keccak256": "0x32423330fbd140fb87b7f3c9f004db3eb7256f0f8c15b76be26ff14ba81edba0", - "urls": [ - "bzz-raw://af6e6cfd9ccb587283b8379965a76143a27aaa38115191db1bbb1a5632eb4a25", - "dweb:/ipfs/QmTdaEc78NfG9wJRYErsCZajvNF8ozLaqEfNyzi7Fu1fMj" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/RuleWhitelist.sol": { - "keccak256": "0xf0e635201c41e836209c5b95410eee4f53917039e67d62e6d4b906f86fb6ef43", - "urls": [ - "bzz-raw://a047917130bf5d3f6b64285f99bd9d5ff483b4b32753fa85d77d8858e2e2a690", - "dweb:/ipfs/QmQpvEQXNWm1aitXH6fkDg7nirUzrKHCicmeuPNDXN3QBP" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleAddressList/RuleAddressList.sol": { - "keccak256": "0x062f188bd35d2e2ca224c7a5b576c5720275e5175d3fa3ffd9ab896dcf21c400", - "urls": [ - "bzz-raw://fa847c271016bae89e056f66898f4fba411b348bb312face86c94758f8a378ac", - "dweb:/ipfs/QmPGHHbsmxVgL7tcc77qNVMfxtESgnYqrvdLqxGXdXw2bM" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleAddressList/RuleAddressListInternal.sol": { - "keccak256": "0x4fe41635bb8060e980ed5d9847afd0f2bb89c64501254bea619e65a727ba67b6", - "urls": [ - "bzz-raw://e0e417e96caa101c0a8a6a25944c89d9690cd166680dd298918e4819f415c531", - "dweb:/ipfs/QmPJeFJW8g4dzfHU81Kt5kfLBgVWevChUzArFSjh5iDVR8" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleAddressListInvariantStorage.sol": { - "keccak256": "0x56c9ca1310dccae89d1019b5a9041fcd11f8344656221995fe2fbc4d095b37c3", - "urls": [ - "bzz-raw://ce143c19d8c1d192e4fddabb32be213caef4c6bfa19dcf79f3ae6a6cc518a1b7", - "dweb:/ipfs/Qmbn9wRsiRybULTaKqBkPWe6SEbbfKVRttD1mi2cb8RznB" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleAddressList/invariantStorage/RuleWhitelistInvariantStorage.sol": { - "keccak256": "0x39a4b0b5ef4d03b32e826c67c0244bd0bdc803656e6f7d2301c395b7a3bd5bb2", - "urls": [ - "bzz-raw://5c6222cc7a6e87d1bd11c5989c83ee6bf09dca003c3002845dbf41a4b694246e", - "dweb:/ipfs/QmXQy7odhSupb6BjG1T1KjbmaLs7mcBrag7Sn3cp2JGUyb" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleCommonInvariantStorage.sol": { - "keccak256": "0xea52693dfabf31d5b94201b78ba04cd4e7f9985b616965530317dcb25c59b678", - "urls": [ - "bzz-raw://c6a24a2b31405e5511548afd5dca62ea8670a71ebb7fce8604637609ff320749", - "dweb:/ipfs/QmUDXyeySu8nBRyTWGxdrTs4NC813F5w9PyBTgMs9Y7N7u" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleValidateTransfer.sol": { - "keccak256": "0xd843208b93b04efb86fc20e5f0f8b1a725a6402fcbe5836aadf652c9804b749b", - "urls": [ - "bzz-raw://2ce6f485b6d7c43e823fe0add5b894c252dbc36e61143df6e4a00c1bd12dc1cd", - "dweb:/ipfs/QmQaKkmwo8UacTADjRh9ebj1B8CCjpLRfHoUt3xMcDYhAt" - ], - "license": "MPL-2.0" - }, - "src/rules/validation/abstract/RuleWhitelistCommon.sol": { - "keccak256": "0xbab37a174342a2a1d3343bb575b5e85450f662973f8c06cba6103f4071480c7c", - "urls": [ - "bzz-raw://a45604ae07b94bec85e15b9d79d24b3ba98d8fed9eebee4e3769da215be1022c", - "dweb:/ipfs/QmNsESHhPwpHpJiuYiFRADLXGyUuKZmXrGVMcVvt8XyALZ" - ], - "license": "MPL-2.0" - } - }, - "version": 1 - }, - "id": 100 -}