[ { "inputs": [ { "internalType": "uint8", "name": "decimals_", "type": "uint8" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "Deny", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "what", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "data", "type": "address" } ], "name": "File", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "what", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "data", "type": "string" } ], "name": "File", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" } ], "name": "Rely", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "bytes16", "name": "data", "type": "bytes16" } ], "name": "SetHookData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "address", "name": "vault", "type": "address" } ], "name": "VaultUpdate", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "authTransferFrom", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "checkTransferRestriction", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "deny", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deploymentChainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "detectTransferRestriction", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "what", "type": "bytes32" }, { "internalType": "string", "name": "data", "type": "string" } ], "name": "file", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "what", "type": "bytes32" }, { "internalType": "address", "name": "data", "type": "address" } ], "name": "file", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "hook", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "hookDataOf", "outputs": [ { "internalType": "bytes16", "name": "", "type": "bytes16" } ], "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": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rely", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes16", "name": "hookData", "type": "bytes16" } ], "name": "setHookData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "address", "name": "vault_", "type": "address" } ], "name": "updateVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "vault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "wards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
610120604052348015610010575f80fd5b5060405161269338038061269383398101604081905261002f9161015f565b335f81815260208190526040808220600190555183929182917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a25060ff166080908152604080518082018252600a81526943656e7472696675676560b01b6020918201527fe416b338a274162320c79445ae6604141d1cb08275eb27011b69f002dc094d0560a09081528251808401845260018152603160f81b908301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660c08181524660e0819052835186517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528088019190915260608101939093529582019590955230818301528351808203909201825290930190915281519101206101005250610186565b5f6020828403121561016f575f80fd5b815160ff8116811461017f575f80fd5b9392505050565b60805160a05160c05160e051610100516124c96101ca5f395f61087f01525f818161042901526107b301525f61082e01525f61080901525f6102b901526124c95ff3fe608060405234801561000f575f80fd5b50600436106101e7575f3560e01c80637f5a7c7b11610109578063cd0d00961161009e578063dd62ed3e1161006e578063dd62ed3e14610484578063e8e6dc75146104ae578063f815c03d146104f9578063fa1e713014610521575f80fd5b8063cd0d009614610424578063d4ce14151461044b578063d4e8be831461045e578063d505accf14610471575f80fd5b80639dc29fac116100d95780639dc29fac146103cc5780639fd5a6cf146103df578063a9059cbb146103f2578063bf353dbb14610405575f80fd5b80637f5a7c7b14610373578063887ca2491461039e57806395d89b41146103b15780639c52a7f1146103b9575f80fd5b8063313ce5671161017f5780636a9154aa1161014f5780636a9154aa1461031b57806370a082311461032e5780637ecebe00146103415780637f4ab1dd14610360575f80fd5b8063313ce567146102b45780633644e515146102ed57806340c10f19146102f557806365fae35e14610308575f80fd5b806318160ddd116101ba57806318160ddd146102505780631b451d281461026757806323b872dd1461027a57806330adf81f1461028d575f80fd5b806301ffc9a7146101eb57806306fdde0314610213578063095ea7b314610228578063097ac46e1461023b575b5f80fd5b6101fe6101f9366004611e7f565b610534565b60405190151581526020015b60405180910390f35b61021b61056a565b60405161020a9190611ec8565b6101fe610236366004611ef0565b6105f6565b61024e610249366004611fa3565b610661565b005b61025960035481565b60405190815260200161020a565b61024e610275366004611ffa565b6106c8565b6101fe61028836600461202b565b610790565b6102597f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102db7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161020a565b6102596107b0565b61024e610303366004611ef0565b6108a1565b61024e610316366004612065565b61090f565b61024e61032936600461207e565b6109a7565b61025961033c366004612065565b610a85565b61025961034f366004612065565b60066020525f908152604090205481565b61021b61036e3660046120cf565b610aab565b600854610386906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b6101fe6103ac3660046120e8565b610b2a565b61021b610cff565b61024e6103c7366004612065565b610d0c565b61024e6103da366004611ef0565b610da3565b61024e6103ed366004612130565b610db8565b6101fe610400366004611ef0565b610f9d565b610259610413366004612065565b5f6020819052908152604090205481565b6102597f000000000000000000000000000000000000000000000000000000000000000081565b6102db61045936600461202b565b610fb5565b61024e61046c3660046121b0565b6110e1565b61024e61047f3660046121d1565b611212565b610259610492366004611ffa565b600560209081525f928352604080842090915290825290205481565b6104e06104bc366004612065565b6001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6040516001600160801b0319909116815260200161020a565b610386610507366004612065565b60096020525f90815260409020546001600160a01b031681565b6101fe61052f36600461202b565b611281565b5f6001600160e01b0319821663f815c03d60e01b148061056457506001600160e01b031982166301ffc9a760e01b145b92915050565b6001805461057790612237565b80601f01602080910402602001604051908101604052809291908181526020018280546105a390612237565b80156105ee5780601f106105c5576101008083540402835291602001916105ee565b820191905f5260205f20905b8154815290600101906020018083116105d157829003601f168201915b505050505081565b335f8181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106509086815260200190565b60405180910390a350600192915050565b335f908152602081905260409020546001146106ba5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064015b60405180910390fd5b6106c4828261129a565b5050565b335f9081526020819052604090205460011461071c5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b6001600160a01b038281165f81815260096020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19169486169485179055905192835290917fd8c6b8f6ca4977137bd0c05f8e49099e0bbbefe5ed3010bf828a76dbab95831391015b60405180910390a25050565b5f61079c8484846113a2565b90506107a98484846113af565b9392505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461087c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6108ab828261151b565b6003546001600160801b0310156109045760405162461bcd60e51b815260206004820152601a60248201527f5472616e6368652f657863656564732d6d61782d737570706c7900000000000060448201526064016106b1565b6106c45f83836113af565b335f908152602081905260409020546001146109635760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b335f90815260208190526040902054600114806109ce57506008546001600160a01b031633145b610a1a5760405162461bcd60e51b815260206004820152601660248201527f5472616e6368652f6e6f742d617574686f72697a65640000000000000000000060448201526064016106b1565b6001600160a01b0382165f8181526007602090815260409182902080546001600160801b0316600160801b608087901c0217905590516001600160801b0319841681527f8fa29948e0a84e3c738d2e921e65fab6e5a02291fe898fd94d60c3c8ee614c459101610784565b6001600160a01b0381165f908152600760205260408120546001600160801b0316610564565b606060ff821615610af1576040518060400160405280601081526020017f7472616e736665722d626c6f636b656400000000000000000000000000000000815250610564565b505060408051808201909152601081527f7472616e736665722d616c6c6f77656400000000000000000000000000000000602082015290565b335f90815260208190526040812054600114610b7e5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b610b8a8585858561165b565b6008549091506001600160a01b03161580610cab57506008546040805180820190915263078d18cd60e01b916001600160a01b03169063078d18cd90889088908890889080610bf7856001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b0319168152602001610c2e8c6001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b03191690526040516001600160e01b031960e088901b168152610c5f95949392919060040161226f565b6020604051808303815f875af1158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f91906122ba565b6001600160e01b031916145b610cf75760405162461bcd60e51b815260206004820152601b60248201527f5472616e6368652f7265737472696374696f6e732d6661696c6564000000000060448201526064016106b1565b949350505050565b6002805461057790612237565b335f90815260208190526040902054600114610d605760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b610dad8282611896565b6106c4825f836113af565b81421115610e085760405162461bcd60e51b815260206004820152601460248201527f45524332302f7065726d69742d6578706972656400000000000000000000000060448201526064016106b1565b6001600160a01b0385165f90815260066020526040812080546001810190915590610e316107b0565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e00160405160208183030381529060405280519060200120604051602001610eca92919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050610eed878285611a75565b610f395760405162461bcd60e51b815260206004820152601460248201527f45524332302f696e76616c69642d7065726d697400000000000000000000000060448201526064016106b1565b6001600160a01b038781165f818152600560209081526040808320948b168084529482529182902089905590518881527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f610fa88383611c68565b90506105643384846113af565b6008545f906001600160a01b0316610fce57505f6107a9565b60085f9054906101000a90046001600160a01b03166001600160a01b031663ef59bc9285858560405180604001604052806110278b6001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b031916815260200161105e8a6001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b03191690526040516001600160e01b031960e087901b16815261108e94939291906004016122d5565b602060405180830381865afa1580156110a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110cd9190612321565b6110d8576001610cf7565b5f949350505050565b335f908152602081905260409020546001148061110857506008546001600160a01b031633145b6111545760405162461bcd60e51b815260206004820152601660248201527f5472616e6368652f6e6f742d617574686f72697a65640000000000000000000060448201526064016106b1565b8163686f6f6b60e01b0361118f576008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556111d7565b60405162461bcd60e51b815260206004820152601f60248201527f5472616e6368652f66696c652d756e7265636f676e697a65642d706172616d0060448201526064016106b1565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba90602001610784565b6112788787878786868960405160200161126493929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052610db8565b50505050505050565b5f8061128e858585610fb5565b60ff1614949350505050565b335f908152602081905260409020546001146112ee5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b81636e616d6560e01b0361130e576001611308828261238b565b50611372565b81651cde5b589bdb60d21b0361132a576002611308828261238b565b60405162461bcd60e51b815260206004820152601d60248201527f45524332302f66696c652d756e7265636f676e697a65642d706172616d00000060448201526064016106b1565b817fe42e0b9a029dc87ccb1029c632e6359090acd0eb032b2b59c811e3ec70160dc6826040516107849190611ec8565b5f610cf73385858561165b565b6008546001600160a01b031615806114ca575060085460408051808201909152631fb8c88760e11b916001600160a01b031690633f71910e9086908690869080611417856001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b031916815260200161144e8a6001600160a01b03165f90815260076020526040902054600160801b900460801b90565b6001600160801b03191690526040516001600160e01b031960e087901b16815261147e94939291906004016122d5565b6020604051808303815f875af115801561149a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114be91906122ba565b6001600160e01b031916145b6115165760405162461bcd60e51b815260206004820152601b60248201527f5472616e6368652f7265737472696374696f6e732d6661696c6564000000000060448201526064016106b1565b505050565b335f9081526020819052604090205460011461156f5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b6001600160a01b0382161580159061159057506001600160a01b0382163014155b6115d45760405162461bcd60e51b815260206004820152601560248201527445524332302f696e76616c69642d6164647265737360581b60448201526064016106b1565b6116068282611600856001600160a01b03165f908152600760205260409020546001600160801b031690565b01611dc4565b806003546116149190612446565b6003556040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f6001600160a01b0383161580159061167d57506001600160a01b0383163014155b6116c15760405162461bcd60e51b815260206004820152601560248201527445524332302f696e76616c69642d6164647265737360581b60448201526064016106b1565b5f6116cb85610a85565b90508281101561171d5760405162461bcd60e51b815260206004820152601a60248201527f45524332302f696e73756666696369656e742d62616c616e636500000000000060448201526064016106b1565b856001600160a01b0316856001600160a01b0316146117df576001600160a01b038086165f908152600560209081526040808320938a16835292905220545f1981146117dd57838110156117b35760405162461bcd60e51b815260206004820152601c60248201527f45524332302f696e73756666696369656e742d616c6c6f77616e63650000000060448201526064016106b1565b6001600160a01b038087165f908152600560209081526040808320938b1683529290522084820390555b505b611811858461180b886001600160a01b03165f908152600760205260409020546001600160801b031690565b03611dc4565b61183d8484611600876001600160a01b03165f908152600760205260409020546001600160801b031690565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161188291815260200190565b60405180910390a350600195945050505050565b335f908152602081905260409020546001146118ea5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016106b1565b5f6118f483610a85565b9050818110156119465760405162461bcd60e51b815260206004820152601a60248201527f45524332302f696e73756666696369656e742d62616c616e636500000000000060448201526064016106b1565b6001600160a01b03831633146119fb576001600160a01b0383165f9081526005602090815260408083203384529091529020545f1981146119f957828110156119d15760405162461bcd60e51b815260206004820152601c60248201527f45524332302f696e73756666696369656e742d616c6c6f77616e63650000000060448201526064016106b1565b6001600160a01b0384165f908152600560209081526040808320338452909152902083820390555b505b611a27838361180b866001600160a01b03165f908152600760205260409020546001600160801b031690565b6003805483900390556040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b5f6001600160a01b038416611acc5760405162461bcd60e51b815260206004820152601b60248201527f5369676e61747572654c69622f696e76616c69642d7369676e6572000000000060448201526064016106b1565b8151604103611b645760208281015160408085015160608087015183515f8082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa158015611b32573d5f803e3d5ffd5b505050602060405103516001600160a01b0316876001600160a01b031603611b6057600193505050506107a9565b5050505b6001600160a01b0384163b156107a9575f80856001600160a01b03168585604051602401611b93929190612465565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630b135d3f60e11b17905251611bdd919061247d565b5f60405180830381855afa9150503d805f8114611c15576040519150601f19603f3d011682016040523d82523d5f602084013e611c1a565b606091505b5091509150818015611c2d575080516020145b8015611c5e57508051630b135d3f60e11b90611c5290830160209081019084016122ba565b6001600160e01b031916145b9695505050505050565b5f6001600160a01b03831615801590611c8a57506001600160a01b0383163014155b611cce5760405162461bcd60e51b815260206004820152601560248201527445524332302f696e76616c69642d6164647265737360581b60448201526064016106b1565b5f611cd833610a85565b905082811015611d2a5760405162461bcd60e51b815260206004820152601a60248201527f45524332302f696e73756666696369656e742d62616c616e636500000000000060448201526064016106b1565b335f81815260076020526040902054611d4e919085906001600160801b031661180b565b611d7a8484611600876001600160a01b03165f908152600760205260409020546001600160801b031690565b6040518381526001600160a01b0385169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b611dcd81611e07565b6001600160a01b03929092165f90815260076020526040902080546001600160801b0319166001600160801b039093169290921790915550565b5f6001600160801b03821115611e5f5760405162461bcd60e51b815260206004820152601860248201527f4d6174684c69622f75696e743132382d6f766572666c6f77000000000000000060448201526064016106b1565b50805b919050565b6001600160e01b031981168114611e7c575f80fd5b50565b5f60208284031215611e8f575f80fd5b81356107a981611e67565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6107a96020830184611e9a565b80356001600160a01b0381168114611e62575f80fd5b5f8060408385031215611f01575f80fd5b611f0a83611eda565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f8067ffffffffffffffff841115611f4657611f46611f18565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715611f7557611f75611f18565b604052838152905080828401851015611f8c575f80fd5b838360208301375f60208583010152509392505050565b5f8060408385031215611fb4575f80fd5b82359150602083013567ffffffffffffffff811115611fd1575f80fd5b8301601f81018513611fe1575f80fd5b611ff085823560208401611f2c565b9150509250929050565b5f806040838503121561200b575f80fd5b61201483611eda565b915061202260208401611eda565b90509250929050565b5f805f6060848603121561203d575f80fd5b61204684611eda565b925061205460208501611eda565b929592945050506040919091013590565b5f60208284031215612075575f80fd5b6107a982611eda565b5f806040838503121561208f575f80fd5b61209883611eda565b915060208301356001600160801b0319811681146120b4575f80fd5b809150509250929050565b803560ff81168114611e62575f80fd5b5f602082840312156120df575f80fd5b6107a9826120bf565b5f805f80608085870312156120fb575f80fd5b61210485611eda565b935061211260208601611eda565b925061212060408601611eda565b9396929550929360600135925050565b5f805f805f60a08688031215612144575f80fd5b61214d86611eda565b945061215b60208701611eda565b93506040860135925060608601359150608086013567ffffffffffffffff811115612184575f80fd5b8601601f81018813612194575f80fd5b6121a388823560208401611f2c565b9150509295509295909350565b5f80604083850312156121c1575f80fd5b8235915061202260208401611eda565b5f805f805f805f60e0888a0312156121e7575f80fd5b6121f088611eda565b96506121fe60208901611eda565b9550604088013594506060880135935061221a608089016120bf565b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061224b57607f821691505b60208210810361226957634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b0386811682528581166020830152841660408201526060810183905260c08101611c5e608083018480516001600160801b0319908116835260209182015116910152565b5f602082840312156122ca575f80fd5b81516107a981611e67565b6001600160a01b038581168252841660208201526040810183905260a08101612318606083018480516001600160801b0319908116835260209182015116910152565b95945050505050565b5f60208284031215612331575f80fd5b815180151581146107a9575f80fd5b601f82111561151657805f5260205f20601f840160051c810160208510156123655750805b601f840160051c820191505b81811015612384575f8155600101612371565b5050505050565b815167ffffffffffffffff8111156123a5576123a5611f18565b6123b9816123b38454612237565b84612340565b6020601f8211600181146123eb575f83156123d45750848201515b5f19600385901b1c1916600184901b178455612384565b5f84815260208120601f198516915b8281101561241a57878501518255602094850194600190920191016123fa565b508482101561243757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561056457634e487b7160e01b5f52601160045260245ffd5b828152604060208201525f610cf76040830184611e9a565b5f82518060208501845e5f92019182525091905056fea2646970667358221220d96788efce0abae761dd6fa9f185d3e7a99eb9ee0dcc47b2636aa6ead05be32564736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000006