From 586f1ff152fc072af27d149594cfabb9eb0eebf3 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Jul 2024 12:13:08 +0530 Subject: [PATCH 01/12] feat : added different proxy versions in proxy client --- .../src/artifacts/Proxy_3_0_2.json | 723 ++++++++++ .../src/artifacts/Proxy_5_0_0.json | 1176 +++++++++++++++++ crates/l2/starknet-proxy-client/src/deploy.rs | 67 + src/StarknetProxy_3_0_2.sol | 330 +++++ src/StarknetValidity.sol | 366 +++++ 5 files changed, 2662 insertions(+) create mode 100644 crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json create mode 100644 crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json create mode 100644 src/StarknetProxy_3_0_2.sol create mode 100644 src/StarknetValidity.sol diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json new file mode 100644 index 0000000..875d193 --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_3_0_2.json @@ -0,0 +1,723 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "upgradeActivationDelay", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROXY_GOVERNANCE_TAG", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROXY_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addImplementation", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getUpgradeActivationDelay", + "inputs": [], + "outputs": [ + { "name": "delay", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "_implementation", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isNotFinalized", + "inputs": [], + "outputs": [ + { "name": "notFinal", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxyAcceptGovernance", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxyCancelNomination", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxyIsGovernor", + "inputs": [ + { "name": "user", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxyNominateNewGovernor", + "inputs": [ + { "name": "newGovernor", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxyRemoveGovernor", + "inputs": [ + { + "name": "governorForRemoval", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeImplementation", + "inputs": [ + { + "name": "removedImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "FinalizedImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationAdded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationRemoved", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationUpgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LogNewGovernorAccepted", + "inputs": [ + { + "name": "acceptedGovernor", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LogNominatedGovernor", + "inputs": [ + { + "name": "nominatedGovernor", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LogNominationCancelled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "LogRemovedGovernor", + "inputs": [ + { + "name": "removedGovernor", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b5060405162001ba238038062001ba2833981810160405260208110156200003757600080fd5b50516200004362000055565b6200004e81620000e9565b5062000277565b6000620000616200010d565b6001810154909150600160a01b900460ff1615620000c6576040805162461bcd60e51b815260206004820152601360248201527f414c52454144595f494e495449414c495a454400000000000000000000000000604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b179055620000e6336200018d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b60008060405180606001604052806027815260200162001b7b602791396040518082805190602001908083835b602083106200015b5780518252601f1990920191602091820191016200013a565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b620001988162000246565b15620001de576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000620001ea6200010d565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a15050565b600080620002536200010d565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b6118f480620002876000396000f3fe6080604052600436106100f75760003560e01c80637147855d1161008a578063c5ab845311610059578063c5ab84531461059d578063d38d8d7a146105b2578063e907fa3c146105c7578063f9bcdde4146105dc57610149565b80637147855d1461048e57806372a44f071461050e5780638757653f14610523578063b449ea5d1461055657610149565b80635c60da1b116100c65780635c60da1b1461032e5780635cef2e861461035f5780635e3a97e7146103ec5780636684b1d61461047957610149565b806312f16e6d146101cd57806320cea94d14610202578063439fab911461022957806356f36dbf146102a457610149565b36610149576040805162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f52454345495645604482015290519081900360640190fd5b60006101536105f1565b90506001600160a01b0381166101a9576040805162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b604482015290519081900360640190fd5b3660008037600080366000845af43d6000803e8080156101c8573d6000f35b3d6000fd5b3480156101d957600080fd5b50610200600480360360208110156101f057600080fd5b50356001600160a01b0316610616565b005b34801561020e57600080fd5b50610217610622565b60408051918252519081900360200190f35b34801561023557600080fd5b506102006004803603602081101561024c57600080fd5b810190602081018135600160201b81111561026657600080fd5b82018360208201111561027857600080fd5b803590602001918460018302840111600160201b8311171561029957600080fd5b509092509050610646565b3480156102b057600080fd5b506102b961068c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f35781810151838201526020016102db565b50505050905090810190601f1680156103205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033a57600080fd5b506103436105f1565b604080516001600160a01b039092168252519081900360200190f35b34801561036b57600080fd5b506102006004803603606081101561038257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111600160201b831117156103df57600080fd5b91935091503515156106a8565b3480156103f857600080fd5b506102006004803603606081101561040f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561043957600080fd5b82018360208201111561044b57600080fd5b803590602001918460018302840111600160201b8311171561046c57600080fd5b9193509150351515610866565b34801561048557600080fd5b50610200610a20565b610200600480360360608110156104a457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104ce57600080fd5b8201836020820111156104e057600080fd5b803590602001918460018302840111600160201b8311171561050157600080fd5b9193509150351515610a2a565b34801561051a57600080fd5b506102176110ad565b34801561052f57600080fd5b506102006004803603602081101561054657600080fd5b50356001600160a01b03166110ed565b34801561056257600080fd5b506105896004803603602081101561057957600080fd5b50356001600160a01b03166110f6565b604080519115158252519081900360200190f35b3480156105a957600080fd5b506102b9611107565b3480156105be57600080fd5b50610217611128565b3480156105d357600080fd5b5061058961112f565b3480156105e857600080fd5b50610200611155565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b245490565b61061f8161115d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040805162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b604482015290519081900360640190fd5b6040518060600160405280602781526020016118986027913981565b6106b1336112aa565b6106f4576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050604051602081830303815290604052805190602001209050600060026000838152602001908152602001600020549050600081116107d3576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b6002600083815260200190815260200160002060009055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b61086f336112aa565b6108b2576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6108c4846001600160a01b03166112d9565b61090c576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006109886110ad565b42019050806002600084815260200190815260200160002081905550856001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b610a286112df565b565b610a33336112aa565b610a76576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610a7e61112f565b610acf576040805162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a45440000000000000000604482015290519081900360640190fd5b610ad7611369565b15610b1b576040805162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610bfa576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b610c0c866001600160a01b03166112d9565b610c54576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b4281111580610c7357506000610c686105f1565b6001600160a01b0316145b610cc4576040805162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f594554000000000000000000604482015290519081900360640190fd5b610ccd866114cc565b60006060876001600160a01b031663439fab9160e01b88886040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610d7e5780518252601f199092019160209182019101610d5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610dde576040519150601f19603f3d011682016040523d82523d6000602084013e610de3565b606091505b5091509150818190610e735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516001600160a01b038c169382918083835b60208310610ed05780518252601f199092019160209182019101610eb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f30576040519150601f19603f3d011682016040523d82523d6000602084013e610f35565b606091505b50909250905081610f8d576040805162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f524556455254454400000000000000604482015290519081900360640190fd5b808060200190516020811015610fa257600080fd5b505115610ff6576040805162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e00000000000000604482015290519081900360640190fd5b876001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a284156110a35761106e6114f0565b6040516001600160a01b038916907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c90600090a25b5050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e0082106110e45762ed4e006110e6565b815b9150505b90565b61061f81611516565b6000611101826112aa565b92915050565b60405180604001604052806005815260200164199718171960d91b81525081565b62ed4e0081565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2541590565b610a286116bc565b611166336112aa565b6111a9576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156111fe576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000611208611766565b9050611213826112aa565b611253576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6000806112b5611766565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b3b151590565b60006112e9611766565b60018101549091506001600160a01b0316331461134d576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b611356336117e3565b60010180546001600160a01b0319169055565b6000806113746105f1565b90506001600160a01b03811661138e5760009150506110ea565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106113f45780518252601f1990920191602091820191016113d5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508181906114ac5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e38578181015183820152602001610e20565b508080602001905160208110156114c257600080fd5b5051935050505090565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2455565b60017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b61151f336112aa565b611562576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061156c611766565b90506001600160a01b0382166115b7576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b6115c0826112aa565b15611605576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611665576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b6116c5336112aa565b611708576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611712611766565b60018101549091506001600160a01b03161561061f576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080604051806060016040528060278152602001611898602791396040518082805190602001908083835b602083106117b15780518252601f199092019160209182019101611792565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b6117ec816112aa565b15611831576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061183b611766565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a1505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea26469706673582212203a19bff527d274eefeeb7dd40b1b1b143070f4c97dfdf4f31d65f9e5648f10cd64736f6c634300060c0033537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6e", + "sourceMap": "3049:10323:2:-:0;;;4007:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4007:143:2;4068:16;:14;:16::i;:::-;4094:49;4120:22;4094:25;:49::i;:::-;4007:143;3049:10323;;2294:317:4;2339:32;2374:19;:17;:19::i;:::-;2412:15;;;;;;-1:-1:-1;;;;2412:15:4;;;;2411:16;2403:48;;;;;-1:-1:-1;;;2403:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2479:4;2461:15;;:22;;-1:-1:-1;;;;2461:22:4;-1:-1:-1;;;2461:22:4;;;2575:29;2593:10;2575:17;:29::i;:::-;2294:317;:::o;4336:187:2:-;2456:66:3;4479:28:2;4465:52::o;2384:151:0:-;2445:28;2492:14;2507:20;;;;;;;;;;;;;;;;;2492:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;-1:-1:-1;2492:36:0;;;;;;;;;;;2384:151;-1:-1:-1;;;2384:151:0:o;3972:334:4:-;4047:24;4059:11;4047;:24::i;:::-;4046:25;4038:54;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;;;;4102:32;4137:19;:17;:19::i;:::-;-1:-1:-1;;;;;4166:35:4;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4166:42:4;4204:4;4166:42;;;4264:35;;;;;;;4102:54;;-1:-1:-1;4264:35:4;;;;;;;;;3972:334;;:::o;2617:189::-;2684:4;;2735:19;:17;:19::i;:::-;-1:-1:-1;;;;;2771:28:4;;;;:22;:28;;;;;;;;-1:-1:-1;;2771:28:4;;;;;;;2617:189::o;3049:10323:2:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106100f75760003560e01c80637147855d1161008a578063c5ab845311610059578063c5ab84531461059d578063d38d8d7a146105b2578063e907fa3c146105c7578063f9bcdde4146105dc57610149565b80637147855d1461048e57806372a44f071461050e5780638757653f14610523578063b449ea5d1461055657610149565b80635c60da1b116100c65780635c60da1b1461032e5780635cef2e861461035f5780635e3a97e7146103ec5780636684b1d61461047957610149565b806312f16e6d146101cd57806320cea94d14610202578063439fab911461022957806356f36dbf146102a457610149565b36610149576040805162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f52454345495645604482015290519081900360640190fd5b60006101536105f1565b90506001600160a01b0381166101a9576040805162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b604482015290519081900360640190fd5b3660008037600080366000845af43d6000803e8080156101c8573d6000f35b3d6000fd5b3480156101d957600080fd5b50610200600480360360208110156101f057600080fd5b50356001600160a01b0316610616565b005b34801561020e57600080fd5b50610217610622565b60408051918252519081900360200190f35b34801561023557600080fd5b506102006004803603602081101561024c57600080fd5b810190602081018135600160201b81111561026657600080fd5b82018360208201111561027857600080fd5b803590602001918460018302840111600160201b8311171561029957600080fd5b509092509050610646565b3480156102b057600080fd5b506102b961068c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f35781810151838201526020016102db565b50505050905090810190601f1680156103205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033a57600080fd5b506103436105f1565b604080516001600160a01b039092168252519081900360200190f35b34801561036b57600080fd5b506102006004803603606081101561038257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460018302840111600160201b831117156103df57600080fd5b91935091503515156106a8565b3480156103f857600080fd5b506102006004803603606081101561040f57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561043957600080fd5b82018360208201111561044b57600080fd5b803590602001918460018302840111600160201b8311171561046c57600080fd5b9193509150351515610866565b34801561048557600080fd5b50610200610a20565b610200600480360360608110156104a457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104ce57600080fd5b8201836020820111156104e057600080fd5b803590602001918460018302840111600160201b8311171561050157600080fd5b9193509150351515610a2a565b34801561051a57600080fd5b506102176110ad565b34801561052f57600080fd5b506102006004803603602081101561054657600080fd5b50356001600160a01b03166110ed565b34801561056257600080fd5b506105896004803603602081101561057957600080fd5b50356001600160a01b03166110f6565b604080519115158252519081900360200190f35b3480156105a957600080fd5b506102b9611107565b3480156105be57600080fd5b50610217611128565b3480156105d357600080fd5b5061058961112f565b3480156105e857600080fd5b50610200611155565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b245490565b61061f8161115d565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040805162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b604482015290519081900360640190fd5b6040518060600160405280602781526020016118986027913981565b6106b1336112aa565b6106f4576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050604051602081830303815290604052805190602001209050600060026000838152602001908152602001600020549050600081116107d3576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b6002600083815260200190815260200160002060009055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b61086f336112aa565b6108b2576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6108c4846001600160a01b03166112d9565b61090c576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006109886110ad565b42019050806002600084815260200190815260200160002081905550856001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b610a286112df565b565b610a33336112aa565b610a76576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610a7e61112f565b610acf576040805162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a45440000000000000000604482015290519081900360640190fd5b610ad7611369565b15610b1b576040805162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b031681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610bfa576040805162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e0000000000604482015290519081900360640190fd5b610c0c866001600160a01b03166112d9565b610c54576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b4281111580610c7357506000610c686105f1565b6001600160a01b0316145b610cc4576040805162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f594554000000000000000000604482015290519081900360640190fd5b610ccd866114cc565b60006060876001600160a01b031663439fab9160e01b88886040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610d7e5780518252601f199092019160209182019101610d5f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610dde576040519150601f19603f3d011682016040523d82523d6000602084013e610de3565b606091505b5091509150818190610e735760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516001600160a01b038c169382918083835b60208310610ed05780518252601f199092019160209182019101610eb1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f30576040519150601f19603f3d011682016040523d82523d6000602084013e610f35565b606091505b50909250905081610f8d576040805162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f524556455254454400000000000000604482015290519081900360640190fd5b808060200190516020811015610fa257600080fd5b505115610ff6576040805162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e00000000000000604482015290519081900360640190fd5b876001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a284156110a35761106e6114f0565b6040516001600160a01b038916907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c90600090a25b5050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e0082106110e45762ed4e006110e6565b815b9150505b90565b61061f81611516565b6000611101826112aa565b92915050565b60405180604001604052806005815260200164199718171960d91b81525081565b62ed4e0081565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2541590565b610a286116bc565b611166336112aa565b6111a9576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156111fe576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b6000611208611766565b9050611213826112aa565b611253576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b6000806112b5611766565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b3b151590565b60006112e9611766565b60018101549091506001600160a01b0316331461134d576040805162461bcd60e51b815260206004820152601760248201527f4f4e4c595f43414e4449444154455f474f5645524e4f52000000000000000000604482015290519081900360640190fd5b611356336117e3565b60010180546001600160a01b0319169055565b6000806113746105f1565b90506001600160a01b03811661138e5760009150506110ea565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106113f45780518252601f1990920191602091820191016113d5565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b50915091508181906114ac5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e38578181015183820152602001610e20565b508080602001905160208110156114c257600080fd5b5051935050505090565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2455565b60017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b61151f336112aa565b611562576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b600061156c611766565b90506001600160a01b0382166115b7576040805162461bcd60e51b815260206004820152600b60248201526a4241445f4144445245535360a81b604482015290519081900360640190fd5b6115c0826112aa565b15611605576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60018101546001600160a01b031615611665576040805162461bcd60e51b815260206004820152601760248201527f4f544845525f43414e4449444154455f50454e44494e47000000000000000000604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b6116c5336112aa565b611708576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611712611766565b60018101549091506001600160a01b03161561061f576001810180546001600160a01b03191690556040517f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600080604051806060016040528060278152602001611898602791396040518082805190602001908083835b602083106117b15780518252601f199092019160209182019101611792565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209392505050565b6117ec816112aa565b15611831576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b600061183b611766565b6001600160a01b03831660008181526020838152604091829020805460ff19166001179055815192835290519293507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d292918290030190a1505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea26469706673582212203a19bff527d274eefeeb7dd40b1b1b143070f4c97dfdf4f31d65f9e5648f10cd64736f6c634300060c0033", + "sourceMap": "3049:10323:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6981:42;;;-1:-1:-1;;;6981:42:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3049:10323;7272:23;7298:16;:14;:16::i;:::-;7272:42;-1:-1:-1;;;;;;7332:31:2;;7324:66;;;;;-1:-1:-1;;;7324:66:2;;;;;;;;;;;;-1:-1:-1;;;7324:66:2;;;;;;;;;;;;;;;7669:14;7666:1;7663;7650:34;7989:1;7970;7938:14;7919:1;7886:15;7863:5;7833:171;8078:16;8075:1;8072;8057:38;8116:6;8183:66;;;;8298:16;8295:1;8288:27;8183:66;8218:16;8215:1;8208:27;2776:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2776:118:0;-1:-1:-1;;;;;2776:118:0;;:::i;:::-;;2403:119:3;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6264:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6264:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6264:108:2;;;;;;;;;;-1:-1:-1;6264:108:2;;-1:-1:-1;6264:108:2;-1:-1:-1;6264:108:2;:::i;2201:87:0:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:195:2;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;5225:195:2;;;;;;;;;;;;;;10199:583;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10199:583:2;;;;;;;;;;;;;;;-1:-1:-1;;;10199:583:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10199:583:2;;;;;;;;;;;;-1:-1:-1;10199:583:2;-1:-1:-1;10199:583:2;;;;:::i;9422:543::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9422:543:2;;;;;;;;;;;;;;;-1:-1:-1;;;9422:543:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9422:543:2;;;;;;;;;;;;-1:-1:-1;9422:543:2;-1:-1:-1;9422:543:2;;;;:::i;2900:78:0:-;;;;;;;;;;;;;:::i;11681:1689:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11681:1689:2;;;;;;;;;;;;;;;-1:-1:-1;;;11681:1689:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11681:1689:2;;;;;;;;;;;;-1:-1:-1;11681:1689:2;-1:-1:-1;11681:1689:2;;;;:::i;4826:281::-;;;;;;;;;;;;;:::i;2656:114:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2656:114:0;-1:-1:-1;;;;;2656:114:0;;:::i;2541:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2541:109:0;-1:-1:-1;;;;;2541:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;3954:46:2;;;;;;;;;;;;;:::i;3895:52::-;;;;;;;;;;;;;:::i;8689:244::-;;;;;;;;;;;;;:::i;2984:78:0:-;;;;;;;;;;;;;:::i;5225:195:2:-;1261:66:3;5393:11:2;;5360:54::o;2776:118:0:-;2852:35;2868:18;2852:15;:35::i;:::-;2776:118;:::o;2403:119:3:-;2456:66;2403:119;:::o;6264:108:2:-;6333:32;;;-1:-1:-1;;;6333:32:2;;;;;;;;;;;;-1:-1:-1;;;6333:32:2;;;;;;;;;;;;;;2201:87:0;;;;;;;;;;;;;;;;;;;:::o;10199:583:2:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;10360:22:2::1;10419:21;10442:4;;10448:8;10408:49;;;;;;-1:-1:-1::0;;;;;10408:49:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:82;;;;;;10360:107;;10536:22;10561:11;:27;10573:14;10561:27;;;;;;;;;;;;10536:52;;10623:1;10606:14;:18;10598:58;;;::::0;;-1:-1:-1;;;10598:58:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10673:11;:27;10685:14;10673:27;;;;;;;;;;;10666:34;;;10737:21;-1:-1:-1::0;;;;;10715:60:2::1;;10760:4;;10766:8;10715:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;10715:60:2::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;10715:60:2;;-1:-1:-1;;;;;10715:60:2::1;942:1:6;;10199:583:2::0;;;;:::o;9422:543::-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;9584:30:2::1;:17;-1:-1:-1::0;;;;;9584:28:2::1;;:30::i;:::-;9576:63;;;::::0;;-1:-1:-1;;;9576:63:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9576:63:2;;;;;;;;;;;;;::::1;;9650:22;9709:17;9728:4;;9734:8;9698:45;;;;;;-1:-1:-1::0;;;;;9698:45:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9675:78;;;;;;9650:103;;9764:22;9807:27;:25;:27::i;:::-;9789:15;:45;9764:70;;9875:14;9845:11;:27;9857:14;9845:27;;;;;;;;;;;:44;;;;9924:17;-1:-1:-1::0;;;;;9904:54:2::1;;9943:4;;9949:8;9904:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;9904:54:2::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;9904:54:2;;-1:-1:-1;;;;;9904:54:2::1;942:1:6;;9422:543:2::0;;;;:::o;2900:78:0:-;2952:19;:17;:19::i;:::-;2900:78::o;11681:1689:2:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;6420:16:2::1;:14;:16::i;:::-;6412:53;;;::::0;;-1:-1:-1;;;6412:53:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6706:24:::2;:22;:24::i;:::-;6705:25;6697:53;;;::::0;;-1:-1:-1;;;6697:53:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;6697:53:2;;;;;;;;;;;;;::::2;;11858:22:::3;11917:17;11936:4;;11942:8;11906:45;;;;;;-1:-1:-1::0;;;;;11906:45:2::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11883:78;;;;;;11858:103;;11971:22;11996:11;:27;12008:14;11996:27;;;;;;;;;;;;11971:52;;12058:1;12041:14;:18;12033:58;;;::::0;;-1:-1:-1;;;12033:58:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;12109:30;:17;-1:-1:-1::0;;;;;12109:28:2::3;;:30::i;:::-;12101:63;;;::::0;;-1:-1:-1;;;12101:63:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;12101:63:2;;;;;;;;;;;;;::::3;;12304:15;12286:14;:33;;:85;;;-1:-1:-1::0;12367:3:2::3;12339:16;:14;:16::i;:::-;-1:-1:-1::0;;;;;12339:32:2::3;;12286:85;12265:155;;;::::0;;-1:-1:-1;;;12265:155:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;12431:36;12449:17;12431;:36::i;:::-;12547:12;12561:23;12588:17;-1:-1:-1::0;;;;;12588:43:2::3;12672:24;;;12698:4;;12649:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;;::::3;-1:-1:-1::0;;12649:54:2;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;12649:54:2::3;-1:-1:-1::0;;;;;;12649:54:2;;::::3;::::0;;;::::3;::::0;;12588:129;;;;12649:54;;12588:129;;-1:-1:-1;12588:129:2;;-1:-1:-1;12649:54:2;-1:-1:-1;12588:129:2;;-1:-1:-1;12588:129:2;;-1:-1:-1;12588:129:2;12649:54;12588:129:::3;;;;;;::::0;;;;-1:-1:-1;;12588:129:2;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12546:171;;;;12735:7;12751:10;12727:36;;;;;-1:-1:-1::0;;;12727:36:2::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12991:37:2::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;12991:37:2::3;-1:-1:-1::0;;;12991:37:2::3;::::0;;12947:91;;;;-1:-1:-1;;;;;12947:30:2;::::3;::::0;:91;;;;12991:37;12947:91:::3;;;;;;::::0;;;;-1:-1:-1;;12947:91:2;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12923:115:2;;-1:-1:-1;12923:115:2;-1:-1:-1;12923:115:2;13048:45:::3;;;::::0;;-1:-1:-1;;;13048:45:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;13123:10;13112:30;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;13112:30:2;13111:31:::3;13103:69;;;::::0;;-1:-1:-1;;;13103:69:2;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;13211:17;-1:-1:-1::0;;;;;13188:47:2::3;;13230:4;;13188:47;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;-1:-1:-1::0;;13188:47:2::3;::::0;;::::3;::::0;;::::3;::::0;-1:-1:-1;13188:47:2;;-1:-1:-1;;;;13188:47:2::3;13250:8;13246:118;;;13274:18;:16;:18::i;:::-;13311:42;::::0;-1:-1:-1;;;;;13311:42:2;::::3;::::0;::::3;::::0;;;::::3;13246:118;6760:1;;;;11681:1689:::0;;;;:::o;4826:281::-;2456:66:3;4984:11:2;;;3939:8;5024:25;;5023:55;;3939:8;5023:55;;;5053:5;5023:55;5015:63;;5088:12;4826:281;;:::o;2656:114:0:-;2730:33;2751:11;2730:20;:33::i;2541:109::-;2603:4;2626:17;2638:4;2626:11;:17::i;:::-;2619:24;2541:109;-1:-1:-1;;2541:109:0:o;3954:46:2:-;;;;;;;;;;;;;;-1:-1:-1;;;3954:46:2;;;;:::o;3895:52::-;3939:8;3895:52;:::o;8689:244::-;2135:66:3;8869:11:2;8911:14;;8689:244::o;2984:78:0:-;3036:19;:17;:19::i;4751:416:4:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;4860:10:4::1;-1:-1:-1::0;;;;;4860:32:4;::::1;;;4852:65;;;::::0;;-1:-1:-1;;;4852:65:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4852:65:4;;;;;;;;;;;;;::::1;;4927:32;4962:19;:17;:19::i;:::-;4927:54;;4999:31;5011:18;4999:11;:31::i;:::-;4991:56;;;::::0;;-1:-1:-1;;;4991:56:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;4991:56:4;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;5057:42:4;::::1;5102:5;5057:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;5057:50:4::1;::::0;;5122:38;;;;;;;::::1;::::0;;;;;;;;::::1;942:1:6;4751:416:4::0;:::o;2617:189::-;2684:4;2700:32;2735:19;:17;:19::i;:::-;-1:-1:-1;;;;;2771:28:4;;;;:22;:28;;;;;;;;-1:-1:-1;;2771:28:4;;;;;;;2617:189::o;943:190:7:-;1072:20;1118:8;;;943:190::o;4312:382:4:-;4441:32;4476:19;:17;:19::i;:::-;4527:21;;;;;;-1:-1:-1;;;;;;4527:21:4;4513:10;:35;4505:71;;;;;-1:-1:-1;;;4505:71:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;4612:29;4630:10;4612:17;:29::i;:::-;4651:21;;:36;;-1:-1:-1;;;;;;4651:36:4;;;4312:382::o;5557:564:2:-;5608:4;5624:23;5650:16;:14;:16::i;:::-;5624:42;-1:-1:-1;;;;;;5766:31:2;;5762:74;;5820:5;5813:12;;;;;5762:74;5974:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5974:37:2;-1:-1:-1;;;5974:37:2;;;5932:89;;;;5891:12;;5905:23;;-1:-1:-1;;;;;5932:28:2;;;5974:37;;5932:89;;;;;;5974:37;5932:89;;;;;;;;;;-1:-1:-1;;5932:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5890:131;;;;6039:7;6055:10;6031:36;;;;;-1:-1:-1;;;6031:36:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6095:10;6084:30;;;;;;;;;;;;;;;-1:-1:-1;6084:30:2;;-1:-1:-1;;;;5557:564:2;:::o;8417:186::-;1261:66:3;8556:31:2;8542:55::o;9006:147::-;9133:3;2135:66:3;9120:17:2;9106:41::o;3166:481:4:-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;3251:32:4::1;3286:19;:17;:19::i;:::-;3251:54:::0;-1:-1:-1;;;;;;3323:27:4;::::1;3315:51;;;::::0;;-1:-1:-1;;;3315:51:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3315:51:4;;;;;;;;;;;;;::::1;;3385:24;3397:11;3385;:24::i;:::-;3384:25;3376:54;;;::::0;;-1:-1:-1;;;3376:54:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3376:54:4;;;;;;;;;;;;;::::1;;3461:21;::::0;::::1;::::0;-1:-1:-1;;;;;3461:21:4::1;:37:::0;3440:107:::1;;;::::0;;-1:-1:-1;;;3440:107:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3557:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3557:35:4;::::1;-1:-1:-1::0;;;;;;3557:35:4;;::::1;::::0;::::1;::::0;;;3607:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;942:1:6;3166:481:4::0;:::o;2880:280::-;889:23:6;901:10;889:11;:23::i;:::-;881:51;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;-1:-1:-1;;;881:51:6;;;;;;;;;;;;;;;2943:32:4::1;2978:19;:17;:19::i;:::-;3011:21;::::0;::::1;::::0;2943:54;;-1:-1:-1;;;;;;3011:21:4::1;:37:::0;3007:147:::1;;3064:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3064:36:4::1;::::0;;3119:24:::1;::::0;::::1;::::0;3096:3:::1;::::0;3119:24:::1;942:1:6;2880:280:4:o:0;2384:151:0:-;2445:28;2492:14;2507:20;;;;;;;;;;;;;;;;;2492:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2492:36:0;;;;;;;;;;;;;;;;-1:-1:-1;2492:36:0;;;;;;;;;;;2384:151;-1:-1:-1;;;2384:151:0:o;3972:334:4:-;4047:24;4059:11;4047;:24::i;:::-;4046:25;4038:54;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;-1:-1:-1;;;4038:54:4;;;;;;;;;;;;;;;4102:32;4137:19;:17;:19::i;:::-;-1:-1:-1;;;;;4166:35:4;;:22;:35;;;;;;;;;;;;:42;;-1:-1:-1;;4166:42:4;4204:4;4166:42;;;4264:35;;;;;;;4102:54;;-1:-1:-1;4264:35:4;;;;;;;;;3972:334;;:::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "MAX_UPGRADE_DELAY()": "d38d8d7a", + "PROXY_GOVERNANCE_TAG()": "56f36dbf", + "PROXY_VERSION()": "c5ab8453", + "UPGRADE_DELAY_SLOT()": "20cea94d", + "addImplementation(address,bytes,bool)": "5e3a97e7", + "getUpgradeActivationDelay()": "72a44f07", + "implementation()": "5c60da1b", + "initialize(bytes)": "439fab91", + "isNotFinalized()": "e907fa3c", + "proxyAcceptGovernance()": "6684b1d6", + "proxyCancelNomination()": "f9bcdde4", + "proxyIsGovernor(address)": "b449ea5d", + "proxyNominateNewGovernor(address)": "8757653f", + "proxyRemoveGovernor(address)": "12f16e6d", + "removeImplementation(address,bytes,bool)": "5cef2e86", + "upgradeTo(address,bytes,bool)": "7147855d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"acceptedGovernor\",\"type\":\"address\"}],\"name\":\"LogNewGovernorAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nominatedGovernor\",\"type\":\"address\"}],\"name\":\"LogNominatedGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogNominationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"removedGovernor\",\"type\":\"address\"}],\"name\":\"LogRemovedGovernor\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_GOVERNANCE_TAG\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAcceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCancelNomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"proxyIsGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"proxyNominateNewGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorForRemoval\",\"type\":\"address\"}],\"name\":\"proxyRemoveGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. It is the responsibility of the implementation not to overwrite any storage belonging to the proxy (`ProxyStorage`). In addition, upon upgrade, the new implementation is assumed to be backward compatible with previous implementations with respect to the storage used until that point.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/StarknetProxy.sol\":\"Proxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/ProxyGovernance.sol\":{\"keccak256\":\"0x66c2371736f00304c5d0fd7dfcaf103e107bca54c8c6fe97c8ec53fd7f2eabaa\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3db37caee5de205f66727b5e095cfe51eaec7a2a9ee3c3e0b8a0322cfddaac43\",\"dweb:/ipfs/QmSjTbcNXsWWMvCXCpNtHWkBqQChh8LSpNKJoEQi9oboTg\"]},\"src/ProxyStorage.sol\":{\"keccak256\":\"0x1e75667ccf910adfaa3e6e589a58e7814d1a50e257ec3e8cca853ad84bd69f28\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://45b2503a7b59aeff88f1596d150d2ec03cd6c032ea5801e7385ed9efac02782d\",\"dweb:/ipfs/QmVmqcTmrHAZUMbaKP4ZMiuAfNaCyY5kqbryCo3rA4y35f\"]},\"src/StarknetProxy.sol\":{\"keccak256\":\"0x2bb2d0507e32a2e888c25dd643f4087a03718814fd7c2ca390a2c485f50b7eb9\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://d44d033555d0e5bc926c923917dd6e77664c9b8e89c1e3f7d4e0786e607959f1\",\"dweb:/ipfs/QmSC96zSRZwMnqj9AYXMu2VbWkGhbgAhFGZPNpWVXqGdfR\"]},\"src/StorageSlots.sol\":{\"keccak256\":\"0xf8f590c04aa81b474d56d5ed8fcc5ae387c3fa1a9cfe1c347d1536c187da25d7\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://771deb6f5163f75ab295394fdf9c46943366820ed8c54d40487cf8184d78dfb0\",\"dweb:/ipfs/QmRJCiF8bA2WWYSaDUD4SAuSMaTcX6iozGHP9M2Uui6D3u\"]},\"src/components/Governance.sol\":{\"keccak256\":\"0x514f1fc43753d81ad161ea40e29b676d6d1e8863cdc3c42f34579c206ad0120a\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b7f15635d973071aa069ff8023e52caa01e88f70254f0ce4dc07a337c6a5fb65\",\"dweb:/ipfs/QmTigzrPzger7oahtgYH4LUsaMfYTqyV6hdHrCZGzuyqn3\"]},\"src/components/GovernanceStorage.sol\":{\"keccak256\":\"0x7f168364dab1e83f078ed006a647c3591b2e2761ea46c44e78b2b46aee842ae2\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://54612af81c5787f7fb049dd57959466d9ffefdff832ff98c6e3fc5b6323d4c56\",\"dweb:/ipfs/QmRsjRpkLUbL2AjfQCpE3PgYXiMcnHDSRrKkThWF4H9FFT\"]},\"src/interfaces/MGovernance.sol\":{\"keccak256\":\"0x1ca5c0ee213f697063345d82d515ccb2abb8d4e9384979246b47d9781f41f84c\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://4dcf13fc113e1d8c1a068949553c82042241734e4dbab5ca9e3c0ff39879ff17\",\"dweb:/ipfs/QmXNTXALNH47BLPj6YjUgsZ9Qo3HpKbtmDNsPJCZZ782hV\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.6.12+commit.27d51765" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "upgradeActivationDelay", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "FinalizedImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationUpgraded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "acceptedGovernor", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "LogNewGovernorAccepted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nominatedGovernor", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "LogNominatedGovernor", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "LogNominationCancelled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "removedGovernor", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "LogRemovedGovernor", + "anonymous": false + }, + { "inputs": [], "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PROXY_GOVERNANCE_TAG", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PROXY_VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addImplementation" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getUpgradeActivationDelay", + "outputs": [ + { "internalType": "uint256", "name": "delay", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ] + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isNotFinalized", + "outputs": [ + { "internalType": "bool", "name": "notFinal", "type": "bool" } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "proxyAcceptGovernance" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "proxyCancelNomination" + }, + { + "inputs": [ + { "internalType": "address", "name": "user", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "proxyIsGovernor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newGovernor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "proxyNominateNewGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governorForRemoval", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "proxyRemoveGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "removedImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeImplementation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeTo" + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "cairo-lang/=lib/cairo-lang/src/", + "forge-std/=lib/forge-std/src/", + "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", + "starknet-token/=lib/starknet-token/src/starkware/isd/", + "starkware/isd/=lib/starknet-token/src/starkware/isd/", + "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", + "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/StarknetProxy.sol": "Proxy" }, + "evmVersion": "istanbul", + "libraries": {} + }, + "sources": { + "src/ProxyGovernance.sol": { + "keccak256": "0x66c2371736f00304c5d0fd7dfcaf103e107bca54c8c6fe97c8ec53fd7f2eabaa", + "urls": [ + "bzz-raw://3db37caee5de205f66727b5e095cfe51eaec7a2a9ee3c3e0b8a0322cfddaac43", + "dweb:/ipfs/QmSjTbcNXsWWMvCXCpNtHWkBqQChh8LSpNKJoEQi9oboTg" + ], + "license": "Apache-2.0." + }, + "src/ProxyStorage.sol": { + "keccak256": "0x1e75667ccf910adfaa3e6e589a58e7814d1a50e257ec3e8cca853ad84bd69f28", + "urls": [ + "bzz-raw://45b2503a7b59aeff88f1596d150d2ec03cd6c032ea5801e7385ed9efac02782d", + "dweb:/ipfs/QmVmqcTmrHAZUMbaKP4ZMiuAfNaCyY5kqbryCo3rA4y35f" + ], + "license": "Apache-2.0." + }, + "src/StarknetProxy.sol": { + "keccak256": "0x2bb2d0507e32a2e888c25dd643f4087a03718814fd7c2ca390a2c485f50b7eb9", + "urls": [ + "bzz-raw://d44d033555d0e5bc926c923917dd6e77664c9b8e89c1e3f7d4e0786e607959f1", + "dweb:/ipfs/QmSC96zSRZwMnqj9AYXMu2VbWkGhbgAhFGZPNpWVXqGdfR" + ], + "license": "Apache-2.0." + }, + "src/StorageSlots.sol": { + "keccak256": "0xf8f590c04aa81b474d56d5ed8fcc5ae387c3fa1a9cfe1c347d1536c187da25d7", + "urls": [ + "bzz-raw://771deb6f5163f75ab295394fdf9c46943366820ed8c54d40487cf8184d78dfb0", + "dweb:/ipfs/QmRJCiF8bA2WWYSaDUD4SAuSMaTcX6iozGHP9M2Uui6D3u" + ], + "license": "Apache-2.0." + }, + "src/components/Governance.sol": { + "keccak256": "0x514f1fc43753d81ad161ea40e29b676d6d1e8863cdc3c42f34579c206ad0120a", + "urls": [ + "bzz-raw://b7f15635d973071aa069ff8023e52caa01e88f70254f0ce4dc07a337c6a5fb65", + "dweb:/ipfs/QmTigzrPzger7oahtgYH4LUsaMfYTqyV6hdHrCZGzuyqn3" + ], + "license": "Apache-2.0." + }, + "src/components/GovernanceStorage.sol": { + "keccak256": "0x7f168364dab1e83f078ed006a647c3591b2e2761ea46c44e78b2b46aee842ae2", + "urls": [ + "bzz-raw://54612af81c5787f7fb049dd57959466d9ffefdff832ff98c6e3fc5b6323d4c56", + "dweb:/ipfs/QmRsjRpkLUbL2AjfQCpE3PgYXiMcnHDSRrKkThWF4H9FFT" + ], + "license": "Apache-2.0." + }, + "src/interfaces/MGovernance.sol": { + "keccak256": "0x1ca5c0ee213f697063345d82d515ccb2abb8d4e9384979246b47d9781f41f84c", + "urls": [ + "bzz-raw://4dcf13fc113e1d8c1a068949553c82042241734e4dbab5ca9e3c0ff39879ff17", + "dweb:/ipfs/QmXNTXALNH47BLPj6YjUgsZ9Qo3HpKbtmDNsPJCZZ782hV" + ], + "license": "Apache-2.0." + }, + "src/libraries/Addresses.sol": { + "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", + "urls": [ + "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", + "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" + ], + "license": "Apache-2.0." + } + }, + "version": 1 + }, + "id": 2 +} diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json new file mode 100644 index 0000000..0e0f12f --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json @@ -0,0 +1,1176 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "upgradeActivationDelay", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "ENABLE_WINDOW_DURATION_SLOT", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROXY_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addImplementation", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getEnableWindowDuration", + "inputs": [], + "outputs": [ + { "name": "duration", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUpgradeActivationDelay", + "inputs": [], + "outputs": [ + { "name": "delay", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "_implementation", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isNotFinalized", + "inputs": [], + "outputs": [ + { "name": "notFinal", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeImplementation", + "inputs": [ + { + "name": "removedImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { "name": "role", "type": "bytes32", "internalType": "bytes32" }, + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "FinalizedImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationAdded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationRemoved", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationUpgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "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 + } + ], + "bytecode": { + "object": "0x60a060405234801562000010575f80fd5b506040516200257438038062002574833981016040819052620000339162000550565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b5062000568565b33620000ad8180620000b0565b50565b620000ba6200020f565b1562000152576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff166200014c5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200015d565b6200015d8262000260565b62000167620003a3565b1562000204576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620002005760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840162000143565b5050565b6200020081620003f2565b5f80516020620024f48339815191525f9081525f80516020620025348339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200027a5f80516020620024f4833981519152826200045b565b620002b37ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062002554833981519152620004f9565b620002db5f80516020620025548339815191525f80516020620024f4833981519152620004f9565b620002f55f80516020620024f483398151915280620004f9565b6200032f7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062002554833981519152620004f9565b620003697f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062002554833981519152620004f9565b620000ad7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620024f4833981519152620004f9565b5f80516020620025148339815191525f9081525f80516020620025348339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c2454819062000259565b6200040c5f805160206200251483398151915280620004f9565b620004467f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062002514833981519152620004f9565b620000ad5f8051602062002514833981519152825b5f8281525f8051602062002534833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000200575f8281525f8051602062002534833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620025348339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f6020828403121562000561575f80fd5b5051919050565b608051611f73620005815f395f6108e80152611f735ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122031b27e083c40a69a531bbe8c281d749a1aa1a827c30dc11eb2677c87cb15e81f64736f6c6343000818003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99", + "sourceMap": "2986:11128:7:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:3;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:7::1;4015:22:::0;2455:66:5;4416:28:7;4273:187;3989:49:::1;4048:32;4072:7;2810:66:5::0;5407:31:7;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3102:142:4;3916:10:0;3201:36:4;3916:10:0;;3201::4;:36::i;:::-;3133:111;3102:142::o;3250:1072::-;3373:28;:26;:28::i;:::-;3369:485;;;-1:-1:-1;;;;;5259:31:0;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3628:144:4;;;;-1:-1:-1;;;3628:144:4;;405:2:9;3628:144:4;;;387:21:9;444:2;424:18;;;417:30;483:27;463:18;;;456:55;528:18;;3628:144:4;;;;;;;;;3369:485;;;3803:40;3823:19;3803;:40::i;:::-;3868:26;:24;:26::i;:::-;3864:452;;;-1:-1:-1;;;;;5259:31:0;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4085:151:4;;;;-1:-1:-1;;;4085:151:4;;759:2:9;4085:151:4;;;741:21:9;798:2;778:18;;;771:30;837:34;817:18;;;810:62;-1:-1:-1;;;888:18:9;;;881:32;930:19;;4085:151:4;557:398:9;4085:151:4;3250:1072;;:::o;3864:452::-;4267:38;4285:19;4267:17;:38::i;2790:152::-;-1:-1:-1;;;;;;;;;;;2851:4:4;6680:14:0;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;:24;;2851:4:4;;2874:44;:61;;2867:68;;2790:152;:::o;4614:559::-;4690:63;-1:-1:-1;;;;;;;;;;;4733:19:4;4690:24;:63::i;:::-;4763:57;822:64;-1:-1:-1;;;;;;;;;;;4763:27:4;:57::i;:::-;4830:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4830:27:4;:61::i;:::-;4901:63;-1:-1:-1;;;;;;;;;;;1236:66:4;4901:27;:63::i;:::-;4974:53;1430:66;-1:-1:-1;;;;;;;;;;;4974:27:4;:53::i;:::-;5037:56;2042:66;-1:-1:-1;;;;;;;;;;;5037:27:4;:56::i;:::-;5103:63;2252:66;-1:-1:-1;;;;;;;;;;;5103:27:4;:63::i;2948:148::-;-1:-1:-1;;;;;;;;;;;3007:4:4;6680:14:0;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;:24;;3007:4:4;;3030:42;6595:116:0;4328:280:4;4402:59;-1:-1:-1;;;;;;;;;;;1636:66:4;4402:27;:59::i;:::-;4471;1842:66;-1:-1:-1;;;;;;;;;;;4471:27:4;:59::i;:::-;4540:61;-1:-1:-1;;;;;;;;;;;4581:19:4;9592:227:0;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:0;;;;;;;;-1:-1:-1;;;;;5259:31:0;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:0;;;;;;;;-1:-1:-1;;;;;9705:31:0;;;;;;;;;;:38;;-1:-1:-1;;9705:38:0;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:9:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:9;;14:184;-1:-1:-1;14:184:9:o;557:398::-;2986:11128:7;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122031b27e083c40a69a531bbe8c281d749a1aa1a827c30dc11eb2677c87cb15e81f64736f6c63430008180033", + "sourceMap": "2986:11128:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:7;;216:2:9;7342:42:7;;;198:21:9;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:7;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:7;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:7;;7685:66;;;;-1:-1:-1;;;7685:66:7;;577:2:9;7685:66:7;;;559:21:9;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:9;;;628:52;697:18;;7685:66:7;375:346:9;7685:66:7;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:3;;;;;;;;;;-1:-1:-1;3988:116:3;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:3;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:3;;;;;:::i;:::-;;:::i;2402:119:5:-;;;;;;;;;;-1:-1:-1;2402:119:5;2455:66;2402:119;;;;;1241:25:9;;;1229:2;1214:18;2402:119:5;;;;;;;;4385:137:3;;;;;;;;;;-1:-1:-1;4385:137:3;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:3;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:3;;;;;:::i;:::-;;:::i;6611:122:7:-;;;;;;;;;;-1:-1:-1;6611:122:7;;;;;:::i;:::-;;:::i;2748:128:5:-;;;;;;;;;;-1:-1:-1;2748:128:5;2810:66;2748:128;;2064:135:3;;;;;;;;;;-1:-1:-1;2064:135:3;;;;;:::i;:::-;;:::i;:::-;;;2467:14:9;;2460:22;2442:41;;2430:2;2415:18;2064:135:3;2302:187:9;5572:195:7;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:7;5572:195;;-1:-1:-1;;;;;2658:32:9;;;2640:51;;2628:2;2613:18;5572:195:7;2494:203:9;10655:619:7;;;;;;;;;;-1:-1:-1;10655:619:7;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:7;;;;;:::i;:::-;;:::i;3732:122:3:-;;;;;;;;;;-1:-1:-1;3732:122:3;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:3;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:3;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:3;;;;;:::i;:::-;;:::i;12173:1939:7:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:3:-;;;;;;;;;;-1:-1:-1;2777:139:3;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:3;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:3;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:3;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:3;;;;;:::i;:::-;;:::i;3799:46:7:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:7;;;;;;;;;;;;:::i;2349:143:3:-;;;;;;;;;;-1:-1:-1;2349:143:3;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:3;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:3;;;;;:::i;:::-;;:::i;3740:52:7:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:3;;;;;;;;;;-1:-1:-1;4936:121:3;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:3;;;;;:::i;:::-;;:::i;5050:198:7:-;;;;;;;;;;-1:-1:-1;2810:66:5;5221:11:7;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:5;9196:11:7;9238:14;9016:244;;5184:125:3;;;;;;;;;;-1:-1:-1;5184:125:3;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:3;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:3;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:3;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2042:66:4;4089:7:3;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1842:66:4;3967:7:3;3927:23;:48::i;3356:121::-;3422:48;1026:66:4;3462:7:3;3422:23;:48::i;4385:137::-;4447:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4466:49:::1;1026:66:4;4507:7:3::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:3;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:3;;4833:2:9;5474:42:3;;;4815:21:9;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:3;4631:356:9;5409:118:3;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1430:66:4;3711:7:3;3677:23;:42::i;6611:122:7:-;6694:32;;-1:-1:-1;;;6694:32:7;;5194:2:9;6694:32:7;;;5176:21:9;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:9;;;5245:52;5314:18;;6694:32:7;4992:346:9;2064:135:3;2125:4;2148:44;822:64:4;2184:7:3;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:3:o;10655:619:7:-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;10821:22:7::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:7;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:7;;6593:2:9;11039:58:7::1;::::0;::::1;6575:21:9::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:7::1;6391:351:9::0;11039:58:7::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:7::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:7;::::1;1072:20:8::0;9908:63:7::1;;;::::0;-1:-1:-1;;;9908:63:7;;7279:2:9;9908:63:7::1;::::0;::::1;7261:21:9::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:9;;;7330:50;7397:18;;9908:63:7::1;7077:344:9::0;9908:63:7::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:5::0;5221:11:7;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:7::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:3:-;3799:48;1636:66:4;3839:7:3;3799:23;:48::i;3061:143::-;3126:4;3149:48;2252:66:4;3189:7:3;3149:21;:48::i;2498:128::-;2556:4;2579:40;1430:66:4;2611:7:3;2579:21;:40::i;4110:126::-;4179:50;2252:66:4;4221:7:3;4179:23;:50::i;12173:1939:7:-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;2134:66:5;9196:11:7;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:7;;7890:2:9;6773:53:7::1;::::0;::::1;7872:21:9::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:7::1;7688:348:9::0;6773:53:7::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:7;;8243:2:9;7058:53:7::2;::::0;::::2;8225:21:9::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:9;;;8294:45;8356:18;;7058:53:7::2;8041:339:9::0;7058:53:7::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:7::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:7;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:7;;6593:2:9;12581:58:7::3;::::0;::::3;6575:21:9::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:7::3;6391:351:9::0;12581:58:7::3;-1:-1:-1::0;;;;;12657:28:7;::::3;1072:20:8::0;12649:63:7::3;;;::::0;-1:-1:-1;;;12649:63:7;;7279:2:9;12649:63:7::3;::::0;::::3;7261:21:9::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:9;;;7330:50;7397:18;;12649:63:7::3;7077:344:9::0;12649:63:7::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:7::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:7;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:7::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:7;;8587:2:9;12813:139:7::3;::::0;::::3;8569:21:9::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:7::3;8385:347:9::0;12813:139:7::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:7;;8939:2:9;12962:72:7::3;::::0;::::3;8921:21:9::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:9;;;8990:52;9059:18;;12962:72:7::3;8737:346:9::0;12962:72:7::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:7;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:7::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:7;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:7::3;-1:-1:-1::0;;;;;;13246:54:7;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:7::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:7::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:7::3;-1:-1:-1::0;;;13584:37:7::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:7;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:7;;-1:-1:-1;13516:115:7;-1:-1:-1;13516:115:7;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:7;;9831:2:9;13641:45:7::3;::::0;::::3;9813:21:9::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:7::3;9629:349:9::0;13641:45:7::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:7;;10435:2:9;13696:69:7::3;::::0;::::3;10417:21:9::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:7::3;10233:349:9::0;13696:69:7::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:7::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:5;9447:17:7;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:7;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:5;4921:11:7;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:3:-;2840:4;2863:46;1842:66:4;2901:7:3;2863:21;:46::i;4792:138::-;4855:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4874:49:::1;1636:66:4;4915:7:3::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1026:66:4;2328:7:3;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:3;3552:23;:50::i;2922:133::-;2982:4;3005:43;2042:66:4;3040:7:3;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:3;2437:21;:48::i;3232:118::-;3297:46;822:64:4;3335:7:3;3297:23;:46::i;2632:139::-;2695:4;2718:46;1636:66:4;2756:7:3;2718:21;:46::i;4936:121::-;5001:49;1842:66:4;5042:7:3;5001:24;:49::i;4262:117::-;4325:47;822:64:4;4364:7:3;4325:24;:47::i;5184:125::-;5251:51;2252:66:4;5294:7:3;5251:24;:51::i;4528:142::-;4593:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:3;4612:24:::1;:51::i;5063:115::-:0;5125:46;2042:66:4;5163:7:3;5125:24;:46::i;4676:110::-;4736:43;1430:66:4;4771:7:3;4736:24;:43::i;6990:152:0:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:0;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:0;;10789:2:9;8150:117:0;;;10771:21:9;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:9;;;10911:45;10973:19;;8150:117:0;10587:411:9;8150:117:0;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:0;;;;;;;;-1:-1:-1;;;;;5259:31:0;;;;;;;;;;;;;;;5143:154::o;1160:189:2:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:2;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:2;;;1700:36;:55::i;5904:564:7:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:7;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:7;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:7;-1:-1:-1;;;6321:37:7;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:7;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:7;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:0:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:0;;;;;;;;-1:-1:-1;;;;;9705:31:0;;;;;;;;;;:38;;-1:-1:-1;;9705:38:0;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:0;;;;;;;;-1:-1:-1;;;;;10091:31:0;;;;;;;;;;:39;;-1:-1:-1;;10091:39:0;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:1:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:1;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:1:o;5941:484:0:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:0;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:0;;;;;;;;;;-1:-1:-1;;;6059:349:0;;;;;;;:::i;2248:441:6:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:6;;2348:47;;-1:-1:-1;;;2405:6:6;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:6;;;;;;;;;-1:-1:-1;;;2430:6:6;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:6;;;;;;;;-1:-1:-1;2460:9:6;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:6;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:6;;;;;;;;-1:-1:-1;2575:1:6;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:6;;2596:55;;;;-1:-1:-1;;;2596:55:6;;12894:2:9;2596:55:6;;;12876:21:9;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:6;12692:356:9;2596:55:6;2675:6;2248:441;-1:-1:-1;;;2248:441:6:o;726:173:9:-;794:20;;-1:-1:-1;;;;;843:31:9;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:9;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:9;-1:-1:-1;;;;1888:409:9:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:9;-1:-1:-1;;3366:2:9;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:9;;-1:-1:-1;;2825:612:9:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:9;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:9;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:9:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:9;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:9;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:9;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:9;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:9;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:9;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:9:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:9:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:9;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:9:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:9;;12551:136::o", + "linkReferences": {}, + "immutableReferences": { "702": [{ "start": 2280, "length": 32 }] } + }, + "methodIdentifiers": { + "ENABLE_WINDOW_DURATION_SLOT()": "52b1e35e", + "MAX_UPGRADE_DELAY()": "d38d8d7a", + "PROXY_VERSION()": "c5ab8453", + "UPGRADE_DELAY_SLOT()": "20cea94d", + "addImplementation(address,bytes,bool)": "5e3a97e7", + "getEnableWindowDuration()": "e02904c6", + "getUpgradeActivationDelay()": "72a44f07", + "implementation()": "5c60da1b", + "initialize(bytes)": "439fab91", + "isAppGovernor(address)": "5a5d1bb9", + "isAppRoleAdmin(address)": "8e5224ff", + "isGovernanceAdmin(address)": "cb1cccce", + "isNotFinalized()": "e907fa3c", + "isOperator(address)": "6d70f7ae", + "isSecurityAdmin(address)": "d08fb6cb", + "isSecurityAgent(address)": "757bd9ab", + "isTokenAdmin(address)": "a2bdde3d", + "isUpgradeGovernor(address)": "6c04d9d5", + "registerAppGovernor(address)": "cdd1f70d", + "registerAppRoleAdmin(address)": "17896383", + "registerGovernanceAdmin(address)": "9463629a", + "registerOperator(address)": "3682a450", + "registerSecurityAdmin(address)": "62a14376", + "registerSecurityAgent(address)": "0e770f23", + "registerTokenAdmin(address)": "0b3a2d21", + "registerUpgradeGovernor(address)": "6fc97cbf", + "removeImplementation(address,bytes,bool)": "5cef2e86", + "renounceRole(bytes32,address)": "36568abe", + "revokeAppGovernor(address)": "deec9c5a", + "revokeAppRoleAdmin(address)": "2f951985", + "revokeGovernanceAdmin(address)": "ee0e6807", + "revokeOperator(address)": "fad8b32a", + "revokeSecurityAdmin(address)": "8101b64c", + "revokeSecurityAgent(address)": "d9fa7091", + "revokeTokenAdmin(address)": "fa0f73ba", + "revokeUpgradeGovernor(address)": "ed9ef16a", + "upgradeTo(address,bytes,bool)": "7147855d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0xd71451e1ded6055f3abd5ce64ef273ff11dc03169926e5a090a50d9154aa96b3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3309935f4a5eb00b2aa9056aefc665e14688e428962222f599874f4358ee39d9\",\"dweb:/ipfs/QmU1je1hrK3YpamoX4Rya24s8k7q5Ko1bH9LCsaqFo7Rx8\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "upgradeActivationDelay", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "FinalizedImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationUpgraded", + "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": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ENABLE_WINDOW_DURATION_SLOT", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PROXY_VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addImplementation" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getEnableWindowDuration", + "outputs": [ + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getUpgradeActivationDelay", + "outputs": [ + { "internalType": "uint256", "name": "delay", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ] + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isAppGovernor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isAppRoleAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isGovernanceAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isNotFinalized", + "outputs": [ + { "internalType": "bool", "name": "notFinal", "type": "bool" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isOperator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isSecurityAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isSecurityAgent", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isTokenAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isUpgradeGovernor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerAppGovernor" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerAppRoleAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerGovernanceAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerOperator" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSecurityAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSecurityAgent" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerTokenAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerUpgradeGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "removedImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeImplementation" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceRole" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeAppGovernor" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeAppRoleAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeGovernanceAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeOperator" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeSecurityAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeSecurityAgent" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeTokenAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeUpgradeGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeTo" + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "cairo-lang/=lib/cairo-lang/src/", + "forge-std/=lib/forge-std/src/", + "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", + "starknet-token/=lib/starknet-token/src/starkware/isd/", + "starkware/isd/=lib/starknet-token/src/starkware/isd/", + "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", + "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Proxy_5_0_0.sol": "Proxy" }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "src/5_0_0/AccessControl.sol": { + "keccak256": "0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b", + "urls": [ + "bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333", + "dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt" + ], + "license": "MIT" + }, + "src/5_0_0/NamedStorage.sol": { + "keccak256": "0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3", + "urls": [ + "bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917", + "dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/ProxyStorage.sol": { + "keccak256": "0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03", + "urls": [ + "bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc", + "dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/Roles.sol": { + "keccak256": "0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1", + "urls": [ + "bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06", + "dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/RolesLib.sol": { + "keccak256": "0xd71451e1ded6055f3abd5ce64ef273ff11dc03169926e5a090a50d9154aa96b3", + "urls": [ + "bzz-raw://3309935f4a5eb00b2aa9056aefc665e14688e428962222f599874f4358ee39d9", + "dweb:/ipfs/QmU1je1hrK3YpamoX4Rya24s8k7q5Ko1bH9LCsaqFo7Rx8" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/StorageSlots.sol": { + "keccak256": "0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272", + "urls": [ + "bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c", + "dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/Strings.sol": { + "keccak256": "0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2", + "urls": [ + "bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7", + "dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f" + ], + "license": "MIT" + }, + "src/Proxy_5_0_0.sol": { + "keccak256": "0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e", + "urls": [ + "bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155", + "dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW" + ], + "license": "Apache-2.0." + }, + "src/libraries/Addresses.sol": { + "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", + "urls": [ + "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", + "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" + ], + "license": "Apache-2.0." + } + }, + "version": 1 + }, + "id": 7 +} diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 235fe9a..32f692d 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -30,6 +30,8 @@ pub enum Error { const UNSAFE_PROXY: &str = include_str!("artifacts/UnsafeProxy.json"); const SAFE_PROXY: &str = include_str!("artifacts/Proxy.json"); +const SAFE_PROXY_3_0_2: &str = include_str!("artifacts/Proxy_3_0_2.json"); +const SAFE_PROXY_5_0_0: &str = include_str!("artifacts/Proxy_5_0_0.json"); /// Deploys new unsafe proxy contract: /// - Implementation can be set only once at initialization @@ -47,6 +49,17 @@ pub async fn deploy_contract_behind_unsafe_proxy( Ok(proxy_contract) } +/// Here we have three deploy behind safe proxy functions : +/// ------------------------------------------------------- +/// +/// - `deploy_contract_behind_safe_proxy` : +/// This function will deploy the contract behind the proxy that is used by starknet in deployment of the proxies. +/// - `deploy_contract_behind_safe_proxy_3_0_2` : +/// This function will deploy the contract behind the proxy that is being used by chains such as paradex and kakarot. +/// - `deploy_contract_behind_safe_proxy_5_0_0` : +/// This function will deploy the contract behind the latest versio nof the starknet proxy currently used in the token bridge : `0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb` +/// --------------------------------------------------------- + pub async fn deploy_contract_behind_safe_proxy( client: Arc, contract_path: &str, @@ -73,3 +86,57 @@ pub async fn deploy_contract_behind_safe_proxy( Ok((proxy_contract, contract)) } + +pub async fn deploy_contract_behind_safe_proxy_3_0_2( + client: Arc, + contract_path: &str, + constructor_args: T, +) -> Result< + ( + ContractInstance, LocalWalletSignerMiddleware>, + ContractInstance, LocalWalletSignerMiddleware>, + ), + Error, +> { + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; + + log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); + + let proxy_contract = + deploy_contract(client.clone(), SAFE_PROXY_3_0_2, Token::Uint(U256::from(0))).await?; + + log::debug!( + "ℹ️ Proxy for contract [{:?}] deployed : {:?}", + contract.address().clone(), + proxy_contract.address() + ); + + Ok((proxy_contract, contract)) +} + +pub async fn deploy_contract_behind_safe_proxy_5_0_0( + client: Arc, + contract_path: &str, + constructor_args: T, +) -> Result< + ( + ContractInstance, LocalWalletSignerMiddleware>, + ContractInstance, LocalWalletSignerMiddleware>, + ), + Error, +> { + let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; + + log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); + + let proxy_contract = + deploy_contract(client.clone(), SAFE_PROXY_5_0_0, Token::Uint(U256::from(0))).await?; + + log::debug!( + "ℹ️ Proxy for contract [{:?}] deployed : {:?}", + contract.address().clone(), + proxy_contract.address() + ); + + Ok((proxy_contract, contract)) +} diff --git a/src/StarknetProxy_3_0_2.sol b/src/StarknetProxy_3_0_2.sol new file mode 100644 index 0000000..9be5351 --- /dev/null +++ b/src/StarknetProxy_3_0_2.sol @@ -0,0 +1,330 @@ +/* + Copyright 2019-2024 StarkWare Industries Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"). + You may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.starkware.co/open-source-license/ + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions + and limitations under the License. +*/ +// SPDX-License-Identifier: Apache-2.0. +pragma solidity ^0.6.12; + +import "./ProxyGovernance.sol"; +import "./ProxyStorage.sol"; +import "./StorageSlots.sol"; +import "../libraries/Addresses.sol"; + +/** + The Proxy contract implements delegation of calls to other contracts (`implementations`), with + proper forwarding of return values and revert reasons. This pattern allows retaining the contract + storage while replacing implementation code. + + The following operations are supported by the proxy contract: + + - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. + - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). + - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. + + The only entity allowed to perform the above operations is the proxy governor + (see :sol:mod:`ProxyGovernance`). + + Every implementation is required to have an `initialize` function that replaces the constructor + of a normal contract. Furthermore, the only parameter of this function is an array of bytes + (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the + implementation to ensure that this function cannot be run more than once if so desired. + + When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also + announced, allowing users of the contract to analyze the full effect of an upgrade to the new + implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is + identical to the announced `data` is the upgrade performed by pointing the proxy to the new + implementation and calling its `initialize` function with this `data`. + + It is the responsibility of the implementation not to overwrite any storage belonging to the + proxy (`ProxyStorage`). In addition, upon upgrade, the new implementation is assumed to be + backward compatible with previous implementations with respect to the storage used until that + point. +*/ +contract Proxy is ProxyStorage, ProxyGovernance, StorageSlots { + // Emitted when the active implementation is replaced. + event ImplementationUpgraded(address indexed implementation, bytes initializer); + + // Emitted when an implementation is submitted as an upgrade candidate and a time lock + // is activated. + event ImplementationAdded(address indexed implementation, bytes initializer, bool finalize); + + // Emitted when an implementation is removed from the list of upgrade candidates. + event ImplementationRemoved(address indexed implementation, bytes initializer, bool finalize); + + // Emitted when the implementation is finalized. + event FinalizedImplementation(address indexed implementation); + + using Addresses for address; + + uint256 public constant MAX_UPGRADE_DELAY = 180 days; + + string public constant PROXY_VERSION = "3.0.2"; + + constructor(uint256 upgradeActivationDelay) public { + initGovernance(); + setUpgradeActivationDelay(upgradeActivationDelay); + } + + /* + Stores the upgrade activation delay (in seconds) in the appropriate slot. + this function does not validate the delay value, as it's checked in the getter. + */ + function setUpgradeActivationDelay(uint256 delayInSeconds) private { + bytes32 slot = UPGRADE_DELAY_SLOT; + assembly { + sstore(slot, delayInSeconds) + } + } + + /* + Reads the upgrade activation delay (in seconds) at the appropriate slot. + The returned value is capped at MAX_UPGRADE_DELAY. + It is safer to do the capping in the getter because an upgrade + flow might modify this value without going through the setter function. + */ + function getUpgradeActivationDelay() public view returns (uint256 delay) { + bytes32 slot = UPGRADE_DELAY_SLOT; + assembly { + delay := sload(slot) + } + + delay = (delay < MAX_UPGRADE_DELAY) ? delay : MAX_UPGRADE_DELAY; + return delay; + } + + /* + Returns the address of the current implementation. + */ + // NOLINTNEXTLINE external-function. + function implementation() public view returns (address _implementation) { + bytes32 slot = IMPLEMENTATION_SLOT; + assembly { + _implementation := sload(slot) + } + } + + /* + Returns true if the implementation is frozen. + If the implementation was not assigned yet, returns false. + */ + function implementationIsFrozen() private returns (bool) { + address _implementation = implementation(); + + // We can't call low level implementation before it's assigned. (i.e. ZERO). + if (_implementation == address(0x0)) { + return false; + } + + // NOLINTNEXTLINE: low-level-calls. + (bool success, bytes memory returndata) = _implementation.delegatecall( + abi.encodeWithSignature("isFrozen()") + ); + require(success, string(returndata)); + return abi.decode(returndata, (bool)); + } + + /* + This method blocks delegation to initialize(). + Only upgradeTo should be able to delegate call to initialize(). + */ + function initialize( + bytes calldata /*data*/ + ) external pure { + revert("CANNOT_CALL_INITIALIZE"); + } + + modifier notFinalized() { + require(isNotFinalized(), "IMPLEMENTATION_FINALIZED"); + _; + } + + /* + Forbids calling the function if the implementation is frozen. + This modifier relies on the lower level (logical contract) implementation of isFrozen(). + */ + modifier notFrozen() { + require(!implementationIsFrozen(), "STATE_IS_FROZEN"); + _; + } + + /* + This entry point serves only transactions with empty calldata. (i.e. pure value transfer tx). + We don't expect to receive such, thus block them. + */ + receive() external payable { + revert("CONTRACT_NOT_EXPECTED_TO_RECEIVE"); + } + + /* + Contract's default function. Delegates execution to the implementation contract. + It returns back to the external caller whatever the implementation delegated code returns. + */ + fallback() external payable { + address _implementation = implementation(); + require(_implementation != address(0x0), "MISSING_IMPLEMENTATION"); + + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 for now, as we don't know the out size yet. + let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + switch result + // delegatecall returns 0 on error. + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } + + /* + Sets the implementation address of the proxy. + */ + function setImplementation(address newImplementation) private { + bytes32 slot = IMPLEMENTATION_SLOT; + assembly { + sstore(slot, newImplementation) + } + } + + /* + Returns true if the contract is not in the finalized state. + */ + function isNotFinalized() public view returns (bool notFinal) { + bytes32 slot = FINALIZED_STATE_SLOT; + uint256 slotValue; + assembly { + slotValue := sload(slot) + } + notFinal = (slotValue == 0); + } + + /* + Marks the current implementation as finalized. + */ + function setFinalizedFlag() private { + bytes32 slot = FINALIZED_STATE_SLOT; + assembly { + sstore(slot, 0x1) + } + } + + /* + Introduce an implementation and its initialization vector, + and start the time-lock before it can be upgraded to. + addImplementation is not blocked when frozen or finalized. + (upgradeTo API is blocked when finalized or frozen). + */ + function addImplementation( + address newImplementation, + bytes calldata data, + bool finalize + ) external onlyGovernance { + require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT"); + + bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize)); + + uint256 activationTime = block.timestamp + getUpgradeActivationDelay(); + + enabledTime[implVectorHash] = activationTime; + emit ImplementationAdded(newImplementation, data, finalize); + } + + /* + Removes a candidate implementation. + Note that it is possible to remove the current implementation. Doing so doesn't affect the + current implementation, but rather revokes it as a future candidate. + */ + function removeImplementation( + address removedImplementation, + bytes calldata data, + bool finalize + ) external onlyGovernance { + bytes32 implVectorHash = keccak256(abi.encode(removedImplementation, data, finalize)); + + // If we have initializer, we set the hash of it. + uint256 activationTime = enabledTime[implVectorHash]; + require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION"); + delete enabledTime[implVectorHash]; + emit ImplementationRemoved(removedImplementation, data, finalize); + } + + /* + Upgrades the proxy to a new implementation, with its initialization. + to upgrade successfully, implementation must have been added time-lock agreeably + before, and the init vector must be identical ot the one submitted before. + + Upon assignment of new implementation address, + its initialize will be called with the initializing vector (even if empty). + Therefore, the implementation MUST must have such a method. + + Note - Initialization data is committed to in advance, therefore it must remain valid + until the actual contract upgrade takes place. + + Care should be taken regarding initialization data and flow when planning the contract upgrade. + + When planning contract upgrade, special care is also needed with regard to governance + (See comments in Governance.sol). + */ + // NOLINTNEXTLINE: reentrancy-events timestamp. + function upgradeTo( + address newImplementation, + bytes calldata data, + bool finalize + ) external payable onlyGovernance notFinalized notFrozen { + bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize)); + uint256 activationTime = enabledTime[implVectorHash]; + require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION"); + require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT"); + + // On the first time an implementation is set - time-lock should not be enforced. + require( + activationTime <= block.timestamp || implementation() == address(0x0), + "UPGRADE_NOT_ENABLED_YET" + ); + + setImplementation(newImplementation); + + // NOLINTNEXTLINE: low-level-calls controlled-delegatecall. + (bool success, bytes memory returndata) = newImplementation.delegatecall( + abi.encodeWithSelector(this.initialize.selector, data) + ); + require(success, string(returndata)); + + // Verify that the new implementation is not frozen post initialization. + // NOLINTNEXTLINE: low-level-calls controlled-delegatecall. + (success, returndata) = newImplementation.delegatecall( + abi.encodeWithSignature("isFrozen()") + ); + require(success, "CALL_TO_ISFROZEN_REVERTED"); + require(!abi.decode(returndata, (bool)), "NEW_IMPLEMENTATION_FROZEN"); + + emit ImplementationUpgraded(newImplementation, data); + + if (finalize) { + setFinalizedFlag(); + emit FinalizedImplementation(newImplementation); + } + } +} \ No newline at end of file diff --git a/src/StarknetValidity.sol b/src/StarknetValidity.sol new file mode 100644 index 0000000..c66ba03 --- /dev/null +++ b/src/StarknetValidity.sol @@ -0,0 +1,366 @@ +/* + Copyright 2019-2024 StarkWare Industries Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"). + You may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.starkware.co/open-source-license/ + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions + and limitations under the License. +*/ +// SPDX-License-Identifier: Apache-2.0. +pragma solidity ^0.8.24; + +import "starknet-cc/Output.sol"; +import "starknet-cc/StarknetGovernance.sol"; +import "starknet-cc/StarknetMessaging.sol"; +import "starknet-cc/StarknetOperator.sol"; +import "starknet-cc/StarknetState.sol"; +import "starkware/solidity/components/GovernedFinalizable.sol"; +import "starkware/solidity/components/OnchainDataFactTreeEncoder.sol"; +import "starkware/solidity/interfaces/ContractInitializer.sol"; +import "starkware/solidity/interfaces/Identity.sol"; +import "starkware/solidity/interfaces/IFactRegistry.sol"; +import "starkware/solidity/interfaces/ProxySupport.sol"; +import "starkware/solidity/libraries/NamedStorage8.sol"; + +contract Starknet is +Identity, +StarknetMessaging, +StarknetGovernance, +GovernedFinalizable, +StarknetOperator, +ContractInitializer, +ProxySupport +{ + using StarknetState for StarknetState.State; + + // Indicates a change of the Starknet config hash. + event ConfigHashChanged( + address indexed changedBy, + uint256 oldConfigHash, + uint256 newConfigHash + ); + + // Logs the new state following a state update. + event LogStateUpdate(uint256 globalRoot, int256 blockNumber, uint256 blockHash); + + // Logs a stateTransitionFact that was used to update the state. + event LogStateTransitionFact(bytes32 stateTransitionFact); + + // Indicates a change of the Starknet OS program hash. + event ProgramHashChanged( + address indexed changedBy, + uint256 oldProgramHash, + uint256 newProgramHash + ); + + // Random storage slot tags. + string internal constant PROGRAM_HASH_TAG = "STARKNET_1.0_INIT_PROGRAM_HASH_UINT"; + string internal constant VERIFIER_ADDRESS_TAG = "STARKNET_1.0_INIT_VERIFIER_ADDRESS"; + string internal constant STATE_STRUCT_TAG = "STARKNET_1.0_INIT_STARKNET_STATE_STRUCT"; + + // The hash of the StarkNet config. + string internal constant CONFIG_HASH_TAG = "STARKNET_1.0_STARKNET_CONFIG_HASH"; + + // EIP-4844 constants. + address internal constant POINT_EVALUATION_PRECOMPILE_ADDRESS = address(0x0A); + // The precompile expected output: + // Web3.keccak(FIELD_ELEMENTS_PER_BLOB.to_bytes(32, "big") + BLS_PRIME.to_bytes(32, "big")). + bytes32 internal constant POINT_EVALUATION_PRECOMPILE_OUTPUT = + 0xb2157d3a40131b14c4c675335465dffde802f0ce5218ad012284d7f275d1b37c; + uint256 internal constant PROOF_BYTES_LENGTH = 48; + bytes1 internal constant VERSIONED_HASH_VERSION_KZG = bytes1(0x01); + + function setProgramHash(uint256 newProgramHash) external notFinalized onlyGovernance { + emit ProgramHashChanged(msg.sender, programHash(), newProgramHash); + programHash(newProgramHash); + } + + function setConfigHash(uint256 newConfigHash) external notFinalized onlyGovernance { + emit ConfigHashChanged(msg.sender, configHash(), newConfigHash); + configHash(newConfigHash); + } + + function setMessageCancellationDelay(uint256 delayInSeconds) + external + notFinalized + onlyGovernance + { + messageCancellationDelay(delayInSeconds); + } + + // State variable "programHash" read-access function. + function programHash() public view returns (uint256) { + return NamedStorage.getUintValue(PROGRAM_HASH_TAG); + } + + // State variable "programHash" write-access function. + function programHash(uint256 value) internal { + NamedStorage.setUintValue(PROGRAM_HASH_TAG, value); + } + + // State variable "verifier" access function. + function verifier() internal view returns (address) { + return NamedStorage.getAddressValue(VERIFIER_ADDRESS_TAG); + } + + // State variable "configHash" write-access function. + function configHash(uint256 value) internal { + NamedStorage.setUintValue(CONFIG_HASH_TAG, value); + } + + // State variable "configHash" read-access function. + function configHash() public view returns (uint256) { + return NamedStorage.getUintValue(CONFIG_HASH_TAG); + } + + function setVerifierAddress(address value) internal { + NamedStorage.setAddressValueOnce(VERIFIER_ADDRESS_TAG, value); + } + + // State variable "state" access function. + function state() internal pure returns (StarknetState.State storage stateStruct) { + bytes32 location = keccak256(abi.encodePacked(STATE_STRUCT_TAG)); + assembly { + stateStruct.slot := location + } + } + + function isInitialized() internal view override returns (bool) { + return programHash() != 0; + } + + function numOfSubContracts() internal pure override returns (uint256) { + return 0; + } + + function validateInitData(bytes calldata data) internal view override { + require(data.length == 6 * 32, "ILLEGAL_INIT_DATA_SIZE"); + uint256 programHash_ = abi.decode(data[:32], (uint256)); + require(programHash_ != 0, "BAD_INITIALIZATION"); + } + + function processSubContractAddresses(bytes calldata subContractAddresses) internal override {} + + function initializeContractState(bytes calldata data) internal override { + ( + uint256 programHash_, + address verifier_, + uint256 configHash_, + StarknetState.State memory initialState + ) = abi.decode(data, (uint256, address, uint256, StarknetState.State)); + + programHash(programHash_); + setVerifierAddress(verifier_); + state().copy(initialState); + configHash(configHash_); + messageCancellationDelay(5 days); + } + + /** + Verifies p(z) = y given z, y, a commitment to p in the kzgSegment, and a KZG proof. + The verification is done by calling Ethereum's point evaluation precompile. + */ + function verifyKzgProof(uint256[] calldata kzgSegment, bytes calldata kzgProof) internal { + require(kzgSegment.length == StarknetOutput.KZG_SEGMENT_SIZE, "INVALID_KZG_SEGMENT_SIZE"); + require(kzgProof.length == PROOF_BYTES_LENGTH, "INVALID_KZG_PROOF_SIZE"); + + bytes32 blobHash = blobhash( + // blobIndex= + 0 + ); + require(blobHash[0] == VERSIONED_HASH_VERSION_KZG, "UNEXPECTED_BLOB_HASH_VERSION"); + + bytes memory kzgCommitment; + bytes32 y; + { + uint256 kzgCommitmentLow = kzgSegment[0]; + uint256 kzgCommitmentHigh = kzgSegment[1]; + uint256 yLow = kzgSegment[3]; + uint256 yHigh = kzgSegment[4]; + + require(kzgCommitmentLow <= type(uint192).max, "INVALID_KZG_COMMITMENT"); + require(kzgCommitmentHigh <= type(uint192).max, "INVALID_KZG_COMMITMENT"); + require(yLow <= type(uint128).max, "INVALID_Y_VALUE"); + require(yHigh <= type(uint128).max, "INVALID_Y_VALUE"); + + kzgCommitment = abi.encodePacked(uint192(kzgCommitmentHigh), uint192(kzgCommitmentLow)); + y = bytes32((yHigh << 128) + yLow); + } + bytes32 z = bytes32(kzgSegment[2]); + + (bool ok, bytes memory precompile_output) = POINT_EVALUATION_PRECOMPILE_ADDRESS.staticcall( + abi.encodePacked(blobHash, z, y, kzgCommitment, kzgProof) + ); + + require(ok, "POINT_EVALUATION_PRECOMPILE_CALL_FAILED"); + require( + keccak256(precompile_output) == POINT_EVALUATION_PRECOMPILE_OUTPUT, + "UNEXPECTED_POINT_EVALUATION_PRECOMPILE_OUTPUT" + ); + } + + /** + Performs the actual state update of Starknet, based on a proof of the Starknet OS that the + state transition is valid. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + stateTransitionFact - An encoding of the 'programOutput' (including on-chain data, if + available). + */ + function updateStateInternal(uint256[] calldata programOutput, bytes32 stateTransitionFact) + internal + { + // Validate config hash. + require( + programOutput[StarknetOutput.CONFIG_HASH_OFFSET] == configHash(), + "INVALID_CONFIG_HASH" + ); + + bytes32 sharpFact = keccak256(abi.encode(programHash(), stateTransitionFact)); + require(IFactRegistry(verifier()).isValid(sharpFact), "NO_STATE_TRANSITION_PROOF"); + emit LogStateTransitionFact(stateTransitionFact); + + // Perform state update. + state().update(programOutput); + + // Process the messages after updating the state. + // This is safer, as there is a call to transfer the fees during + // the processing of the L1 -> L2 messages. + + // Process L2 -> L1 messages. + uint256 outputOffset = StarknetOutput.messageSegmentOffset( + programOutput[StarknetOutput.USE_KZG_DA_OFFSET] + ); + outputOffset += StarknetOutput.processMessages( + // isL2ToL1= + true, + programOutput[outputOffset:], + l2ToL1Messages() + ); + + // Process L1 -> L2 messages. + outputOffset += StarknetOutput.processMessages( + // isL2ToL1= + false, + programOutput[outputOffset:], + l1ToL2Messages() + ); + require(outputOffset == programOutput.length, "STARKNET_OUTPUT_TOO_LONG"); + // Note that processing L1 -> L2 messages does an external call, and it shouldn't be + // followed by storage changes. + + StarknetState.State storage state_ = state(); + emit LogStateUpdate(state_.globalRoot, state_.blockNumber, state_.blockHash); + } + + /** + Returns a string that identifies the contract. + */ + function identify() external pure override returns (string memory) { + return "StarkWare_Starknet_2024_8"; + } + + /** + Returns the current state root. + */ + function stateRoot() external view returns (uint256) { + return state().globalRoot; + } + + /** + Returns the current block number. + */ + function stateBlockNumber() external view returns (int256) { + return state().blockNumber; + } + + /** + Returns the current block hash. + */ + function stateBlockHash() external view returns (uint256) { + return state().blockHash; + } + + /** + Updates the state of the Starknet, based on a proof of the Starknet OS that the state + transition is valid. Data availability is provided on-chain. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + data_availability_fact - An encoding of the on-chain data associated + with the 'programOutput'. + */ + function updateState( + uint256[] calldata programOutput, + uint256 onchainDataHash, + uint256 onchainDataSize + ) external onlyOperator { + // We protect against re-entrancy attacks by reading the block number at the beginning + // and validating that we have the expected block number at the end. + int256 initialBlockNumber = state().blockNumber; + + // Validate program output. + require(programOutput.length > StarknetOutput.HEADER_SIZE, "STARKNET_OUTPUT_TOO_SHORT"); + + // Validate KZG DA flag. + require(programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 0, "UNEXPECTED_KZG_DA_FLAG"); + + bytes32 stateTransitionFact = OnchainDataFactTreeEncoder.encodeFactWithOnchainData( + programOutput, + OnchainDataFactTreeEncoder.DataAvailabilityFact(onchainDataHash, onchainDataSize) + ); + updateStateInternal(programOutput, stateTransitionFact); + // Note that updateStateInternal does an external call, and it shouldn't be followed by + // storage changes. + + // Re-entrancy protection (see above). + require(state().blockNumber == initialBlockNumber + 1, "INVALID_FINAL_BLOCK_NUMBER"); + } + + /** + Updates the state of the StarkNet, based on a proof of the StarkNet OS that the state + transition is valid. Data availability is committed with KZG and provided in a blob. + + Arguments: + programOutput - The main part of the StarkNet OS program output. + kzgProof - a KZG proof which is validated together with the StarkNet OS data commitment + given in 'programOutput'. + */ + function updateStateKzgDA(uint256[] calldata programOutput, bytes calldata kzgProof) + external + onlyOperator + { + // We protect against re-entrancy attacks by reading the block number at the beginning + // and validating that we have the expected block number at the end. + int256 initialBlockNumber = state().blockNumber; + + // Validate program output. + require( + programOutput.length > StarknetOutput.HEADER_SIZE + StarknetOutput.KZG_SEGMENT_SIZE, + "STARKNET_OUTPUT_TOO_SHORT" + ); + + // Verify the KZG Proof. + require(programOutput[StarknetOutput.USE_KZG_DA_OFFSET] == 1, "UNEXPECTED_KZG_DA_FLAG"); + verifyKzgProof( + programOutput[StarknetOutput.HEADER_SIZE:][:StarknetOutput.KZG_SEGMENT_SIZE], + kzgProof + ); + + bytes32 stateTransitionFact = OnchainDataFactTreeEncoder.hashMainPublicInput(programOutput); + updateStateInternal(programOutput, stateTransitionFact); + // Note that updateStateInternal does an external call, and it shouldn't be followed by + // storage changes. + + // Re-entrancy protection (see above). + require(state().blockNumber == initialBlockNumber + 1, "INVALID_FINAL_BLOCK_NUMBER"); + } +} From 4365a45c20e10acd28bc3b8e8fc5cdcfbe9370d4 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Jul 2024 12:19:28 +0530 Subject: [PATCH 02/12] fix : typo --- crates/l2/starknet-proxy-client/src/deploy.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 32f692d..97cf112 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -57,7 +57,7 @@ pub async fn deploy_contract_behind_unsafe_proxy( /// - `deploy_contract_behind_safe_proxy_3_0_2` : /// This function will deploy the contract behind the proxy that is being used by chains such as paradex and kakarot. /// - `deploy_contract_behind_safe_proxy_5_0_0` : -/// This function will deploy the contract behind the latest versio nof the starknet proxy currently used in the token bridge : `0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb` +/// This function will deploy the contract behind the latest version of the starknet proxy currently used in the token bridge : `0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb` /// --------------------------------------------------------- pub async fn deploy_contract_behind_safe_proxy( From 4770a16cfb93ad311fdf02d24d31dad6322cefd1 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Jul 2024 20:36:16 +0530 Subject: [PATCH 03/12] feat : refactored proxy structure & changed the functions --- .../src/clients/starkgate_manager.rs | 2 +- crates/l2/starkgate-manager-client/src/lib.rs | 28 +- .../src/clients/starkgate_registry.rs | 2 +- .../l2/starkgate-registry-client/src/lib.rs | 28 +- .../src/clients/sovereign.rs | 2 +- .../src/clients/validity.rs | 2 +- .../starknet-core-contract-client/src/lib.rs | 50 +- .../src/clients/eth_bridge.rs | 2 +- .../l2/starknet-eth-bridge-client/src/lib.rs | 21 +- .../src/artifacts/Proxy.json | 468 ------------------ .../starknet-proxy-client/src/clients/mod.rs | 3 + .../{proxy_support.rs => clients/proxy.rs} | 138 ++---- .../src/clients/proxy_3_0_2.rs | 113 +++++ .../src/clients/proxy_5_0_0.rs | 226 +++++++++ crates/l2/starknet-proxy-client/src/deploy.rs | 96 +--- crates/l2/starknet-proxy-client/src/lib.rs | 2 +- .../src/clients/token_bridge.rs | 10 +- .../src/interfaces/token_bridge.rs | 140 +----- .../starknet-token-bridge-client/src/lib.rs | 14 +- 19 files changed, 502 insertions(+), 845 deletions(-) delete mode 100644 crates/l2/starknet-proxy-client/src/artifacts/Proxy.json create mode 100644 crates/l2/starknet-proxy-client/src/clients/mod.rs rename crates/l2/starknet-proxy-client/src/{proxy_support.rs => clients/proxy.rs} (58%) create mode 100644 crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs create mode 100644 crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs diff --git a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs index 921ebfa..de7c88a 100644 --- a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs +++ b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use crate::interfaces::manager::StarkgateManager; -use starknet_proxy_client::proxy_support::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; pub struct StarkgateManagerContractClient { manager: StarkgateManager, diff --git a/crates/l2/starkgate-manager-client/src/lib.rs b/crates/l2/starkgate-manager-client/src/lib.rs index f4cf72d..f6b0328 100644 --- a/crates/l2/starkgate-manager-client/src/lib.rs +++ b/crates/l2/starkgate-manager-client/src/lib.rs @@ -1,9 +1,7 @@ use std::sync::Arc; use clients::starkgate_manager::StarkgateManagerContractClient; -use starknet_proxy_client::deploy::{ - deploy_contract_behind_safe_proxy, deploy_contract_behind_unsafe_proxy, Error, -}; +use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -14,14 +12,18 @@ pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starkgate Manager contract (no explicit constructor) - let manager_contract = - deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG) - .await?; + let manager_contract = deploy_contract_behind_proxy( + client.clone(), + STARKGATE_MANAGER, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarkgateManagerContractClient::new( - manager_contract.address(), + manager_contract.0.address(), client.clone(), - manager_contract.address(), + manager_contract.1.address(), )) } @@ -29,9 +31,13 @@ pub async fn deploy_starkgate_manager_behind_safe_proxy( client: Arc, ) -> Result { // Deploy the Starkgate Manager contract (no explicit constructor) - let (manager_contract, manager_contract_implementation) = - deploy_contract_behind_safe_proxy(client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG) - .await?; + let (manager_contract, manager_contract_implementation) = deploy_contract_behind_proxy( + client.clone(), + STARKGATE_MANAGER, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarkgateManagerContractClient::new( manager_contract.address(), diff --git a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs index 08fcf63..76275c0 100644 --- a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs +++ b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use crate::interfaces::registry::StarkgateRegistry; -use starknet_proxy_client::proxy_support::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; pub struct StarkgateRegistryContractClient { registry: StarkgateRegistry, diff --git a/crates/l2/starkgate-registry-client/src/lib.rs b/crates/l2/starkgate-registry-client/src/lib.rs index dabcb80..d84c1fa 100644 --- a/crates/l2/starkgate-registry-client/src/lib.rs +++ b/crates/l2/starkgate-registry-client/src/lib.rs @@ -1,9 +1,7 @@ use std::sync::Arc; use clients::starkgate_registry::StarkgateRegistryContractClient; -use starknet_proxy_client::deploy::{ - deploy_contract_behind_safe_proxy, deploy_contract_behind_unsafe_proxy, Error, -}; +use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; @@ -15,14 +13,18 @@ pub async fn deploy_starkgate_registry_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starkgate Registry contract (no explicit constructor) - let registry_contract = - deploy_contract_behind_unsafe_proxy(client.clone(), STARKGATE_REGISTRY, NO_CONSTRUCTOR_ARG) - .await?; + let registry_contract = deploy_contract_behind_proxy( + client.clone(), + STARKGATE_REGISTRY, + NO_CONSTRUCTOR_ARG, + ProxyVersion::UnsafeProxy, + ) + .await?; Ok(StarkgateRegistryContractClient::new( - registry_contract.address(), + registry_contract.0.address(), client.clone(), - registry_contract.address(), + registry_contract.1.address(), )) } @@ -30,9 +32,13 @@ pub async fn deploy_starkgate_registry_behind_safe_proxy( client: Arc, ) -> Result { // Deploy the Starkgate Registry contract (no explicit constructor) - let (registry_contract, registry_contract_implementation) = - deploy_contract_behind_safe_proxy(client.clone(), STARKGATE_REGISTRY, NO_CONSTRUCTOR_ARG) - .await?; + let (registry_contract, registry_contract_implementation) = deploy_contract_behind_proxy( + client.clone(), + STARKGATE_REGISTRY, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarkgateRegistryContractClient::new( registry_contract.address(), diff --git a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs b/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs index fbc9d0f..66b4f56 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs @@ -4,7 +4,7 @@ use crate::interfaces::{ GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetSovereignContract, }; use ethers::types::Address; -use starknet_proxy_client::proxy_support::ProxySupport; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; /// Client to interact with a Starknet core contract running in `Sovereign` mode diff --git a/crates/l2/starknet-core-contract-client/src/clients/validity.rs b/crates/l2/starknet-core-contract-client/src/clients/validity.rs index 3d0b34e..3b2b408 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/validity.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/validity.rs @@ -1,11 +1,11 @@ use std::sync::Arc; use ethers::abi::Address; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; use crate::interfaces::{ GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetValidityContract, }; -use starknet_proxy_client::proxy_support::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; /// Client to interact with a Starknet core contract running in `Validity` mode diff --git a/crates/l2/starknet-core-contract-client/src/lib.rs b/crates/l2/starknet-core-contract-client/src/lib.rs index 3aef864..976cc5b 100644 --- a/crates/l2/starknet-core-contract-client/src/lib.rs +++ b/crates/l2/starknet-core-contract-client/src/lib.rs @@ -2,9 +2,7 @@ use std::sync::Arc; use crate::clients::StarknetValidityContractClient; use clients::StarknetSovereignContractClient; -use starknet_proxy_client::deploy::{ - deploy_contract_behind_safe_proxy, deploy_contract_behind_unsafe_proxy, Error, -}; +use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; @@ -19,14 +17,18 @@ pub async fn deploy_starknet_sovereign_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = - deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET_SOVEREIGN, NO_CONSTRUCTOR_ARG) - .await?; + let core_contract = deploy_contract_behind_proxy( + client.clone(), + STARKNET_SOVEREIGN, + NO_CONSTRUCTOR_ARG, + ProxyVersion::UnsafeProxy, + ) + .await?; Ok(StarknetSovereignContractClient::new( - core_contract.address(), + core_contract.0.address(), client.clone(), - core_contract.address(), + core_contract.1.address(), )) } @@ -36,9 +38,13 @@ pub async fn deploy_starknet_sovereign_behind_safe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let (core_contract, core_contract_implementation) = - deploy_contract_behind_safe_proxy(client.clone(), STARKNET_SOVEREIGN, NO_CONSTRUCTOR_ARG) - .await?; + let (core_contract, core_contract_implementation) = deploy_contract_behind_proxy( + client.clone(), + STARKNET_SOVEREIGN, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarknetSovereignContractClient::new( core_contract.address(), @@ -53,13 +59,18 @@ pub async fn deploy_starknet_validity_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let core_contract = - deploy_contract_behind_unsafe_proxy(client.clone(), STARKNET, NO_CONSTRUCTOR_ARG).await?; + let core_contract = deploy_contract_behind_proxy( + client.clone(), + STARKNET, + NO_CONSTRUCTOR_ARG, + ProxyVersion::UnsafeProxy, + ) + .await?; Ok(StarknetValidityContractClient::new( - core_contract.address(), + core_contract.0.address(), client.clone(), - core_contract.address(), + core_contract.1.address(), )) } @@ -69,8 +80,13 @@ pub async fn deploy_starknet_validity_behind_safe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Core contract (no explicit constructor) - let (core_contract, core_contract_implementation) = - deploy_contract_behind_safe_proxy(client.clone(), STARKNET, NO_CONSTRUCTOR_ARG).await?; + let (core_contract, core_contract_implementation) = deploy_contract_behind_proxy( + client.clone(), + STARKNET, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarknetValidityContractClient::new( core_contract.address(), diff --git a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs index fd71a07..b141c7d 100644 --- a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs +++ b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use crate::interfaces::eth_bridge::StarknetEthBridge; -use starknet_proxy_client::proxy_support::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { diff --git a/crates/l2/starknet-eth-bridge-client/src/lib.rs b/crates/l2/starknet-eth-bridge-client/src/lib.rs index a292bfb..eb6abdd 100644 --- a/crates/l2/starknet-eth-bridge-client/src/lib.rs +++ b/crates/l2/starknet-eth-bridge-client/src/lib.rs @@ -1,9 +1,7 @@ use std::sync::Arc; use clients::eth_bridge::StarknetEthBridgeContractClient; -use starknet_proxy_client::deploy::{ - deploy_contract_behind_safe_proxy, deploy_contract_behind_unsafe_proxy, Error, -}; +use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; pub mod interfaces; @@ -14,17 +12,18 @@ pub async fn deploy_starknet_eth_bridge_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Eth Bridge contract (no explicit constructor) - let eth_bridge_contract = deploy_contract_behind_unsafe_proxy( + let eth_bridge_contract = deploy_contract_behind_proxy( client.clone(), STARKNET_ETH_BRIDGE, NO_CONSTRUCTOR_ARG, + ProxyVersion::UnsafeProxy, ) .await?; Ok(StarknetEthBridgeContractClient::new( - eth_bridge_contract.address(), + eth_bridge_contract.0.address(), client.clone(), - eth_bridge_contract.address(), + eth_bridge_contract.1.address(), )) } @@ -32,9 +31,13 @@ pub async fn deploy_starknet_eth_bridge_behind_safe_proxy( client: Arc, ) -> Result { // Deploy the Eth Bridge contract (no explicit constructor) - let (eth_bridge_contract, eth_bridge_contract_implementation) = - deploy_contract_behind_safe_proxy(client.clone(), STARKNET_ETH_BRIDGE, NO_CONSTRUCTOR_ARG) - .await?; + let (eth_bridge_contract, eth_bridge_contract_implementation) = deploy_contract_behind_proxy( + client.clone(), + STARKNET_ETH_BRIDGE, + NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxy, + ) + .await?; Ok(StarknetEthBridgeContractClient::new( eth_bridge_contract.address(), diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy.json deleted file mode 100644 index 49ada68..0000000 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy.json +++ /dev/null @@ -1,468 +0,0 @@ -{ - "deploy": { - "VM:-": { - "linkReferences": {}, - "autoDeployLib": true - }, - "main:1": { - "linkReferences": {}, - "autoDeployLib": true - }, - "ropsten:3": { - "linkReferences": {}, - "autoDeployLib": true - }, - "rinkeby:4": { - "linkReferences": {}, - "autoDeployLib": true - }, - "kovan:42": { - "linkReferences": {}, - "autoDeployLib": true - }, - "goerli:5": { - "linkReferences": {}, - "autoDeployLib": true - }, - "Custom": { - "linkReferences": {}, - "autoDeployLib": true - } - }, - "data": { - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b506040516200284f3803806200284f833981810160405260208110156200003757600080fd5b8101908080519060200190929190505050620000586200007060201b60201c565b6200006981620001d560201b60201c565b50620003f1565b6000620000826200020460201b60201c565b90508060010160149054906101000a900460ff16156200010a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f414c52454144595f494e495449414c495a45440000000000000000000000000081525060200191505060405180910390fd5b60018160010160146101000a81548160ff02191690831515021790555062000138336200028e60201b60201c565b7f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a633604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d233604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b90508181555050565b60008060405180606001604052806027815260200162002828602791396040518082805190602001908083835b6020831062000256578051825260208201915060208101905060208303925062000231565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020905090565b6200029f816200038560201b60201c565b1562000313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b6000620003256200020460201b60201c565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080620003986200020460201b60201c565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b61242780620004016000396000f3fe6080604052600436106100ec5760003560e01c80636684b1d61161008a578063b449ea5d11610059578063b449ea5d146106a3578063c5ab84531461070a578063e907fa3c1461079a578063f9bcdde4146107c75761015f565b80636684b1d61461056b5780637147855d1461058257806372a44f07146106275780638757653f146106525761015f565b806356f36dbf116100c657806356f36dbf146103365780635c60da1b146103c65780635cef2e86146104075780635e3a97e7146104b95761015f565b806312f16e6d1461023457806320cea94d14610285578063439fab91146102b05761015f565b3661015f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564581525060200191505060405180910390fd5b60006101696107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561020e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d495353494e475f494d504c454d454e544154494f4e0000000000000000000081525060200191505060405180910390fd5b3660008037600080366000845af43d6000803e806000811461022f573d6000f35b3d6000fd5b34801561024057600080fd5b506102836004803603602081101561025757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080f565b005b34801561029157600080fd5b5061029a61081b565b6040518082815260200191505060405180910390f35b3480156102bc57600080fd5b50610334600480360360208110156102d357600080fd5b81019080803590602001906401000000008111156102f057600080fd5b82018360208201111561030257600080fd5b8035906020019184600183028401116401000000008311171561032457600080fd5b9091929391929390505050610842565b005b34801561034257600080fd5b5061034b6108b0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038b578082015181840152602081019050610370565b50505050905090810190601f1680156103b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d257600080fd5b506103db6107de565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041357600080fd5b506104b76004803603606081101561042a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184600183028401116401000000008311171561049b57600080fd5b90919293919293908035151590602001909291905050506108cc565b005b3480156104c557600080fd5b50610569600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561051957600080fd5b82018360208201111561052b57600080fd5b8035906020019184600183028401116401000000008311171561054d57600080fd5b9091929391929390803515159060200190929190505050610af7565b005b34801561057757600080fd5b50610580610d34565b005b6106256004803603606081101561059857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156105d557600080fd5b8201836020820111156105e757600080fd5b8035906020019184600183028401116401000000008311171561060957600080fd5b9091929391929390803515159060200190929190505050610d3e565b005b34801561063357600080fd5b5061063c611629565b6040518082815260200191505060405180910390f35b34801561065e57600080fd5b506106a16004803603602081101561067557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b005b3480156106af57600080fd5b506106f2600480360360208110156106c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b60405180821515815260200191505060405180910390f35b34801561071657600080fd5b5061071f611678565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075f578082015181840152602081019050610744565b50505050905090810190601f16801561078c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107a657600080fd5b506107af6116b1565b60405180821515815260200191505060405180910390f35b3480156107d357600080fd5b506107dc6116eb565b005b6000807f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b9050805491505090565b610818816116f5565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b81565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43414e4e4f545f43414c4c5f494e495449414c495a450000000000000000000081525060200191505060405180910390fd5b6040518060600160405280602781526020016123cb6027913981565b6108d533611944565b610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020600090558573ffffffffffffffffffffffffffffffffffffffff167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610b0033611944565b610b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610b918473ffffffffffffffffffffffffffffffffffffffff166119a8565b610c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050955050505050506040516020818303038152906040528051906020012090506000610c8c611629565b420190508060026000848152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610d3c6119bb565b565b610d4733611944565b610db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610dc16116b1565b610e33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f494d504c454d454e544154494f4e5f46494e414c495a4544000000000000000081525060200191505060405180910390fd5b610e3b611b4d565b15610eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f53544154455f49535f46524f5a454e000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b610fda8673ffffffffffffffffffffffffffffffffffffffff166119a8565b61104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b428111158061108e5750600073ffffffffffffffffffffffffffffffffffffffff166110766107de565b73ffffffffffffffffffffffffffffffffffffffff16145b611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f555047524144455f4e4f545f454e41424c45445f59455400000000000000000081525060200191505060405180910390fd5b61110986611dac565b600060608773ffffffffffffffffffffffffffffffffffffffff1663439fab9160e01b888860405160240180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106111f957805182526020820191506020810190506020830392506111d6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611259576040519150601f19603f3d011682016040523d82523d6000602084013e61125e565b606091505b509150915081819061130b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112d05780820151818401526020810190506112b5565b50505050905090810190601f1680156112fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508773ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106113d957805182526020820191506020810190506020830392506113b6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b508092508193505050816114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43414c4c5f544f5f495346524f5a454e5f52455645525445440000000000000081525060200191505060405180910390fd5b8080602001905160208110156114cf57600080fd5b810190808051906020019092919050505015611553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e45575f494d504c454d454e544154494f4e5f46524f5a454e0000000000000081525060200191505060405180910390fd5b84156115a557611561611ddb565b8773ffffffffffffffffffffffffffffffffffffffff167fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c60405160405180910390a25b8773ffffffffffffffffffffffffffffffffffffffff167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a25050505050505050565b6000807fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b9050805491505090565b61166381611e0a565b50565b600061167182611944565b9050919050565b6040518060400160405280600581526020017f332e302e3100000000000000000000000000000000000000000000000000000081525081565b6000807f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b9050600081549050600081149250505090565b6116f361210a565b565b6116fe33611944565b611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f474f5645524e4f525f53454c465f52454d4f564500000000000000000000000081525060200191505060405180910390fd5b600061181c61225d565b905061182782611944565b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e4f545f474f5645524e4f52000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008061194f61225d565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b600080823b905060008111915050919050565b60006119c561225d565b90508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000081525060200191505060405180910390fd5b611ab98160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166122e4565b60008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d233604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600080611b586107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b99576000915050611da9565b600060608273ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611c6a5780518252602082019150602081019050602083039250611c47565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611cca576040519150601f19603f3d011682016040523d82523d6000602084013e611ccf565b606091505b5091509150818190611d7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d41578082015181840152602081019050611d26565b50505050905090810190601f168015611d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50808060200190516020811015611d9257600080fd5b810190808051906020019092919050505093505050505b90565b60007f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b90508181555050565b60007f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b90506001815550565b611e1333611944565b611e85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b6000611e8f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4241445f4144445245535300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f3d82611944565b15611fb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f544845525f43414e4449444154455f50454e44494e4700000000000000000081525060200191505060405180910390fd5b818160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61211333611944565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600061218f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a5760008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f560405160405180910390a15b50565b6000806040518060600160405280602781526020016123cb602791396040518082805190602001908083835b602083106122ac5780518252602082019150602081019050602083039250612289565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020905090565b6122ed81611944565b15612360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600061236a61225d565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea2646970667358221220b402be421adc1aa8eff023f853cbd82782e9baed1f7bb02f62a498ccc8f0c6c164736f6c634300060c0033537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6e", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x284F CODESIZE SUB DUP1 PUSH3 0x284F DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH3 0x58 PUSH3 0x70 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x69 DUP2 PUSH3 0x1D5 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH3 0x3F1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x82 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH3 0x10A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F494E495449414C495A454400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x1 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH3 0x138 CALLER PUSH3 0x28E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2828 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x256 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH3 0x231 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH3 0x29F DUP2 PUSH3 0x385 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST ISZERO PUSH3 0x313 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x325 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0x398 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2427 DUP1 PUSH3 0x401 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6684B1D6 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xB449EA5D GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xB449EA5D EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xC5AB8453 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xE907FA3C EQ PUSH2 0x79A JUMPI DUP1 PUSH4 0xF9BCDDE4 EQ PUSH2 0x7C7 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x6684B1D6 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x7147855D EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x72A44F07 EQ PUSH2 0x627 JUMPI DUP1 PUSH4 0x8757653F EQ PUSH2 0x652 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x56F36DBF GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x56F36DBF EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x5CEF2E86 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x5E3A97E7 EQ PUSH2 0x4B9 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x12F16E6D EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x20CEA94D EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x2B0 JUMPI PUSH2 0x15F JUMP JUMPDEST CALLDATASIZE PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x434F4E54524143545F4E4F545F45585045435445445F544F5F52454345495645 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x169 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x20E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D495353494E475F494D504C454D454E544154494F4E00000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x80F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH2 0x81B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x334 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x842 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x370 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x49B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8CC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x569 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x54D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xAF7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH2 0xD34 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD3E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x63C PUSH2 0x1629 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6A1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x675 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x165A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1666 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71F PUSH2 0x1678 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x75F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x744 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x78C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7AF PUSH2 0x16B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7DC PUSH2 0x16EB JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x818 DUP2 PUSH2 0x16F5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E4E4F545F43414C4C5F494E495449414C495A4500000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x8D5 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x947 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xA54 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE99B980B5259F200E4C1DA973FF0251B6D9AAA144714C8773976ECD62B8EBE8D DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB00 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xB72 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB91 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xC8C PUSH2 0x1629 JUMP JUMPDEST TIMESTAMP ADD SWAP1 POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x723A7080D63C133CF338E44E00705CC1B7B2BDE7E88D6218A8D62710A329CE1B DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD3C PUSH2 0x19BB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD47 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xDC1 PUSH2 0x16B1 JUMP JUMPDEST PUSH2 0xE33 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494D504C454D454E544154494F4E5F46494E414C495A45440000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE3B PUSH2 0x1B4D JUMP JUMPDEST ISZERO PUSH2 0xEAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x53544154455F49535F46524F5A454E0000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xFBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFDA DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP DUP2 GT ISZERO DUP1 PUSH2 0x108E JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1076 PUSH2 0x7DE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0x1100 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x555047524144455F4E4F545F454E41424C45445F594554000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1109 DUP7 PUSH2 0x1DAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x11F9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x11D6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x125E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x130B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12D0 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x12B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x12FD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13D9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x13B6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1439 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x143E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP DUP2 PUSH2 0x14BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414C4C5F544F5F495346524F5A454E5F524556455254454400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP ISZERO PUSH2 0x1553 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E45575F494D504C454D454E544154494F4E5F46524F5A454E00000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0x15A5 JUMPI PUSH2 0x1561 PUSH2 0x1DDB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC13B75A5F14B69EBDC2431A5D475B3BFF371ABE251B5064144306FBD9C4DE35C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFF14288D542BC1C1D15A652CB52AF735F065C0C9D70B48E454A203C260733544 DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1663 DUP2 PUSH2 0x1E0A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1671 DUP3 PUSH2 0x1944 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x332E302E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x0 DUP2 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH2 0x16F3 PUSH2 0x210A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16FE CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1770 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x474F5645524E4F525F53454C465F52454D4F5645000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x181C PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH2 0x1827 DUP3 PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1899 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F545F474F5645524E4F520000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x194F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19C5 PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A8C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AB9 DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B58 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1B99 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1DA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C6A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1C47 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1CCA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1CCF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x1D7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D41 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1D26 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1D6E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP4 POP POP POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x1 DUP2 SSTORE POP JUMP JUMPDEST PUSH2 0x1E13 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1E85 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E8F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F34 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4241445F41444452455353000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F3D DUP3 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2076 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F544845525F43414E4449444154455F50454E44494E47000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x2113 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x2185 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x218F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x225A JUMPI PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x22AC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x2289 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x22ED DUP2 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x2360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x236A PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP INVALID MSTORE8 PUSH21 0x61726B45782E50726F78792E323031392E476F7665 PUSH19 0x6E6F7273496E666F726D6174696F6EA2646970 PUSH7 0x7358221220B402 0xBE TIMESTAMP BYTE 0xDC BYTE 0xA8 0xEF CREATE 0x23 0xF8 MSTORE8 0xCB 0xD8 0x27 DUP3 0xE9 0xBA 0xED 0x1F PUSH28 0xB02F62A498CCC8F0C6C164736F6C634300060C0033537461726B4578 0x2E POP PUSH19 0x6F78792E323031392E476F7665726E6F727349 PUSH15 0x666F726D6174696F6E000000000000 ", - "sourceMap": "2454:9432:5:-:0;;;3271:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3332:16;:14;;;:16;;:::i;:::-;3358:49;3384:22;3358:25;;;:49;;:::i;:::-;3271:143;2454:9432;;1665:442:0;1710:32;1745:19;:17;;;:19;;:::i;:::-;1710:54;;1783:3;:15;;;;;;;;;;;;1782:16;1774:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1850:4;1832:3;:15;;;:22;;;;;;;;;;;;;;;;;;1940:23;1952:10;1940:11;;;:23;;:::i;:::-;2019:32;2040:10;2019:32;;;;;;;;;;;;;;;;;;;;2066:34;2089:10;2066:34;;;;;;;;;;;;;;;;;;;;1665:442;:::o;3420:187:5:-;3497:12;1936:66:8;3512:18:5;;3497:33;;3576:14;3570:4;3563:28;3549:52;;:::o;1790:151:6:-;1851:28;1898:14;1913:20;;;;;;;;;;;;;;;;;1898:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1891:43;;1790:151;:::o;3428:237:0:-;3497:24;3509:11;3497;;;:24;;:::i;:::-;3496:25;3488:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3552:32;3587:19;:17;;;:19;;:::i;:::-;3552:54;;3654:4;3616:3;:22;;:35;3639:11;3616:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3428:237;;:::o;2113:189::-;2180:4;2196:32;2231:19;:17;;;:19;;:::i;:::-;2196:54;;2267:3;:22;;:28;2290:4;2267:28;;;;;;;;;;;;;;;;;;;;;;;;;2260:35;;;2113:189;;;:::o;2454:9432:5:-;;;;;;;" - }, - "deployedBytecode": { - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600436106100ec5760003560e01c80636684b1d61161008a578063b449ea5d11610059578063b449ea5d146106a3578063c5ab84531461070a578063e907fa3c1461079a578063f9bcdde4146107c75761015f565b80636684b1d61461056b5780637147855d1461058257806372a44f07146106275780638757653f146106525761015f565b806356f36dbf116100c657806356f36dbf146103365780635c60da1b146103c65780635cef2e86146104075780635e3a97e7146104b95761015f565b806312f16e6d1461023457806320cea94d14610285578063439fab91146102b05761015f565b3661015f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564581525060200191505060405180910390fd5b60006101696107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561020e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d495353494e475f494d504c454d454e544154494f4e0000000000000000000081525060200191505060405180910390fd5b3660008037600080366000845af43d6000803e806000811461022f573d6000f35b3d6000fd5b34801561024057600080fd5b506102836004803603602081101561025757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080f565b005b34801561029157600080fd5b5061029a61081b565b6040518082815260200191505060405180910390f35b3480156102bc57600080fd5b50610334600480360360208110156102d357600080fd5b81019080803590602001906401000000008111156102f057600080fd5b82018360208201111561030257600080fd5b8035906020019184600183028401116401000000008311171561032457600080fd5b9091929391929390505050610842565b005b34801561034257600080fd5b5061034b6108b0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038b578082015181840152602081019050610370565b50505050905090810190601f1680156103b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d257600080fd5b506103db6107de565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041357600080fd5b506104b76004803603606081101561042a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184600183028401116401000000008311171561049b57600080fd5b90919293919293908035151590602001909291905050506108cc565b005b3480156104c557600080fd5b50610569600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561051957600080fd5b82018360208201111561052b57600080fd5b8035906020019184600183028401116401000000008311171561054d57600080fd5b9091929391929390803515159060200190929190505050610af7565b005b34801561057757600080fd5b50610580610d34565b005b6106256004803603606081101561059857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156105d557600080fd5b8201836020820111156105e757600080fd5b8035906020019184600183028401116401000000008311171561060957600080fd5b9091929391929390803515159060200190929190505050610d3e565b005b34801561063357600080fd5b5061063c611629565b6040518082815260200191505060405180910390f35b34801561065e57600080fd5b506106a16004803603602081101561067557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b005b3480156106af57600080fd5b506106f2600480360360208110156106c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b60405180821515815260200191505060405180910390f35b34801561071657600080fd5b5061071f611678565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075f578082015181840152602081019050610744565b50505050905090810190601f16801561078c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107a657600080fd5b506107af6116b1565b60405180821515815260200191505060405180910390f35b3480156107d357600080fd5b506107dc6116eb565b005b6000807f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b9050805491505090565b610818816116f5565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b81565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43414e4e4f545f43414c4c5f494e495449414c495a450000000000000000000081525060200191505060405180910390fd5b6040518060600160405280602781526020016123cb6027913981565b6108d533611944565b610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020600090558573ffffffffffffffffffffffffffffffffffffffff167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610b0033611944565b610b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610b918473ffffffffffffffffffffffffffffffffffffffff166119a8565b610c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050955050505050506040516020818303038152906040528051906020012090506000610c8c611629565b420190508060026000848152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610d3c6119bb565b565b610d4733611944565b610db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610dc16116b1565b610e33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f494d504c454d454e544154494f4e5f46494e414c495a4544000000000000000081525060200191505060405180910390fd5b610e3b611b4d565b15610eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f53544154455f49535f46524f5a454e000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b610fda8673ffffffffffffffffffffffffffffffffffffffff166119a8565b61104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b428111158061108e5750600073ffffffffffffffffffffffffffffffffffffffff166110766107de565b73ffffffffffffffffffffffffffffffffffffffff16145b611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f555047524144455f4e4f545f454e41424c45445f59455400000000000000000081525060200191505060405180910390fd5b61110986611dac565b600060608773ffffffffffffffffffffffffffffffffffffffff1663439fab9160e01b888860405160240180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106111f957805182526020820191506020810190506020830392506111d6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611259576040519150601f19603f3d011682016040523d82523d6000602084013e61125e565b606091505b509150915081819061130b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112d05780820151818401526020810190506112b5565b50505050905090810190601f1680156112fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508773ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106113d957805182526020820191506020810190506020830392506113b6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b508092508193505050816114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43414c4c5f544f5f495346524f5a454e5f52455645525445440000000000000081525060200191505060405180910390fd5b8080602001905160208110156114cf57600080fd5b810190808051906020019092919050505015611553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e45575f494d504c454d454e544154494f4e5f46524f5a454e0000000000000081525060200191505060405180910390fd5b84156115a557611561611ddb565b8773ffffffffffffffffffffffffffffffffffffffff167fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c60405160405180910390a25b8773ffffffffffffffffffffffffffffffffffffffff167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a25050505050505050565b6000807fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b9050805491505090565b61166381611e0a565b50565b600061167182611944565b9050919050565b6040518060400160405280600581526020017f332e302e3100000000000000000000000000000000000000000000000000000081525081565b6000807f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b9050600081549050600081149250505090565b6116f361210a565b565b6116fe33611944565b611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f474f5645524e4f525f53454c465f52454d4f564500000000000000000000000081525060200191505060405180910390fd5b600061181c61225d565b905061182782611944565b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e4f545f474f5645524e4f52000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008061194f61225d565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b600080823b905060008111915050919050565b60006119c561225d565b90508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000081525060200191505060405180910390fd5b611ab98160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166122e4565b60008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d233604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600080611b586107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b99576000915050611da9565b600060608273ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611c6a5780518252602082019150602081019050602083039250611c47565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611cca576040519150601f19603f3d011682016040523d82523d6000602084013e611ccf565b606091505b5091509150818190611d7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d41578082015181840152602081019050611d26565b50505050905090810190601f168015611d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50808060200190516020811015611d9257600080fd5b810190808051906020019092919050505093505050505b90565b60007f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b90508181555050565b60007f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b90506001815550565b611e1333611944565b611e85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b6000611e8f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4241445f4144445245535300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f3d82611944565b15611fb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f544845525f43414e4449444154455f50454e44494e4700000000000000000081525060200191505060405180910390fd5b818160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61211333611944565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600061218f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a5760008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f560405160405180910390a15b50565b6000806040518060600160405280602781526020016123cb602791396040518082805190602001908083835b602083106122ac5780518252602082019150602081019050602083039250612289565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020905090565b6122ed81611944565b15612360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600061236a61225d565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea2646970667358221220b402be421adc1aa8eff023f853cbd82782e9baed1f7bb02f62a498ccc8f0c6c164736f6c634300060c0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6684B1D6 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xB449EA5D GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xB449EA5D EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xC5AB8453 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xE907FA3C EQ PUSH2 0x79A JUMPI DUP1 PUSH4 0xF9BCDDE4 EQ PUSH2 0x7C7 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x6684B1D6 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x7147855D EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x72A44F07 EQ PUSH2 0x627 JUMPI DUP1 PUSH4 0x8757653F EQ PUSH2 0x652 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x56F36DBF GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x56F36DBF EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x5CEF2E86 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x5E3A97E7 EQ PUSH2 0x4B9 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x12F16E6D EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x20CEA94D EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x2B0 JUMPI PUSH2 0x15F JUMP JUMPDEST CALLDATASIZE PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x434F4E54524143545F4E4F545F45585045435445445F544F5F52454345495645 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x169 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x20E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D495353494E475F494D504C454D454E544154494F4E00000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x80F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH2 0x81B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x334 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x842 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x370 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x49B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8CC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x569 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x54D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xAF7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH2 0xD34 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD3E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x63C PUSH2 0x1629 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6A1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x675 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x165A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1666 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71F PUSH2 0x1678 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x75F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x744 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x78C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7AF PUSH2 0x16B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7DC PUSH2 0x16EB JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x818 DUP2 PUSH2 0x16F5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E4E4F545F43414C4C5F494E495449414C495A4500000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x8D5 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x947 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xA54 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE99B980B5259F200E4C1DA973FF0251B6D9AAA144714C8773976ECD62B8EBE8D DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB00 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xB72 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB91 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xC8C PUSH2 0x1629 JUMP JUMPDEST TIMESTAMP ADD SWAP1 POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x723A7080D63C133CF338E44E00705CC1B7B2BDE7E88D6218A8D62710A329CE1B DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD3C PUSH2 0x19BB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD47 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xDC1 PUSH2 0x16B1 JUMP JUMPDEST PUSH2 0xE33 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494D504C454D454E544154494F4E5F46494E414C495A45440000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE3B PUSH2 0x1B4D JUMP JUMPDEST ISZERO PUSH2 0xEAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x53544154455F49535F46524F5A454E0000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xFBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFDA DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP DUP2 GT ISZERO DUP1 PUSH2 0x108E JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1076 PUSH2 0x7DE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0x1100 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x555047524144455F4E4F545F454E41424C45445F594554000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1109 DUP7 PUSH2 0x1DAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x11F9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x11D6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x125E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x130B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12D0 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x12B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x12FD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13D9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x13B6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1439 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x143E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP DUP2 PUSH2 0x14BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414C4C5F544F5F495346524F5A454E5F524556455254454400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP ISZERO PUSH2 0x1553 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E45575F494D504C454D454E544154494F4E5F46524F5A454E00000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0x15A5 JUMPI PUSH2 0x1561 PUSH2 0x1DDB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC13B75A5F14B69EBDC2431A5D475B3BFF371ABE251B5064144306FBD9C4DE35C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFF14288D542BC1C1D15A652CB52AF735F065C0C9D70B48E454A203C260733544 DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1663 DUP2 PUSH2 0x1E0A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1671 DUP3 PUSH2 0x1944 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x332E302E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x0 DUP2 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH2 0x16F3 PUSH2 0x210A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16FE CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1770 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x474F5645524E4F525F53454C465F52454D4F5645000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x181C PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH2 0x1827 DUP3 PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1899 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F545F474F5645524E4F520000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x194F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19C5 PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A8C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AB9 DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B58 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1B99 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1DA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C6A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1C47 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1CCA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1CCF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x1D7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D41 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1D26 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1D6E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP4 POP POP POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x1 DUP2 SSTORE POP JUMP JUMPDEST PUSH2 0x1E13 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1E85 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E8F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F34 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4241445F41444452455353000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F3D DUP3 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2076 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F544845525F43414E4449444154455F50454E44494E47000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x2113 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x2185 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x218F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x225A JUMPI PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x22AC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x2289 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x22ED DUP2 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x2360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x236A PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP INVALID MSTORE8 PUSH21 0x61726B45782E50726F78792E323031392E476F7665 PUSH19 0x6E6F7273496E666F726D6174696F6EA2646970 PUSH7 0x7358221220B402 0xBE TIMESTAMP BYTE 0xDC BYTE 0xA8 0xEF CREATE 0x23 0xF8 MSTORE8 0xCB 0xD8 0x27 DUP3 0xE9 0xBA 0xED 0x1F PUSH28 0xB02F62A498CCC8F0C6C164736F6C634300060C003300000000000000 ", - "sourceMap": "2454:9432:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5708:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:9432;5999:23;6025:16;:14;:16::i;:::-;5999:42;;6086:3;6059:31;;:15;:31;;;;6051:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6396:14;6393:1;6390;6377:34;6619:1;6616;6600:14;6597:1;6580:15;6573:5;6560:61;6695:16;6692:1;6689;6674:38;6733:6;6805:1;6800:66;;;;6915:16;6912:1;6905:27;6800:66;6835:16;6832:1;6825:27;2182:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1883:119:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4977:122:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1607:87:6;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3938:195:5;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8794:561;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8039:521;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2306:78:6;;;;;;;;;;;;;:::i;:::-;;10254:1630:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3613:207;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2062:114:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1947:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3218:46:5;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7306:244;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2390:78:6;;;;;;;;;;;;;:::i;:::-;;3938:195:5;3985:23;4020:12;685:66:8;4035:19:5;;4020:34;;4112:4;4106:11;4087:30;;4073:54;;:::o;2182:118:6:-;2258:35;2274:18;2258:15;:35::i;:::-;2182:118;:::o;1883:119:8:-;1936:66;1883:119;;;:::o;4977:122:5:-;5060:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1607:87:6;;;;;;;;;;;;;;;;;;;:::o;8794:561:5:-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8955:22:5::1;9001:21;9024:4;;9030:8;8990:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8980:60;;;;;;8955:85;;9109:22;9134:11;:27;9146:14;9134:27;;;;;;;;;;;;9109:52;;9196:1;9179:14;:18;9171:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9246:11;:27;9258:14;9246:27;;;;;;;;;;;9239:34;;;9310:21;9288:60;;;9333:4;;9339:8;9288:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;345:1:3;;8794:561:5::0;;;;:::o;8039:521::-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8201:30:5::1;:17;:28;;;:30::i;:::-;8193:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8267:22;8313:17;8332:4;;8338:8;8302:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8292:56;;;;;;8267:81;;8359:22;8402:27;:25;:27::i;:::-;8384:15;:45;8359:70;;8470:14;8440:11;:27;8452:14;8440:27;;;;;;;;;;;:44;;;;8519:17;8499:54;;;8538:4;;8544:8;8499:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;345:1:3;;8039:521:5::0;;;;:::o;2306:78:6:-;2358:19;:17;:19::i;:::-;2306:78::o;10254:1630:5:-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5147:16:5::1;:14;:16::i;:::-;5139:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5433:24:::2;:22;:24::i;:::-;5432:25;5424:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;10431:22:::3;10477:17;10496:4;;10502:8;10466:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10456:56;;;;;;10431:81;;10522:22;10547:11;:27;10559:14;10547:27;;;;;;;;;;;;10522:52;;10609:1;10592:14;:18;10584:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;10660:30;:17;:28;;;:30::i;:::-;10652:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;10855:15;10837:14;:33;;:69;;;;10902:3;10874:32;;:16;:14;:16::i;:::-;:32;;;10837:69;10816:139;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;10966:36;10984:17;10966;:36::i;:::-;11082:12;11096:23;11123:17;:30;;11190:24;;;11216:4;;11167:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11081:150;;;;11249:7;11265:10;11241:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11461:17;:30;;11505:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11461:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11437:115;;;;;;;;11570:7;11562:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;11637:10;11626:30;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;11625:31;11617:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;11701:8;11697:118;;;11725:18;:16;:18::i;:::-;11786:17;11762:42;;;;;;;;;;;;11697:118;11853:17;11830:47;;;11872:4;;11830:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5487:1;;;;10254:1630:::0;;;;:::o;3613:207::-;3671:13;3696:12;1936:66:8;3711:18:5;;3696:33;;3777:4;3771:11;3762:20;;3801:12;3613:207;:::o;2062:114:6:-;2136:33;2157:11;2136:20;:33::i;:::-;2062:114;:::o;1947:109::-;2009:4;2032:17;2044:4;2032:11;:17::i;:::-;2025:24;;1947:109;;;:::o;3218:46:5:-;;;;;;;;;;;;;;;;;;;:::o;7306:244::-;7353:13;7378:12;1598:66:8;7393:20:5;;7378:35;;7423:17;7492:4;7486:11;7473:24;;7541:1;7528:9;:14;7516:27;;7306:244;;;:::o;2390:78:6:-;2442:19;:17;:19::i;:::-;2390:78::o;4226:402:0:-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4335:18:0::1;4321:32;;:10;:32;;;;4313:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4388:32;4423:19;:17;:19::i;:::-;4388:54;;4460:31;4472:18;4460:11;:31::i;:::-;4452:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4563:5;4518:3;:22;;:42;4541:18;4518:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;4583:38;4602:18;4583:38;;;;;;;;;;;;;;;;;;;;345:1:3;4226:402:0::0;:::o;2113:189::-;2180:4;2196:32;2231:19;:17;:19::i;:::-;2196:54;;2267:3;:22;;:28;2290:4;2267:28;;;;;;;;;;;;;;;;;;;;;;;;;2260:35;;;2113:189;;;:::o;384:190:4:-;444:4;460:12;525:7;513:20;505:28;;566:1;559:4;:8;552:15;;;384:190;;;:::o;3671:498:0:-;3800:32;3835:19;:17;:19::i;:::-;3800:54;;3886:3;:21;;;;;;;;;;;;3872:35;;:10;:35;;;3864:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3971:34;3983:3;:21;;;;;;;;;;;;3971:11;:34::i;:::-;4047:3;4015;:21;;;:36;;;;;;;;;;;;;;;;;;4128:34;4151:10;4128:34;;;;;;;;;;;;;;;;;;;;3671:498;:::o;4270:564:5:-;4321:4;4337:23;4363:16;:14;:16::i;:::-;4337:42;;4506:3;4479:31;;:15;:31;;;4475:74;;;4533:5;4526:12;;;;;4475:74;4604:12;4618:23;4645:15;:28;;4687:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4645:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4603:131;;;;4752:7;4768:10;4744:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4808:10;4797:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4790:37;;;;;4270:564;;:::o;7034:186::-;7106:12;685:66:8;7121:19:5;;7106:34;;7186:17;7180:4;7173:31;7159:55;;:::o;7623:147::-;7669:12;1598:66:8;7684:20:5;;7669:35;;7750:3;7744:4;7737:17;7723:41;:::o;2662:447:0:-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2747:32:0::1;2782:19;:17;:19::i;:::-;2747:54;;2842:3;2819:27;;:11;:27;;;;2811:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2881:24;2893:11;2881;:24::i;:::-;2880:25;2872:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2977:3;2944:37;;:3;:21;;;;;;;;;;;;:37;;;2936:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3043:11;3019:3;:21;;;:35;;;;;;;;;;;;;;;;;;3069:33;3090:11;3069:33;;;;;;;;;;;;;;;;;;;;345:1:3;2662:447:0::0;:::o;2376:280::-;292:23:3;304:10;292:11;:23::i;:::-;284:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:32:0::1;2474:19;:17;:19::i;:::-;2439:54;;2540:3;2507:37;;:3;:21;;;;;;;;;;;;:37;;;2503:147;;2592:3;2560;:21;;;:36;;;;;;;;;;;;;;;;;;2615:24;;;;;;;;;;2503:147;345:1:3;2376:280:0:o:0;1790:151:6:-;1851:28;1898:14;1913:20;;;;;;;;;;;;;;;;;1898:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1891:43;;1790:151;:::o;3428:237:0:-;3497:24;3509:11;3497;:24::i;:::-;3496:25;3488:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3552:32;3587:19;:17;:19::i;:::-;3552:54;;3654:4;3616:3;:22;;:35;3639:11;3616:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3428:237;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1851000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "PROXY_GOVERNANCE_TAG()": "infinite", - "PROXY_VERSION()": "infinite", - "UPGRADE_DELAY_SLOT()": "257", - "addImplementation(address,bytes,bool)": "infinite", - "getUpgradeActivationDelay()": "1099", - "implementation()": "1083", - "initialize(bytes)": "557", - "isNotFinalized()": "1123", - "proxyAcceptGovernance()": "infinite", - "proxyCancelNomination()": "infinite", - "proxyIsGovernor(address)": "infinite", - "proxyNominateNewGovernor(address)": "infinite", - "proxyRemoveGovernor(address)": "infinite", - "removeImplementation(address,bytes,bool)": "infinite", - "upgradeTo(address,bytes,bool)": "infinite" - }, - "internal": { - "implementationIsFrozen()": "infinite", - "setFinalizedFlag()": "20034", - "setImplementation(address)": "20036", - "setUpgradeActivationDelay(uint256)": "infinite" - } - }, - "methodIdentifiers": { - "PROXY_GOVERNANCE_TAG()": "56f36dbf", - "PROXY_VERSION()": "c5ab8453", - "UPGRADE_DELAY_SLOT()": "20cea94d", - "addImplementation(address,bytes,bool)": "5e3a97e7", - "getUpgradeActivationDelay()": "72a44f07", - "implementation()": "5c60da1b", - "initialize(bytes)": "439fab91", - "isNotFinalized()": "e907fa3c", - "proxyAcceptGovernance()": "6684b1d6", - "proxyCancelNomination()": "f9bcdde4", - "proxyIsGovernor(address)": "b449ea5d", - "proxyNominateNewGovernor(address)": "8757653f", - "proxyRemoveGovernor(address)": "12f16e6d", - "removeImplementation(address,bytes,bool)": "5cef2e86", - "upgradeTo(address,bytes,bool)": "7147855d" - } - }, - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b506040516200284f3803806200284f833981810160405260208110156200003757600080fd5b8101908080519060200190929190505050620000586200007060201b60201c565b6200006981620001d560201b60201c565b50620003f1565b6000620000826200020460201b60201c565b90508060010160149054906101000a900460ff16156200010a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f414c52454144595f494e495449414c495a45440000000000000000000000000081525060200191505060405180910390fd5b60018160010160146101000a81548160ff02191690831515021790555062000138336200028e60201b60201c565b7f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a633604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d233604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b90508181555050565b60008060405180606001604052806027815260200162002828602791396040518082805190602001908083835b6020831062000256578051825260208201915060208101905060208303925062000231565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020905090565b6200029f816200038560201b60201c565b1562000313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b6000620003256200020460201b60201c565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080620003986200020460201b60201c565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b61242780620004016000396000f3fe6080604052600436106100ec5760003560e01c80636684b1d61161008a578063b449ea5d11610059578063b449ea5d146106a3578063c5ab84531461070a578063e907fa3c1461079a578063f9bcdde4146107c75761015f565b80636684b1d61461056b5780637147855d1461058257806372a44f07146106275780638757653f146106525761015f565b806356f36dbf116100c657806356f36dbf146103365780635c60da1b146103c65780635cef2e86146104075780635e3a97e7146104b95761015f565b806312f16e6d1461023457806320cea94d14610285578063439fab91146102b05761015f565b3661015f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564581525060200191505060405180910390fd5b60006101696107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561020e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d495353494e475f494d504c454d454e544154494f4e0000000000000000000081525060200191505060405180910390fd5b3660008037600080366000845af43d6000803e806000811461022f573d6000f35b3d6000fd5b34801561024057600080fd5b506102836004803603602081101561025757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080f565b005b34801561029157600080fd5b5061029a61081b565b6040518082815260200191505060405180910390f35b3480156102bc57600080fd5b50610334600480360360208110156102d357600080fd5b81019080803590602001906401000000008111156102f057600080fd5b82018360208201111561030257600080fd5b8035906020019184600183028401116401000000008311171561032457600080fd5b9091929391929390505050610842565b005b34801561034257600080fd5b5061034b6108b0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038b578082015181840152602081019050610370565b50505050905090810190601f1680156103b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d257600080fd5b506103db6107de565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041357600080fd5b506104b76004803603606081101561042a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561046757600080fd5b82018360208201111561047957600080fd5b8035906020019184600183028401116401000000008311171561049b57600080fd5b90919293919293908035151590602001909291905050506108cc565b005b3480156104c557600080fd5b50610569600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561051957600080fd5b82018360208201111561052b57600080fd5b8035906020019184600183028401116401000000008311171561054d57600080fd5b9091929391929390803515159060200190929190505050610af7565b005b34801561057757600080fd5b50610580610d34565b005b6106256004803603606081101561059857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156105d557600080fd5b8201836020820111156105e757600080fd5b8035906020019184600183028401116401000000008311171561060957600080fd5b9091929391929390803515159060200190929190505050610d3e565b005b34801561063357600080fd5b5061063c611629565b6040518082815260200191505060405180910390f35b34801561065e57600080fd5b506106a16004803603602081101561067557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b005b3480156106af57600080fd5b506106f2600480360360208110156106c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b60405180821515815260200191505060405180910390f35b34801561071657600080fd5b5061071f611678565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075f578082015181840152602081019050610744565b50505050905090810190601f16801561078c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107a657600080fd5b506107af6116b1565b60405180821515815260200191505060405180910390f35b3480156107d357600080fd5b506107dc6116eb565b005b6000807f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b9050805491505090565b610818816116f5565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b81565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43414e4e4f545f43414c4c5f494e495449414c495a450000000000000000000081525060200191505060405180910390fd5b6040518060600160405280602781526020016123cb6027913981565b6108d533611944565b610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b60026000838152602001908152602001600020600090558573ffffffffffffffffffffffffffffffffffffffff167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610b0033611944565b610b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610b918473ffffffffffffffffffffffffffffffffffffffff166119a8565b610c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050955050505050506040516020818303038152906040528051906020012090506000610c8c611629565b420190508060026000848152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b868686604051808060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2505050505050565b610d3c6119bb565b565b610d4733611944565b610db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b610dc16116b1565b610e33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f494d504c454d454e544154494f4e5f46494e414c495a4544000000000000000081525060200191505060405180910390fd5b610e3b611b4d565b15610eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f53544154455f49535f46524f5a454e000000000000000000000000000000000081525060200191505060405180910390fd5b600084848484604051602001808573ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e000000000081525060200191505060405180910390fd5b610fda8673ffffffffffffffffffffffffffffffffffffffff166119a8565b61104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f414444524553535f4e4f545f434f4e545241435400000000000000000000000081525060200191505060405180910390fd5b428111158061108e5750600073ffffffffffffffffffffffffffffffffffffffff166110766107de565b73ffffffffffffffffffffffffffffffffffffffff16145b611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f555047524144455f4e4f545f454e41424c45445f59455400000000000000000081525060200191505060405180910390fd5b61110986611dac565b600060608773ffffffffffffffffffffffffffffffffffffffff1663439fab9160e01b888860405160240180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106111f957805182526020820191506020810190506020830392506111d6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611259576040519150601f19603f3d011682016040523d82523d6000602084013e61125e565b606091505b509150915081819061130b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112d05780820151818401526020810190506112b5565b50505050905090810190601f1680156112fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508773ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106113d957805182526020820191506020810190506020830392506113b6565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b508092508193505050816114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43414c4c5f544f5f495346524f5a454e5f52455645525445440000000000000081525060200191505060405180910390fd5b8080602001905160208110156114cf57600080fd5b810190808051906020019092919050505015611553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e45575f494d504c454d454e544154494f4e5f46524f5a454e0000000000000081525060200191505060405180910390fd5b84156115a557611561611ddb565b8773ffffffffffffffffffffffffffffffffffffffff167fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c60405160405180910390a25b8773ffffffffffffffffffffffffffffffffffffffff167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a25050505050505050565b6000807fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f60001b9050805491505090565b61166381611e0a565b50565b600061167182611944565b9050919050565b6040518060400160405280600581526020017f332e302e3100000000000000000000000000000000000000000000000000000081525081565b6000807f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b9050600081549050600081149250505090565b6116f361210a565b565b6116fe33611944565b611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f474f5645524e4f525f53454c465f52454d4f564500000000000000000000000081525060200191505060405180910390fd5b600061181c61225d565b905061182782611944565b611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e4f545f474f5645524e4f52000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a2959982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b60008061194f61225d565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b600080823b905060008111915050919050565b60006119c561225d565b90508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f4e4c595f43414e4449444154455f474f5645524e4f5200000000000000000081525060200191505060405180910390fd5b611ab98160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166122e4565b60008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d233604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600080611b586107de565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b99576000915050611da9565b600060608273ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f33eeb147000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310611c6a5780518252602082019150602081019050602083039250611c47565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611cca576040519150601f19603f3d011682016040523d82523d6000602084013e611ccf565b606091505b5091509150818190611d7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d41578082015181840152602081019050611d26565b50505050905090810190601f168015611d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50808060200190516020811015611d9257600080fd5b810190808051906020019092919050505093505050505b90565b60007f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2460001b90508181555050565b60007f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d260001b90506001815550565b611e1333611944565b611e85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b6000611e8f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4241445f4144445245535300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f3d82611944565b15611fb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f544845525f43414e4449444154455f50454e44494e4700000000000000000081525060200191505060405180910390fd5b818160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b61211333611944565b612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4f4e4c595f474f5645524e414e4345000000000000000000000000000000000081525060200191505060405180910390fd5b600061218f61225d565b9050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a5760008160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f560405160405180910390a15b50565b6000806040518060600160405280602781526020016123cb602791396040518082805190602001908083835b602083106122ac5780518252602082019150602081019050602083039250612289565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020905090565b6122ed81611944565b15612360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f414c52454144595f474f5645524e4f520000000000000000000000000000000081525060200191505060405180910390fd5b600061236a61225d565b905060018160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea2646970667358221220b402be421adc1aa8eff023f853cbd82782e9baed1f7bb02f62a498ccc8f0c6c164736f6c634300060c0033537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6e", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x284F CODESIZE SUB DUP1 PUSH3 0x284F DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH3 0x58 PUSH3 0x70 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x69 DUP2 PUSH3 0x1D5 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH3 0x3F1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x82 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH3 0x10A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F494E495449414C495A454400000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x1 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH3 0x138 CALLER PUSH3 0x28E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2828 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x256 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH3 0x231 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH3 0x29F DUP2 PUSH3 0x385 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST ISZERO PUSH3 0x313 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x325 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0x398 PUSH3 0x204 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2427 DUP1 PUSH3 0x401 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6684B1D6 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xB449EA5D GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xB449EA5D EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xC5AB8453 EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xE907FA3C EQ PUSH2 0x79A JUMPI DUP1 PUSH4 0xF9BCDDE4 EQ PUSH2 0x7C7 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x6684B1D6 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x7147855D EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x72A44F07 EQ PUSH2 0x627 JUMPI DUP1 PUSH4 0x8757653F EQ PUSH2 0x652 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x56F36DBF GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x56F36DBF EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x3C6 JUMPI DUP1 PUSH4 0x5CEF2E86 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x5E3A97E7 EQ PUSH2 0x4B9 JUMPI PUSH2 0x15F JUMP JUMPDEST DUP1 PUSH4 0x12F16E6D EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x20CEA94D EQ PUSH2 0x285 JUMPI DUP1 PUSH4 0x439FAB91 EQ PUSH2 0x2B0 JUMPI PUSH2 0x15F JUMP JUMPDEST CALLDATASIZE PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x434F4E54524143545F4E4F545F45585045435445445F544F5F52454345495645 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x169 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x20E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4D495353494E475F494D504C454D454E544154494F4E00000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x80F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH2 0x81B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x334 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 POP POP POP PUSH2 0x842 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x370 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x7DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x42A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x49B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x8CC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x569 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x54D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xAF7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH2 0xD34 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP2 SWAP3 SWAP4 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xD3E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x63C PUSH2 0x1629 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6A1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x675 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x165A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1666 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x716 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71F PUSH2 0x1678 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x75F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x744 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x78C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7AF PUSH2 0x16B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7DC PUSH2 0x16EB JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x818 DUP2 PUSH2 0x16F5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414E4E4F545F43414C4C5F494E495449414C495A4500000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY DUP2 JUMP JUMPDEST PUSH2 0x8D5 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x947 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xA54 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE99B980B5259F200E4C1DA973FF0251B6D9AAA144714C8773976ECD62B8EBE8D DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB00 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xB72 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xB91 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xC8C PUSH2 0x1629 JUMP JUMPDEST TIMESTAMP ADD SWAP1 POP DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x723A7080D63C133CF338E44E00705CC1B7B2BDE7E88D6218A8D62710A329CE1B DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD3C PUSH2 0x19BB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0xD47 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0xDB9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xDC1 PUSH2 0x16B1 JUMP JUMPDEST PUSH2 0xE33 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x494D504C454D454E544154494F4E5F46494E414C495A45440000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xE3B PUSH2 0x1B4D JUMP JUMPDEST ISZERO PUSH2 0xEAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x53544154455F49535F46524F5A454E0000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xFBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x554E4B4E4F574E5F555047524144455F494E464F524D4154494F4E0000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFDA DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x19A8 JUMP JUMPDEST PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414444524553535F4E4F545F434F4E5452414354000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST TIMESTAMP DUP2 GT ISZERO DUP1 PUSH2 0x108E JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1076 PUSH2 0x7DE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0x1100 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x555047524144455F4E4F545F454E41424C45445F594554000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1109 DUP7 PUSH2 0x1DAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x439FAB91 PUSH1 0xE0 SHL DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x11F9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x11D6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x125E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x130B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x12D0 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x12B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x12FD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13D9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x13B6 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1439 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x143E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 SWAP3 POP DUP2 SWAP4 POP POP POP DUP2 PUSH2 0x14BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x43414C4C5F544F5F495346524F5A454E5F524556455254454400000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP ISZERO PUSH2 0x1553 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E45575F494D504C454D454E544154494F4E5F46524F5A454E00000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0x15A5 JUMPI PUSH2 0x1561 PUSH2 0x1DDB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC13B75A5F14B69EBDC2431A5D475B3BFF371ABE251B5064144306FBD9C4DE35C PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFF14288D542BC1C1D15A652CB52AF735F065C0C9D70B48E454A203C260733544 DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0xC21DBB3089FCB2C4F4C6A67854AB4DB2B0F233EA4B21B21F912D52D18FC5DB1F PUSH1 0x0 SHL SWAP1 POP DUP1 SLOAD SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1663 DUP2 PUSH2 0x1E0A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1671 DUP3 PUSH2 0x1944 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x332E302E31000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x0 DUP2 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH2 0x16F3 PUSH2 0x210A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16FE CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1770 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x474F5645524E4F525F53454C465F52454D4F5645000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x181C PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH2 0x1827 DUP3 PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1899 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4E4F545F474F5645524E4F520000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH32 0xD75F94825E770B8B512BE8E74759E252AD00E102E38F50CCE2F7C6F868A29599 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x194F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 EXTCODESIZE SWAP1 POP PUSH1 0x0 DUP2 GT SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19C5 PUSH2 0x225D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A8C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F43414E4449444154455F474F5645524E4F52000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1AB9 DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x22E4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0xCFB473E6C03F9A29DDAF990E736FA3DE5188A0BD85D684F5B6E164EBFBFFF5D2 CALLER PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B58 PUSH2 0x7DE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1B99 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1DA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x33EEB14700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C6A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x1C47 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1CCA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1CCF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x1D7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D41 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1D26 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1D6E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP4 POP POP POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x177667240AEEEA7E35EABE3A35E18306F336219E1386F7710A6BF8783F761B24 PUSH1 0x0 SHL SWAP1 POP DUP2 DUP2 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x7D433C6F837E8F93009937C466C82EFBB5BA621FAE36886D0CAC433C5D0AA7D2 PUSH1 0x0 SHL SWAP1 POP PUSH1 0x1 DUP2 SSTORE POP JUMP JUMPDEST PUSH2 0x1E13 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1E85 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E8F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F34 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4241445F41444452455353000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F3D DUP3 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2076 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F544845525F43414E4449444154455F50454E44494E47000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x6166272C8D3F5F579082F2827532732F97195007983BB5B83AC12C56700B01A6 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x2113 CALLER PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x2185 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F4E4C595F474F5645524E414E43450000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x218F PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x225A JUMPI PUSH1 0x0 DUP2 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH32 0x7A8DC7DD7FFFB43C4807438FA62729225156941E641FD877938F4EDADE3429F5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x23CB PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x22AC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH1 0x20 DUP4 SUB SWAP3 POP PUSH2 0x2289 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x22ED DUP2 PUSH2 0x1944 JUMP JUMPDEST ISZERO PUSH2 0x2360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x414C52454144595F474F5645524E4F5200000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x236A PUSH2 0x225D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x0 ADD PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP INVALID MSTORE8 PUSH21 0x61726B45782E50726F78792E323031392E476F7665 PUSH19 0x6E6F7273496E666F726D6174696F6EA2646970 PUSH7 0x7358221220B402 0xBE TIMESTAMP BYTE 0xDC BYTE 0xA8 0xEF CREATE 0x23 0xF8 MSTORE8 0xCB 0xD8 0x27 DUP3 0xE9 0xBA 0xED 0x1F PUSH28 0xB02F62A498CCC8F0C6C164736F6C634300060C0033537461726B4578 0x2E POP PUSH19 0x6F78792E323031392E476F7665726E6F727349 PUSH15 0x666F726D6174696F6E000000000000 ", - "sourceMap": "2454:9432:5:-:0;;;3271:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3332:16;:14;;;:16;;:::i;:::-;3358:49;3384:22;3358:25;;;:49;;:::i;:::-;3271:143;2454:9432;;1665:442:0;1710:32;1745:19;:17;;;:19;;:::i;:::-;1710:54;;1783:3;:15;;;;;;;;;;;;1782:16;1774:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1850:4;1832:3;:15;;;:22;;;;;;;;;;;;;;;;;;1940:23;1952:10;1940:11;;;:23;;:::i;:::-;2019:32;2040:10;2019:32;;;;;;;;;;;;;;;;;;;;2066:34;2089:10;2066:34;;;;;;;;;;;;;;;;;;;;1665:442;:::o;3420:187:5:-;3497:12;1936:66:8;3512:18:5;;3497:33;;3576:14;3570:4;3563:28;3549:52;;:::o;1790:151:6:-;1851:28;1898:14;1913:20;;;;;;;;;;;;;;;;;1898:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1891:43;;1790:151;:::o;3428:237:0:-;3497:24;3509:11;3497;;;:24;;:::i;:::-;3496:25;3488:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3552:32;3587:19;:17;;;:19;;:::i;:::-;3552:54;;3654:4;3616:3;:22;;:35;3639:11;3616:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3428:237;;:::o;2113:189::-;2180:4;2196:32;2231:19;:17;;;:19;;:::i;:::-;2196:54;;2267:3;:22;;:28;2290:4;2267:28;;;;;;;;;;;;;;;;;;;;;;;;;2260:35;;;2113:189;;;:::o;2454:9432:5:-;;;;;;;" - }, - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "upgradeActivationDelay", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "FinalizedImplementation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "initializer", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bool", - "name": "finalize", - "type": "bool" - } - ], - "name": "ImplementationAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "initializer", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bool", - "name": "finalize", - "type": "bool" - } - ], - "name": "ImplementationRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "initializer", - "type": "bytes" - } - ], - "name": "ImplementationUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "acceptedGovernor", - "type": "address" - } - ], - "name": "LogNewGovernorAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "nominatedGovernor", - "type": "address" - } - ], - "name": "LogNominatedGovernor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "LogNominationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "removedGovernor", - "type": "address" - } - ], - "name": "LogRemovedGovernor", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "PROXY_GOVERNANCE_TAG", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROXY_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UPGRADE_DELAY_SLOT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool" - } - ], - "name": "addImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getUpgradeActivationDelay", - "outputs": [ - { - "internalType": "uint256", - "name": "delay", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "isNotFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "notFinal", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxyAcceptGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxyCancelNomination", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "proxyIsGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newGovernor", - "type": "address" - } - ], - "name": "proxyNominateNewGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governorForRemoval", - "type": "address" - } - ], - "name": "proxyRemoveGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool" - } - ], - "name": "removeImplementation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ] -} diff --git a/crates/l2/starknet-proxy-client/src/clients/mod.rs b/crates/l2/starknet-proxy-client/src/clients/mod.rs new file mode 100644 index 0000000..dbc44bb --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/clients/mod.rs @@ -0,0 +1,3 @@ +pub mod proxy; +pub mod proxy_3_0_2; +pub mod proxy_5_0_0; diff --git a/crates/l2/starknet-proxy-client/src/proxy_support.rs b/crates/l2/starknet-proxy-client/src/clients/proxy.rs similarity index 58% rename from crates/l2/starknet-proxy-client/src/proxy_support.rs rename to crates/l2/starknet-proxy-client/src/clients/proxy.rs index beba2b5..e07c276 100644 --- a/crates/l2/starknet-proxy-client/src/proxy_support.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy.rs @@ -1,27 +1,11 @@ use async_trait::async_trait; -use ethers::{ - abi::AbiEncode, - contract::{ContractError, EthAbiCodec, EthAbiType}, - prelude::abigen, - providers::Middleware, - types::{Address, Bytes, TransactionReceipt, I256, U256}, -}; - +use ethers::abi::AbiEncode; +use ethers::addressbook::Address; +use ethers::contract::{EthAbiCodec, EthAbiType}; +use ethers::middleware::Middleware; +use ethers::prelude::{Bytes, TransactionReceipt, I256, U256}; use utils::errors::Error; -abigen!( - ProxySupport, - r#"[ - function isFrozen() external view virtual returns (bool) - function initialize(bytes calldata data) external notCalledDirectly - function upgradeTo(address newImplementation, bytes calldata data, bool finalize) external payable onlyGovernance notFinalized notFrozen - function addImplementation(address newImplementation, bytes calldata data, bool finalize) external onlyGovernance - function proxyNominateNewGovernor(address newGovernor) external - function proxyRemoveGovernor(address governorForRemoval) external - function proxyAcceptGovernance() external - ]"#, -); - #[async_trait] pub trait ProxySupportTrait { async fn is_frozen(&self) -> Result>; @@ -54,96 +38,66 @@ pub trait ProxySupportTrait { } #[async_trait] -impl ProxySupportTrait for T -where - T: AsRef> + Send + Sync, -{ - async fn is_frozen(&self) -> Result> { - self.as_ref().is_frozen().call().await.map_err(Into::into) - } - - async fn initialize(&self, data: Bytes) -> Result, Error> { - self.as_ref() - .initialize(data) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - +pub trait ProxySupportLatestTrait { + async fn is_frozen(&self) -> Result>; + async fn initialize(&self, data: Bytes) -> Result, Error>; async fn initialize_with( &self, data: ProxyInitializeData, - ) -> Result, Error> { - self.initialize(data.into()).await - } - + ) -> Result, Error>; async fn upgrade_to( &self, data: Bytes, implementation_address: Address, finalized: bool, - ) -> Result, Error> { - self.as_ref() - .upgrade_to(implementation_address, data, finalized) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - + ) -> Result, Error>; async fn add_implementation( &self, data: Bytes, implementation_address: Address, finalized: bool, - ) -> Result, Error> { - self.as_ref() - .add_implementation(implementation_address, data, finalized) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - + ) -> Result, Error>; async fn proxy_nominate_new_governor( &self, new_governor: Address, - ) -> Result, Error> { - self.as_ref() - .proxy_nominate_new_governor(new_governor) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - + ) -> Result, Error>; async fn proxy_remove_governance( &self, governor: Address, - ) -> Result, Error> { - self.as_ref() - .proxy_remove_governor(governor) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn proxy_accept_governance(&self) -> Result, Error> { - self.as_ref() - .proxy_accept_governance() - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } + ) -> Result, Error>; + async fn proxy_accept_governance(&self) -> Result, Error>; + async fn register_app_governor( + &self, + account: Address, + ) -> Result, Error>; + async fn register_app_role_admin( + &self, + account: Address, + ) -> Result, Error>; + async fn register_governance_admin( + &self, + account: Address, + ) -> Result, Error>; + async fn register_operator( + &self, + account: Address, + ) -> Result, Error>; + async fn register_security_admin( + &self, + account: Address, + ) -> Result, Error>; + async fn register_security_agent( + &self, + account: Address, + ) -> Result, Error>; + async fn register_token_admin( + &self, + account: Address, + ) -> Result, Error>; + async fn register_upgrade_governor( + &self, + account: Address, + ) -> Result, Error>; } #[derive(Debug, Clone, Default, PartialEq, EthAbiType, EthAbiCodec)] diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs new file mode 100644 index 0000000..0362f55 --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs @@ -0,0 +1,113 @@ +use crate::clients::proxy::{ProxyInitializeData, ProxySupportTrait}; +use async_trait::async_trait; +use ethers::addressbook::Address; +use ethers::contract::{abigen, ContractError}; +use ethers::middleware::Middleware; +use ethers::prelude::{Bytes, TransactionReceipt}; +use utils::errors::Error; + +abigen!( + ProxySupport, + r#"[ + function isFrozen() external view virtual returns (bool) + function initialize(bytes calldata data) external notCalledDirectly + function upgradeTo(address newImplementation, bytes calldata data, bool finalize) external payable onlyGovernance notFinalized notFrozen + function addImplementation(address newImplementation, bytes calldata data, bool finalize) external onlyGovernance + function proxyNominateNewGovernor(address newGovernor) external + function proxyRemoveGovernor(address governorForRemoval) external + function proxyAcceptGovernance() external + ]"#, +); + +#[async_trait] +impl ProxySupportTrait for T +where + T: AsRef> + Send + Sync, +{ + async fn is_frozen(&self) -> Result> { + self.as_ref().is_frozen().call().await.map_err(Into::into) + } + + async fn initialize(&self, data: Bytes) -> Result, Error> { + self.as_ref() + .initialize(data) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn initialize_with( + &self, + data: ProxyInitializeData, + ) -> Result, Error> { + self.initialize(data.into()).await + } + + async fn upgrade_to( + &self, + data: Bytes, + implementation_address: Address, + finalized: bool, + ) -> Result, Error> { + self.as_ref() + .upgrade_to(implementation_address, data, finalized) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn add_implementation( + &self, + data: Bytes, + implementation_address: Address, + finalized: bool, + ) -> Result, Error> { + self.as_ref() + .add_implementation(implementation_address, data, finalized) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_nominate_new_governor( + &self, + new_governor: Address, + ) -> Result, Error> { + self.as_ref() + .proxy_nominate_new_governor(new_governor) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_remove_governance( + &self, + governor: Address, + ) -> Result, Error> { + self.as_ref() + .proxy_remove_governor(governor) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_accept_governance(&self) -> Result, Error> { + self.as_ref() + .proxy_accept_governance() + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } +} diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs new file mode 100644 index 0000000..5c0f4d3 --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs @@ -0,0 +1,226 @@ +use crate::clients::proxy::{ProxyInitializeData, ProxySupportLatestTrait}; +use async_trait::async_trait; +use ethers::addressbook::Address; +use ethers::contract::{abigen, ContractError}; +use ethers::middleware::Middleware; +use ethers::prelude::{Bytes, TransactionReceipt}; +use utils::errors::Error; + +abigen!( + ProxySupportLatest, + r#"[ + function isFrozen() external view virtual returns (bool) + function initialize(bytes calldata data) external notCalledDirectly + function upgradeTo(address newImplementation, bytes calldata data, bool finalize) external payable onlyGovernance notFinalized notFrozen + function addImplementation(address newImplementation, bytes calldata data, bool finalize) external onlyGovernance + function proxyNominateNewGovernor(address newGovernor) external + function proxyRemoveGovernor(address governorForRemoval) external + function proxyAcceptGovernance() external + + function register_app_governor(address account) external + function registerAppRoleAdmin(address account) external + function registerGovernanceAdmin(address account) external + function registerOperator(address account) external + function register_security_admin(address account) external + function registerSecurityAgent(address account) external + function registerTokenAdmin(address account) external + function registerUpgradeGovernor(address account) external + ]"#, +); + +#[async_trait] +impl ProxySupportLatestTrait for T +where + T: AsRef> + Send + Sync, +{ + async fn is_frozen(&self) -> Result> { + self.as_ref().is_frozen().call().await.map_err(Into::into) + } + + async fn initialize(&self, data: Bytes) -> Result, Error> { + self.as_ref() + .initialize(data) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn initialize_with( + &self, + data: ProxyInitializeData, + ) -> Result, Error> { + self.initialize(data.into()).await + } + + async fn upgrade_to( + &self, + data: Bytes, + implementation_address: Address, + finalized: bool, + ) -> Result, Error> { + self.as_ref() + .upgrade_to(implementation_address, data, finalized) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn add_implementation( + &self, + data: Bytes, + implementation_address: Address, + finalized: bool, + ) -> Result, Error> { + self.as_ref() + .add_implementation(implementation_address, data, finalized) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_nominate_new_governor( + &self, + new_governor: Address, + ) -> Result, Error> { + self.as_ref() + .proxy_nominate_new_governor(new_governor) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_remove_governance( + &self, + governor: Address, + ) -> Result, Error> { + self.as_ref() + .proxy_remove_governor(governor) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn proxy_accept_governance(&self) -> Result, Error> { + self.as_ref() + .proxy_accept_governance() + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_app_governor( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_app_governor(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_app_role_admin( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_app_role_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_governance_admin( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_governance_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_operator( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_operator(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_security_admin( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_security_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_security_agent( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_security_agent(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_token_admin( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_token_admin(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } + + async fn register_upgrade_governor( + &self, + account: Address, + ) -> Result, Error> { + self.as_ref() + .register_upgrade_governor(account) + .send() + .await + .map_err(Into::>::into)? + .await + .map_err(Into::into) + } +} diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 97cf112..938e449 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -29,68 +29,23 @@ pub enum Error { } const UNSAFE_PROXY: &str = include_str!("artifacts/UnsafeProxy.json"); -const SAFE_PROXY: &str = include_str!("artifacts/Proxy.json"); const SAFE_PROXY_3_0_2: &str = include_str!("artifacts/Proxy_3_0_2.json"); const SAFE_PROXY_5_0_0: &str = include_str!("artifacts/Proxy_5_0_0.json"); -/// Deploys new unsafe proxy contract: -/// - Implementation can be set only once at initialization -/// - Traditional (Safe) proxies can be upgraded multiple times -pub async fn deploy_contract_behind_unsafe_proxy( - client: Arc, - contract_path: &str, - constructor_args: T, -) -> Result, LocalWalletSignerMiddleware>, Error> -{ - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; - - let proxy_contract = deploy_contract(client.clone(), UNSAFE_PROXY, contract.address()).await?; - - Ok(proxy_contract) -} - -/// Here we have three deploy behind safe proxy functions : -/// ------------------------------------------------------- -/// -/// - `deploy_contract_behind_safe_proxy` : -/// This function will deploy the contract behind the proxy that is used by starknet in deployment of the proxies. -/// - `deploy_contract_behind_safe_proxy_3_0_2` : -/// This function will deploy the contract behind the proxy that is being used by chains such as paradex and kakarot. -/// - `deploy_contract_behind_safe_proxy_5_0_0` : -/// This function will deploy the contract behind the latest version of the starknet proxy currently used in the token bridge : `0xF5b6Ee2CAEb6769659f6C091D209DfdCaF3F69Eb` -/// --------------------------------------------------------- - -pub async fn deploy_contract_behind_safe_proxy( - client: Arc, - contract_path: &str, - constructor_args: T, -) -> Result< - ( - ContractInstance, LocalWalletSignerMiddleware>, - ContractInstance, LocalWalletSignerMiddleware>, - ), - Error, -> { - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; - - log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); - - let proxy_contract = - deploy_contract(client.clone(), SAFE_PROXY, Token::Uint(U256::from(0))).await?; - - log::debug!( - "ℹ️ Proxy for contract [{:?}] deployed : {:?}", - contract.address().clone(), - proxy_contract.address() - ); - - Ok((proxy_contract, contract)) +pub enum ProxyVersion { + /// deploys unsafe proxy. + UnsafeProxy, + /// deploys safe proxy (starknet proxy version 3.0.2) + SafeProxy, + /// deploys safe proxy (starknet proxy version 5.0.0) + SafeProxyLatest, } -pub async fn deploy_contract_behind_safe_proxy_3_0_2( +pub async fn deploy_contract_behind_proxy( client: Arc, contract_path: &str, constructor_args: T, + proxy_type: ProxyVersion, ) -> Result< ( ContractInstance, LocalWalletSignerMiddleware>, @@ -102,35 +57,14 @@ pub async fn deploy_contract_behind_safe_proxy_3_0_2( log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); - let proxy_contract = - deploy_contract(client.clone(), SAFE_PROXY_3_0_2, Token::Uint(U256::from(0))).await?; - - log::debug!( - "ℹ️ Proxy for contract [{:?}] deployed : {:?}", - contract.address().clone(), - proxy_contract.address() - ); - - Ok((proxy_contract, contract)) -} - -pub async fn deploy_contract_behind_safe_proxy_5_0_0( - client: Arc, - contract_path: &str, - constructor_args: T, -) -> Result< - ( - ContractInstance, LocalWalletSignerMiddleware>, - ContractInstance, LocalWalletSignerMiddleware>, - ), - Error, -> { - let contract = deploy_contract(client.clone(), contract_path, constructor_args).await?; - - log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); + let type_of_proxy = match proxy_type { + ProxyVersion::SafeProxy => SAFE_PROXY_3_0_2, + ProxyVersion::SafeProxyLatest => SAFE_PROXY_5_0_0, + ProxyVersion::UnsafeProxy => UNSAFE_PROXY, + }; let proxy_contract = - deploy_contract(client.clone(), SAFE_PROXY_5_0_0, Token::Uint(U256::from(0))).await?; + deploy_contract(client.clone(), type_of_proxy, Token::Uint(U256::from(0))).await?; log::debug!( "ℹ️ Proxy for contract [{:?}] deployed : {:?}", diff --git a/crates/l2/starknet-proxy-client/src/lib.rs b/crates/l2/starknet-proxy-client/src/lib.rs index 6c533d8..4ecad0d 100644 --- a/crates/l2/starknet-proxy-client/src/lib.rs +++ b/crates/l2/starknet-proxy-client/src/lib.rs @@ -1,2 +1,2 @@ +pub mod clients; pub mod deploy; -pub mod proxy_support; diff --git a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs index e7bf206..2c033a9 100644 --- a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs +++ b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs @@ -1,15 +1,15 @@ use std::sync::Arc; use crate::interfaces::token_bridge::StarknetTokenBridge; -use starknet_proxy_client::proxy_support::ProxySupport; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; /// Client to interact with a Token Bridge (ERC20) pub struct StarknetTokenBridgeContractClient { token_bridge: StarknetTokenBridge, - proxy_support: ProxySupport, + proxy_support: ProxySupportLatest, token_bridge_implementation: Address, } @@ -21,7 +21,7 @@ impl StarknetTokenBridgeContractClient { ) -> Self { Self { token_bridge: StarknetTokenBridge::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupportLatest::new(address, client.clone()), token_bridge_implementation: implementation_address, } } @@ -33,8 +33,8 @@ impl AsRef> for StarknetTokenBr } } -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &ProxySupportLatest { &self.proxy_support } } diff --git a/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs b/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs index 3c6d40e..db568df 100644 --- a/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs +++ b/crates/l2/starknet-token-bridge-client/src/interfaces/token_bridge.rs @@ -21,11 +21,11 @@ abigen!( function disableWithdrawalLimit(address token) external onlySecurityAdmin function setMaxTotalBalance(address token, uint256 maxTotalBalance_) external onlyAppGovernor - function registerAppGovernor(address account) external + function register_app_governor(address account) external function registerAppRoleAdmin(address account) external function registerGovernanceAdmin(address account) external function registerOperator(address account) external - function registerSecurityAdmin(address account) external + function register_security_admin(address account) external function registerSecurityAgent(address account) external function registerTokenAdmin(address account) external function registerUpgradeGovernor(address account) external @@ -73,38 +73,6 @@ pub trait StarknetTokenBridgeTrait { token: Address, max_total_balance: U256, ) -> Result, Error>; - async fn register_app_governor( - &self, - account: Address, - ) -> Result, Error>; - async fn register_app_role_admin( - &self, - account: Address, - ) -> Result, Error>; - async fn register_governance_admin( - &self, - account: Address, - ) -> Result, Error>; - async fn register_operator( - &self, - account: Address, - ) -> Result, Error>; - async fn register_security_admin( - &self, - account: Address, - ) -> Result, Error>; - async fn register_security_agent( - &self, - account: Address, - ) -> Result, Error>; - async fn register_token_admin( - &self, - account: Address, - ) -> Result, Error>; - async fn register_upgrade_governor( - &self, - account: Address, - ) -> Result, Error>; async fn identify(&self) -> Result>; async fn estimate_deposit_fee_wei(&self) -> Result>; @@ -205,110 +173,6 @@ where .map_err(Into::into) } - async fn register_app_governor( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_app_governor(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_app_role_admin( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_app_role_admin(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_governance_admin( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_governance_admin(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_operator( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_operator(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_security_admin( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_security_admin(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_security_agent( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_security_agent(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_token_admin( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_token_admin(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - - async fn register_upgrade_governor( - &self, - account: Address, - ) -> Result, Error> { - self.as_ref() - .register_upgrade_governor(account) - .send() - .await - .map_err(Into::>::into)? - .await - .map_err(Into::into) - } - async fn identify(&self) -> Result> { self.as_ref().identify().call().await.map_err(Into::into) } diff --git a/crates/l2/starknet-token-bridge-client/src/lib.rs b/crates/l2/starknet-token-bridge-client/src/lib.rs index ed99bd6..b0be912 100644 --- a/crates/l2/starknet-token-bridge-client/src/lib.rs +++ b/crates/l2/starknet-token-bridge-client/src/lib.rs @@ -1,9 +1,7 @@ use std::sync::Arc; use clients::token_bridge::StarknetTokenBridgeContractClient; -use starknet_proxy_client::deploy::{ - deploy_contract_behind_safe_proxy, deploy_contract_behind_unsafe_proxy, Error, -}; +use starknet_proxy_client::deploy::{deploy_contract_behind_proxy, Error, ProxyVersion}; use utils::{LocalWalletSignerMiddleware, NO_CONSTRUCTOR_ARG}; pub mod clients; @@ -15,17 +13,18 @@ pub async fn deploy_starknet_token_bridge_behind_unsafe_proxy( client: Arc, ) -> Result { // Deploy the Starknet Token Bridge contract (no explicit constructor) - let token_bridge_contract = deploy_contract_behind_unsafe_proxy( + let token_bridge_contract = deploy_contract_behind_proxy( client.clone(), STARKNET_TOKEN_BRIDGE, NO_CONSTRUCTOR_ARG, + ProxyVersion::UnsafeProxy, ) .await?; Ok(StarknetTokenBridgeContractClient::new( - token_bridge_contract.address(), + token_bridge_contract.0.address(), client.clone(), - token_bridge_contract.address(), + token_bridge_contract.1.address(), )) } @@ -34,10 +33,11 @@ pub async fn deploy_starknet_token_bridge_behind_safe_proxy( ) -> Result { // Deploy the Starknet Token Bridge contract (no explicit constructor) let (token_bridge_contract, token_bridge_contract_implementation) = - deploy_contract_behind_safe_proxy( + deploy_contract_behind_proxy( client.clone(), STARKNET_TOKEN_BRIDGE, NO_CONSTRUCTOR_ARG, + ProxyVersion::SafeProxyLatest, ) .await?; From f8fb4da36bc2b278e14c28292736f69ad877f164 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Jul 2024 21:32:59 +0530 Subject: [PATCH 04/12] update : proxy client --- .../src/clients/starkgate_manager.rs | 10 +++++----- .../src/clients/starkgate_registry.rs | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs index de7c88a..b58987e 100644 --- a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs +++ b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs @@ -4,11 +4,11 @@ use crate::interfaces::manager::StarkgateManager; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; pub struct StarkgateManagerContractClient { manager: StarkgateManager, - proxy_support: ProxySupport, + proxy_support: ProxySupportLatest, manager_implementation: Address, } @@ -20,7 +20,7 @@ impl StarkgateManagerContractClient { ) -> Self { Self { manager: StarkgateManager::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupportLatest::new(address, client.clone()), manager_implementation: implementation_address, } } @@ -32,8 +32,8 @@ impl AsRef> for StarkgateManagerCo } } -impl AsRef> for StarkgateManagerContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarkgateManagerContractClient { + fn as_ref(&self) -> &ProxySupportLatest { &self.proxy_support } } diff --git a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs index 76275c0..f35ed53 100644 --- a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs +++ b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs @@ -4,11 +4,11 @@ use crate::interfaces::registry::StarkgateRegistry; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; pub struct StarkgateRegistryContractClient { registry: StarkgateRegistry, - proxy_support: ProxySupport, + proxy_support: ProxySupportLatest, registry_implementation: Address, } @@ -20,7 +20,7 @@ impl StarkgateRegistryContractClient { ) -> Self { Self { registry: StarkgateRegistry::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupportLatest::new(address, client.clone()), registry_implementation: implementation_address, } } @@ -31,8 +31,8 @@ impl AsRef> for StarkgateRegistry } } -impl AsRef> for StarkgateRegistryContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarkgateRegistryContractClient { + fn as_ref(&self) -> &ProxySupportLatest { &self.proxy_support } } From ad86ed70d170e967042e0e4e7a3b1697fb66da92 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Tue, 2 Jul 2024 22:32:52 +0530 Subject: [PATCH 05/12] feat : updated funcs --- crates/l2/starkgate-manager-client/src/lib.rs | 4 ++-- crates/l2/starkgate-registry-client/src/lib.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/l2/starkgate-manager-client/src/lib.rs b/crates/l2/starkgate-manager-client/src/lib.rs index f6b0328..3558591 100644 --- a/crates/l2/starkgate-manager-client/src/lib.rs +++ b/crates/l2/starkgate-manager-client/src/lib.rs @@ -16,7 +16,7 @@ pub async fn deploy_starkgate_manager_behind_unsafe_proxy( client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::UnsafeProxy, ) .await?; @@ -35,7 +35,7 @@ pub async fn deploy_starkgate_manager_behind_safe_proxy( client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::SafeProxyLatest, ) .await?; diff --git a/crates/l2/starkgate-registry-client/src/lib.rs b/crates/l2/starkgate-registry-client/src/lib.rs index d84c1fa..28bb98f 100644 --- a/crates/l2/starkgate-registry-client/src/lib.rs +++ b/crates/l2/starkgate-registry-client/src/lib.rs @@ -36,7 +36,7 @@ pub async fn deploy_starkgate_registry_behind_safe_proxy( client.clone(), STARKGATE_REGISTRY, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::SafeProxyLatest, ) .await?; From 47c100bac94b8345c3277546ec973d08d2e88284 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 16:54:00 +0530 Subject: [PATCH 06/12] feat : added temp anvil logs in proxy 5.0.0 --- .../src/artifacts/Proxy_5_0_0.json | 1177 +---------------- 1 file changed, 1 insertion(+), 1176 deletions(-) diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json index 0e0f12f..9a5e95a 100644 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json @@ -1,1176 +1 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "upgradeActivationDelay", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "fallback", "stateMutability": "payable" }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "ENABLE_WINDOW_DURATION_SLOT", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PROXY_VERSION", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addImplementation", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getEnableWindowDuration", - "inputs": [], - "outputs": [ - { "name": "duration", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUpgradeActivationDelay", - "inputs": [], - "outputs": [ - { "name": "delay", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "implementation", - "inputs": [], - "outputs": [ - { - "name": "_implementation", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "isAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isNotFinalized", - "inputs": [], - "outputs": [ - { "name": "notFinal", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeImplementation", - "inputs": [ - { - "name": "removedImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeAppRoleAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeGovernanceAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeOperator", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeSecurityAgent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeTokenAdmin", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeUpgradeGovernor", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "upgradeTo", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "finalize", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "event", - "name": "FinalizedImplementation", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationAdded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationRemoved", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "finalize", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ImplementationUpgraded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "initializer", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "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 - } - ], - "bytecode": { - "object": "0x60a060405234801562000010575f80fd5b506040516200257438038062002574833981016040819052620000339162000550565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b5062000568565b33620000ad8180620000b0565b50565b620000ba6200020f565b1562000152576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff166200014c5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200015d565b6200015d8262000260565b62000167620003a3565b1562000204576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620002005760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840162000143565b5050565b6200020081620003f2565b5f80516020620024f48339815191525f9081525f80516020620025348339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200027a5f80516020620024f4833981519152826200045b565b620002b37ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f8051602062002554833981519152620004f9565b620002db5f80516020620025548339815191525f80516020620024f4833981519152620004f9565b620002f55f80516020620024f483398151915280620004f9565b6200032f7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f8051602062002554833981519152620004f9565b620003697f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f8051602062002554833981519152620004f9565b620000ad7f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f80516020620024f4833981519152620004f9565b5f80516020620025148339815191525f9081525f80516020620025348339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c2454819062000259565b6200040c5f805160206200251483398151915280620004f9565b620004467f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f8051602062002514833981519152620004f9565b620000ad5f8051602062002514833981519152825b5f8281525f8051602062002534833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000200575f8281525f8051602062002534833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620025348339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f6020828403121562000561575f80fd5b5051919050565b608051611f73620005815f395f6108e80152611f735ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122031b27e083c40a69a531bbe8c281d749a1aa1a827c30dc11eb2677c87cb15e81f64736f6c6343000818003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99", - "sourceMap": "2986:11128:7:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:3;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:7::1;4015:22:::0;2455:66:5;4416:28:7;4273:187;3989:49:::1;4048:32;4072:7;2810:66:5::0;5407:31:7;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3102:142:4;3916:10:0;3201:36:4;3916:10:0;;3201::4;:36::i;:::-;3133:111;3102:142::o;3250:1072::-;3373:28;:26;:28::i;:::-;3369:485;;;-1:-1:-1;;;;;5259:31:0;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3628:144:4;;;;-1:-1:-1;;;3628:144:4;;405:2:9;3628:144:4;;;387:21:9;444:2;424:18;;;417:30;483:27;463:18;;;456:55;528:18;;3628:144:4;;;;;;;;;3369:485;;;3803:40;3823:19;3803;:40::i;:::-;3868:26;:24;:26::i;:::-;3864:452;;;-1:-1:-1;;;;;5259:31:0;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4085:151:4;;;;-1:-1:-1;;;4085:151:4;;759:2:9;4085:151:4;;;741:21:9;798:2;778:18;;;771:30;837:34;817:18;;;810:62;-1:-1:-1;;;888:18:9;;;881:32;930:19;;4085:151:4;557:398:9;4085:151:4;3250:1072;;:::o;3864:452::-;4267:38;4285:19;4267:17;:38::i;2790:152::-;-1:-1:-1;;;;;;;;;;;2851:4:4;6680:14:0;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;:24;;2851:4:4;;2874:44;:61;;2867:68;;2790:152;:::o;4614:559::-;4690:63;-1:-1:-1;;;;;;;;;;;4733:19:4;4690:24;:63::i;:::-;4763:57;822:64;-1:-1:-1;;;;;;;;;;;4763:27:4;:57::i;:::-;4830:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;4830:27:4;:61::i;:::-;4901:63;-1:-1:-1;;;;;;;;;;;1236:66:4;4901:27;:63::i;:::-;4974:53;1430:66;-1:-1:-1;;;;;;;;;;;4974:27:4;:53::i;:::-;5037:56;2042:66;-1:-1:-1;;;;;;;;;;;5037:27:4;:56::i;:::-;5103:63;2252:66;-1:-1:-1;;;;;;;;;;;5103:27:4;:63::i;2948:148::-;-1:-1:-1;;;;;;;;;;;3007:4:4;6680:14:0;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;:24;;3007:4:4;;3030:42;6595:116:0;4328:280:4;4402:59;-1:-1:-1;;;;;;;;;;;1636:66:4;4402:27;:59::i;:::-;4471;1842:66;-1:-1:-1;;;;;;;;;;;4471:27:4;:59::i;:::-;4540:61;-1:-1:-1;;;;;;;;;;;4581:19:4;9592:227:0;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:0;;;;;;;;-1:-1:-1;;;;;5259:31:0;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:0;;;;;;;;-1:-1:-1;;;;;9705:31:0;;;;;;;;;;:38;;-1:-1:-1;;9705:38:0;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:9:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:9;;14:184;-1:-1:-1;14:184:9:o;557:398::-;2986:11128:7;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122031b27e083c40a69a531bbe8c281d749a1aa1a827c30dc11eb2677c87cb15e81f64736f6c63430008180033", - "sourceMap": "2986:11128:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:7;;216:2:9;7342:42:7;;;198:21:9;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:7;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:7;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:7;;7685:66;;;;-1:-1:-1;;;7685:66:7;;577:2:9;7685:66:7;;;559:21:9;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:9;;;628:52;697:18;;7685:66:7;375:346:9;7685:66:7;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:3;;;;;;;;;;-1:-1:-1;3988:116:3;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:3;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:3;;;;;:::i;:::-;;:::i;2402:119:5:-;;;;;;;;;;-1:-1:-1;2402:119:5;2455:66;2402:119;;;;;1241:25:9;;;1229:2;1214:18;2402:119:5;;;;;;;;4385:137:3;;;;;;;;;;-1:-1:-1;4385:137:3;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:3;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:3;;;;;:::i;:::-;;:::i;6611:122:7:-;;;;;;;;;;-1:-1:-1;6611:122:7;;;;;:::i;:::-;;:::i;2748:128:5:-;;;;;;;;;;-1:-1:-1;2748:128:5;2810:66;2748:128;;2064:135:3;;;;;;;;;;-1:-1:-1;2064:135:3;;;;;:::i;:::-;;:::i;:::-;;;2467:14:9;;2460:22;2442:41;;2430:2;2415:18;2064:135:3;2302:187:9;5572:195:7;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:7;5572:195;;-1:-1:-1;;;;;2658:32:9;;;2640:51;;2628:2;2613:18;5572:195:7;2494:203:9;10655:619:7;;;;;;;;;;-1:-1:-1;10655:619:7;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:7;;;;;:::i;:::-;;:::i;3732:122:3:-;;;;;;;;;;-1:-1:-1;3732:122:3;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:3;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:3;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:3;;;;;:::i;:::-;;:::i;12173:1939:7:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:3:-;;;;;;;;;;-1:-1:-1;2777:139:3;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:3;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:3;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:3;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:3;;;;;:::i;:::-;;:::i;3799:46:7:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:7;;;;;;;;;;;;:::i;2349:143:3:-;;;;;;;;;;-1:-1:-1;2349:143:3;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:3;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:3;;;;;:::i;:::-;;:::i;3740:52:7:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:3;;;;;;;;;;-1:-1:-1;4936:121:3;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:3;;;;;:::i;:::-;;:::i;5050:198:7:-;;;;;;;;;;-1:-1:-1;2810:66:5;5221:11:7;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:5;9196:11:7;9238:14;9016:244;;5184:125:3;;;;;;;;;;-1:-1:-1;5184:125:3;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:3;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:3;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:3;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2042:66:4;4089:7:3;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1842:66:4;3967:7:3;3927:23;:48::i;3356:121::-;3422:48;1026:66:4;3462:7:3;3422:23;:48::i;4385:137::-;4447:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4466:49:::1;1026:66:4;4507:7:3::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:3;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:3;;4833:2:9;5474:42:3;;;4815:21:9;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:3;4631:356:9;5409:118:3;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1430:66:4;3711:7:3;3677:23;:42::i;6611:122:7:-;6694:32;;-1:-1:-1;;;6694:32:7;;5194:2:9;6694:32:7;;;5176:21:9;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:9;;;5245:52;5314:18;;6694:32:7;4992:346:9;2064:135:3;2125:4;2148:44;822:64:4;2184:7:3;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:3:o;10655:619:7:-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;10821:22:7::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:7;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:7;;6593:2:9;11039:58:7::1;::::0;::::1;6575:21:9::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:7::1;6391:351:9::0;11039:58:7::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:7::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:7;::::1;1072:20:8::0;9908:63:7::1;;;::::0;-1:-1:-1;;;9908:63:7;;7279:2:9;9908:63:7::1;::::0;::::1;7261:21:9::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:9;;;7330:50;7397:18;;9908:63:7::1;7077:344:9::0;9908:63:7::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:5::0;5221:11:7;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:7::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:3:-;3799:48;1636:66:4;3839:7:3;3799:23;:48::i;3061:143::-;3126:4;3149:48;2252:66:4;3189:7:3;3149:21;:48::i;2498:128::-;2556:4;2579:40;1430:66:4;2611:7:3;2579:21;:40::i;4110:126::-;4179:50;2252:66:4;4221:7:3;4179:23;:50::i;12173:1939:7:-;1750:45:3;3916:10:0;3061:143:3;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:3;;;;;;;:::i;:::-;2134:66:5;9196:11:7;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:7;;7890:2:9;6773:53:7::1;::::0;::::1;7872:21:9::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:7::1;7688:348:9::0;6773:53:7::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:7;;8243:2:9;7058:53:7::2;::::0;::::2;8225:21:9::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:9;;;8294:45;8356:18;;7058:53:7::2;8041:339:9::0;7058:53:7::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:7::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:7;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:7;;6593:2:9;12581:58:7::3;::::0;::::3;6575:21:9::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:7::3;6391:351:9::0;12581:58:7::3;-1:-1:-1::0;;;;;12657:28:7;::::3;1072:20:8::0;12649:63:7::3;;;::::0;-1:-1:-1;;;12649:63:7;;7279:2:9;12649:63:7::3;::::0;::::3;7261:21:9::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:9;;;7330:50;7397:18;;12649:63:7::3;7077:344:9::0;12649:63:7::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:7::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:7;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:7::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:7;;8587:2:9;12813:139:7::3;::::0;::::3;8569:21:9::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:7::3;8385:347:9::0;12813:139:7::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:7;;8939:2:9;12962:72:7::3;::::0;::::3;8921:21:9::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:9;;;8990:52;9059:18;;12962:72:7::3;8737:346:9::0;12962:72:7::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:7;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:7::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:7;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:7::3;-1:-1:-1::0;;;;;;13246:54:7;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:7::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:7::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:7::3;-1:-1:-1::0;;;13584:37:7::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:7;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:7;;-1:-1:-1;13516:115:7;-1:-1:-1;13516:115:7;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:7;;9831:2:9;13641:45:7::3;::::0;::::3;9813:21:9::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:7::3;9629:349:9::0;13641:45:7::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:7;;10435:2:9;13696:69:7::3;::::0;::::3;10417:21:9::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:7::3;10233:349:9::0;13696:69:7::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:7::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:5;9447:17:7;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:7;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:5;4921:11:7;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:3:-;2840:4;2863:46;1842:66:4;2901:7:3;2863:21;:46::i;4792:138::-;4855:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4874:49:::1;1636:66:4;4915:7:3::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1026:66:4;2328:7:3;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:3;3552:23;:50::i;2922:133::-;2982:4;3005:43;2042:66:4;3040:7:3;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:3;2437:21;:48::i;3232:118::-;3297:46;822:64:4;3335:7:3;3297:23;:46::i;2632:139::-;2695:4;2718:46;1636:66:4;2756:7:3;2718:21;:46::i;4936:121::-;5001:49;1842:66:4;5042:7:3;5001:24;:49::i;4262:117::-;4325:47;822:64:4;4364:7:3;4325:24;:47::i;5184:125::-;5251:51;2252:66:4;5294:7:3;5251:24;:51::i;4528:142::-;4593:7;3916:10:0;-1:-1:-1;;;;;1931:37:3;;;1910:106;;;;-1:-1:-1;;;1910:106:3;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:3;4612:24:::1;:51::i;5063:115::-:0;5125:46;2042:66:4;5163:7:3;5125:24;:46::i;4676:110::-;4736:43;1430:66:4;4771:7:3;4736:24;:43::i;6990:152:0:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:0;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:0;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:0;;10789:2:9;8150:117:0;;;10771:21:9;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:9;;;10911:45;10973:19;;8150:117:0;10587:411:9;8150:117:0;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:0;;;;;;;;-1:-1:-1;;;;;5259:31:0;;;;;;;;;;;;;;;5143:154::o;1160:189:2:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:2;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:2;;;1700:36;:55::i;5904:564:7:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:7;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:7;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:7;-1:-1:-1;;;6321:37:7;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:7;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:7;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:0:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:0;;;;;;;;-1:-1:-1;;;;;9705:31:0;;;;;;;;;;:38;;-1:-1:-1;;9705:38:0;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:0;;;;;;;;-1:-1:-1;;;;;10091:31:0;;;;;;;;;;:39;;-1:-1:-1;;10091:39:0;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:1:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:1;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:1:o;5941:484:0:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:0;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:0;;;;;;;;;;-1:-1:-1;;;6059:349:0;;;;;;;:::i;2248:441:6:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:6;;2348:47;;-1:-1:-1;;;2405:6:6;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:6;;;;;;;;;-1:-1:-1;;;2430:6:6;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:6;;;;;;;;-1:-1:-1;2460:9:6;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:6;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:6;;;;;;;;-1:-1:-1;2575:1:6;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:6;;2596:55;;;;-1:-1:-1;;;2596:55:6;;12894:2:9;2596:55:6;;;12876:21:9;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:6;12692:356:9;2596:55:6;2675:6;2248:441;-1:-1:-1;;;2248:441:6:o;726:173:9:-;794:20;;-1:-1:-1;;;;;843:31:9;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:9;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:9;-1:-1:-1;;;;1888:409:9:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:9;-1:-1:-1;;3366:2:9;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:9;;-1:-1:-1;;2825:612:9:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:9;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:9;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:9:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:9;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:9;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:9;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:9;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:9;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:9;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:9:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:9:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:9;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:9:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:9;;12551:136::o", - "linkReferences": {}, - "immutableReferences": { "702": [{ "start": 2280, "length": 32 }] } - }, - "methodIdentifiers": { - "ENABLE_WINDOW_DURATION_SLOT()": "52b1e35e", - "MAX_UPGRADE_DELAY()": "d38d8d7a", - "PROXY_VERSION()": "c5ab8453", - "UPGRADE_DELAY_SLOT()": "20cea94d", - "addImplementation(address,bytes,bool)": "5e3a97e7", - "getEnableWindowDuration()": "e02904c6", - "getUpgradeActivationDelay()": "72a44f07", - "implementation()": "5c60da1b", - "initialize(bytes)": "439fab91", - "isAppGovernor(address)": "5a5d1bb9", - "isAppRoleAdmin(address)": "8e5224ff", - "isGovernanceAdmin(address)": "cb1cccce", - "isNotFinalized()": "e907fa3c", - "isOperator(address)": "6d70f7ae", - "isSecurityAdmin(address)": "d08fb6cb", - "isSecurityAgent(address)": "757bd9ab", - "isTokenAdmin(address)": "a2bdde3d", - "isUpgradeGovernor(address)": "6c04d9d5", - "registerAppGovernor(address)": "cdd1f70d", - "registerAppRoleAdmin(address)": "17896383", - "registerGovernanceAdmin(address)": "9463629a", - "registerOperator(address)": "3682a450", - "registerSecurityAdmin(address)": "62a14376", - "registerSecurityAgent(address)": "0e770f23", - "registerTokenAdmin(address)": "0b3a2d21", - "registerUpgradeGovernor(address)": "6fc97cbf", - "removeImplementation(address,bytes,bool)": "5cef2e86", - "renounceRole(bytes32,address)": "36568abe", - "revokeAppGovernor(address)": "deec9c5a", - "revokeAppRoleAdmin(address)": "2f951985", - "revokeGovernanceAdmin(address)": "ee0e6807", - "revokeOperator(address)": "fad8b32a", - "revokeSecurityAdmin(address)": "8101b64c", - "revokeSecurityAgent(address)": "d9fa7091", - "revokeTokenAdmin(address)": "fa0f73ba", - "revokeUpgradeGovernor(address)": "ed9ef16a", - "upgradeTo(address,bytes,bool)": "7147855d" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0xd71451e1ded6055f3abd5ce64ef273ff11dc03169926e5a090a50d9154aa96b3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://3309935f4a5eb00b2aa9056aefc665e14688e428962222f599874f4358ee39d9\",\"dweb:/ipfs/QmU1je1hrK3YpamoX4Rya24s8k7q5Ko1bH9LCsaqFo7Rx8\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.24+commit.e11b9ed9" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "upgradeActivationDelay", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "FinalizedImplementation", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationAdded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bool", - "name": "finalize", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationRemoved", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes", - "name": "initializer", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ImplementationUpgraded", - "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": "payable", "type": "fallback" }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "ENABLE_WINDOW_DURATION_SLOT", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "MAX_UPGRADE_DELAY", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "PROXY_VERSION", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "UPGRADE_DELAY_SLOT", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addImplementation" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getEnableWindowDuration", - "outputs": [ - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getUpgradeActivationDelay", - "outputs": [ - { "internalType": "uint256", "name": "delay", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ] - }, - { - "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], - "stateMutability": "pure", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isAppRoleAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isGovernanceAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isNotFinalized", - "outputs": [ - { "internalType": "bool", "name": "notFinal", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isOperator", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSecurityAgent", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTokenAdmin", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isUpgradeGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerUpgradeGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "removedImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeImplementation" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppGovernor" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeAppRoleAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeGovernanceAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeSecurityAgent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeTokenAdmin" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeUpgradeGovernor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "finalize", "type": "bool" } - ], - "stateMutability": "payable", - "type": "function", - "name": "upgradeTo" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "cairo-lang/=lib/cairo-lang/src/", - "forge-std/=lib/forge-std/src/", - "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", - "starknet-token/=lib/starknet-token/src/starkware/isd/", - "starkware/isd/=lib/starknet-token/src/starkware/isd/", - "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", - "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/Proxy_5_0_0.sol": "Proxy" }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "src/5_0_0/AccessControl.sol": { - "keccak256": "0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b", - "urls": [ - "bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333", - "dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt" - ], - "license": "MIT" - }, - "src/5_0_0/NamedStorage.sol": { - "keccak256": "0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3", - "urls": [ - "bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917", - "dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/ProxyStorage.sol": { - "keccak256": "0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03", - "urls": [ - "bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc", - "dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/Roles.sol": { - "keccak256": "0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1", - "urls": [ - "bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06", - "dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/RolesLib.sol": { - "keccak256": "0xd71451e1ded6055f3abd5ce64ef273ff11dc03169926e5a090a50d9154aa96b3", - "urls": [ - "bzz-raw://3309935f4a5eb00b2aa9056aefc665e14688e428962222f599874f4358ee39d9", - "dweb:/ipfs/QmU1je1hrK3YpamoX4Rya24s8k7q5Ko1bH9LCsaqFo7Rx8" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/StorageSlots.sol": { - "keccak256": "0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272", - "urls": [ - "bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c", - "dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran" - ], - "license": "Apache-2.0." - }, - "src/5_0_0/Strings.sol": { - "keccak256": "0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2", - "urls": [ - "bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7", - "dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f" - ], - "license": "MIT" - }, - "src/Proxy_5_0_0.sol": { - "keccak256": "0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e", - "urls": [ - "bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155", - "dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW" - ], - "license": "Apache-2.0." - }, - "src/libraries/Addresses.sol": { - "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", - "urls": [ - "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", - "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" - ], - "license": "Apache-2.0." - } - }, - "version": 1 - }, - "id": 7 -} +{"abi":[{"type":"constructor","inputs":[{"name":"upgradeActivationDelay","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_UPGRADE_DELAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROXY_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_DELAY_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addImplementation","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getEnableWindowDuration","inputs":[],"outputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUpgradeActivationDelay","inputs":[],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"implementation","inputs":[],"outputs":[{"name":"_implementation","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isNotFinalized","inputs":[],"outputs":[{"name":"notFinal","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeImplementation","inputs":[{"name":"removedImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"FinalizedImplementation","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImplementationAdded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationRemoved","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationUpgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"}],"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}],"bytecode":{"object":"0x60a060405234801562000010575f80fd5b50604051620027e8380380620027e88339810160408190526200003391620006a1565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b5062000744565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff929190620006fe565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027ba602e913962000484565b62000212620004cf565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b6816200051e565b620001336040518060600160405280602c81526020016200270e602c913962000484565b620000e3816200058c60201b6200157c1760201c565b5f805160206200273a8339815191525f9081525f805160206200277a8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200273a83398151915282620005ac565b620003947ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200279a8339815191526200064a565b620003bc5f805160206200279a8339815191525f805160206200273a8339815191526200064a565b620003d65f805160206200273a833981519152806200064a565b620004107f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200279a8339815191526200064a565b6200044a7f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200279a8339815191526200064a565b620000e37f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200273a8339815191526200064a565b620000e3816040516024016200049b919062000729565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f805160206200275a8339815191525f9081525f805160206200277a8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005385f805160206200275a833981519152806200064a565b620005727f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200275a8339815191526200064a565b620000e35f805160206200275a83398151915282620005ac565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f805160206200277a833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f805160206200277a833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f805160206200277a8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006b2575f80fd5b5051919050565b5f81518084525f5b81811015620006df57602081850181015186830182015201620006c1565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f620007126040830185620006b9565b905060018060a01b03831660208301529392505050565b602081525f6200073d6020830184620006b9565b9392505050565b608051611fb16200075d5f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122010bff76d73dcfd786224e4e6f1dd55ea8b8f3cb9d6dd0c7f15219ee8c85f11c264736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229","sourceMap":"2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:559::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999:57;854:64;-1:-1:-1;;;;;;;;;;;4999:27:8;:57::i;:::-;5066:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5066:27:8;:61::i;:::-;5137:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5137:27;:63::i;:::-;5210:53;1462:66;-1:-1:-1;;;;;;;;;;;5210:27:8;:53::i;:::-;5273:56;2074:66;-1:-1:-1;;;;;;;;;;;5273:27:8;:56::i;:::-;5339:63;2284:66;-1:-1:-1;;;;;;;;;;;5339:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122010bff76d73dcfd786224e4e6f1dd55ea8b8f3cb9d6dd0c7f15219ee8c85f11c264736f6c63430008180033","sourceMap":"2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15","linkReferences":{},"immutableReferences":{"8949":[{"start":2280,"length":32}]}},"methodIdentifiers":{"ENABLE_WINDOW_DURATION_SLOT()":"52b1e35e","MAX_UPGRADE_DELAY()":"d38d8d7a","PROXY_VERSION()":"c5ab8453","UPGRADE_DELAY_SLOT()":"20cea94d","addImplementation(address,bytes,bool)":"5e3a97e7","getEnableWindowDuration()":"e02904c6","getUpgradeActivationDelay()":"72a44f07","implementation()":"5c60da1b","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isGovernanceAdmin(address)":"cb1cccce","isNotFinalized()":"e907fa3c","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","removeImplementation(address,bytes,bool)":"5cef2e86","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","upgradeTo(address,bytes,bool)":"7147855d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x2cdde9b0485fe296c4cb84de53192307b702fc993b66b8a40a5abb34a8cf23fa\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://645eead17db9c4d58b4f00b09e1dd213cec2a87f3fd9e7864d9cab72f405097e\",\"dweb:/ipfs/QmNW8RHp8CbM1NDGTt6fw6CQgA4kE64VwVqPHySKQCQRSA\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"upgradeActivationDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"FinalizedImplementation","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false}],"type":"event","name":"ImplementationUpgraded","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":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROXY_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_DELAY_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"addImplementation"},{"inputs":[],"stateMutability":"view","type":"function","name":"getEnableWindowDuration","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUpgradeActivationDelay","outputs":[{"internalType":"uint256","name":"delay","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"implementation","outputs":[{"internalType":"address","name":"_implementation","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isNotFinalized","outputs":[{"internalType":"bool","name":"notFinal","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"removedImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeImplementation"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"payable","type":"function","name":"upgradeTo"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["cairo-lang/=lib/cairo-lang/src/","forge-std/=lib/forge-std/src/","starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/","starknet-token/=lib/starknet-token/src/starkware/isd/","starkware/isd/=lib/starknet-token/src/starkware/isd/","starkware/solidity/=lib/cairo-lang/src/starkware/solidity/","starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Proxy_5_0_0.sol":"Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f","urls":["bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f","dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg"],"license":"MIT"},"src/5_0_0/AccessControl.sol":{"keccak256":"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b","urls":["bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333","dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt"],"license":"MIT"},"src/5_0_0/NamedStorage.sol":{"keccak256":"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3","urls":["bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917","dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39"],"license":"Apache-2.0."},"src/5_0_0/ProxyStorage.sol":{"keccak256":"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03","urls":["bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc","dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA"],"license":"Apache-2.0."},"src/5_0_0/Roles.sol":{"keccak256":"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1","urls":["bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06","dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG"],"license":"Apache-2.0."},"src/5_0_0/RolesLib.sol":{"keccak256":"0x2cdde9b0485fe296c4cb84de53192307b702fc993b66b8a40a5abb34a8cf23fa","urls":["bzz-raw://645eead17db9c4d58b4f00b09e1dd213cec2a87f3fd9e7864d9cab72f405097e","dweb:/ipfs/QmNW8RHp8CbM1NDGTt6fw6CQgA4kE64VwVqPHySKQCQRSA"],"license":"Apache-2.0."},"src/5_0_0/StorageSlots.sol":{"keccak256":"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272","urls":["bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c","dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran"],"license":"Apache-2.0."},"src/5_0_0/Strings.sol":{"keccak256":"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2","urls":["bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7","dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f"],"license":"MIT"},"src/Proxy_5_0_0.sol":{"keccak256":"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e","urls":["bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155","dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW"],"license":"Apache-2.0."},"src/libraries/Addresses.sol":{"keccak256":"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16","urls":["bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a","dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR"],"license":"Apache-2.0."}},"version":1},"id":12} \ No newline at end of file From 7b180e1c9da19b30c54af251d9d2adc74893713f Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 17:11:06 +0530 Subject: [PATCH 07/12] feat : added temp anvil logs in proxy 5.0.0 --- crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json index 9a5e95a..bc0a4d8 100644 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"upgradeActivationDelay","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_UPGRADE_DELAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROXY_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_DELAY_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addImplementation","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getEnableWindowDuration","inputs":[],"outputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUpgradeActivationDelay","inputs":[],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"implementation","inputs":[],"outputs":[{"name":"_implementation","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isNotFinalized","inputs":[],"outputs":[{"name":"notFinal","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeImplementation","inputs":[{"name":"removedImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"FinalizedImplementation","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImplementationAdded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationRemoved","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationUpgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"}],"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}],"bytecode":{"object":"0x60a060405234801562000010575f80fd5b50604051620027e8380380620027e88339810160408190526200003391620006a1565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b5062000744565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff929190620006fe565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027ba602e913962000484565b62000212620004cf565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b6816200051e565b620001336040518060600160405280602c81526020016200270e602c913962000484565b620000e3816200058c60201b6200157c1760201c565b5f805160206200273a8339815191525f9081525f805160206200277a8339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200273a83398151915282620005ac565b620003947ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f805160206200279a8339815191526200064a565b620003bc5f805160206200279a8339815191525f805160206200273a8339815191526200064a565b620003d65f805160206200273a833981519152806200064a565b620004107f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f805160206200279a8339815191526200064a565b6200044a7f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f805160206200279a8339815191526200064a565b620000e37f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2285f805160206200273a8339815191526200064a565b620000e3816040516024016200049b919062000729565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f805160206200275a8339815191525f9081525f805160206200277a8339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005385f805160206200275a833981519152806200064a565b620005727f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200275a8339815191526200064a565b620000e35f805160206200275a83398151915282620005ac565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f805160206200277a833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f805160206200277a833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f805160206200277a8339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006b2575f80fd5b5051919050565b5f81518084525f5b81811015620006df57602081850181015186830182015201620006c1565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f620007126040830185620006b9565b905060018060a01b03831660208301529392505050565b602081525f6200073d6020830184620006b9565b9392505050565b608051611fb16200075d5f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122010bff76d73dcfd786224e4e6f1dd55ea8b8f3cb9d6dd0c7f15219ee8c85f11c264736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b353e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229","sourceMap":"2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:559::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999:57;854:64;-1:-1:-1;;;;;;;;;;;4999:27:8;:57::i;:::-;5066:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5066:27:8;:61::i;:::-;5137:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5137:27;:63::i;:::-;5210:53;1462:66;-1:-1:-1;;;;;;;;;;;5210:27:8;:53::i;:::-;5273:56;2074:66;-1:-1:-1;;;;;;;;;;;5273:27:8;:56::i;:::-;5339:63;2284:66;-1:-1:-1;;;;;;;;;;;5339:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a264697066735822122010bff76d73dcfd786224e4e6f1dd55ea8b8f3cb9d6dd0c7f15219ee8c85f11c264736f6c63430008180033","sourceMap":"2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15","linkReferences":{},"immutableReferences":{"8949":[{"start":2280,"length":32}]}},"methodIdentifiers":{"ENABLE_WINDOW_DURATION_SLOT()":"52b1e35e","MAX_UPGRADE_DELAY()":"d38d8d7a","PROXY_VERSION()":"c5ab8453","UPGRADE_DELAY_SLOT()":"20cea94d","addImplementation(address,bytes,bool)":"5e3a97e7","getEnableWindowDuration()":"e02904c6","getUpgradeActivationDelay()":"72a44f07","implementation()":"5c60da1b","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isGovernanceAdmin(address)":"cb1cccce","isNotFinalized()":"e907fa3c","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","removeImplementation(address,bytes,bool)":"5cef2e86","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","upgradeTo(address,bytes,bool)":"7147855d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x2cdde9b0485fe296c4cb84de53192307b702fc993b66b8a40a5abb34a8cf23fa\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://645eead17db9c4d58b4f00b09e1dd213cec2a87f3fd9e7864d9cab72f405097e\",\"dweb:/ipfs/QmNW8RHp8CbM1NDGTt6fw6CQgA4kE64VwVqPHySKQCQRSA\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"upgradeActivationDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"FinalizedImplementation","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false}],"type":"event","name":"ImplementationUpgraded","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":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROXY_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_DELAY_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"addImplementation"},{"inputs":[],"stateMutability":"view","type":"function","name":"getEnableWindowDuration","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUpgradeActivationDelay","outputs":[{"internalType":"uint256","name":"delay","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"implementation","outputs":[{"internalType":"address","name":"_implementation","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isNotFinalized","outputs":[{"internalType":"bool","name":"notFinal","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"removedImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeImplementation"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"payable","type":"function","name":"upgradeTo"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["cairo-lang/=lib/cairo-lang/src/","forge-std/=lib/forge-std/src/","starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/","starknet-token/=lib/starknet-token/src/starkware/isd/","starkware/isd/=lib/starknet-token/src/starkware/isd/","starkware/solidity/=lib/cairo-lang/src/starkware/solidity/","starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Proxy_5_0_0.sol":"Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f","urls":["bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f","dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg"],"license":"MIT"},"src/5_0_0/AccessControl.sol":{"keccak256":"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b","urls":["bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333","dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt"],"license":"MIT"},"src/5_0_0/NamedStorage.sol":{"keccak256":"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3","urls":["bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917","dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39"],"license":"Apache-2.0."},"src/5_0_0/ProxyStorage.sol":{"keccak256":"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03","urls":["bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc","dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA"],"license":"Apache-2.0."},"src/5_0_0/Roles.sol":{"keccak256":"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1","urls":["bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06","dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG"],"license":"Apache-2.0."},"src/5_0_0/RolesLib.sol":{"keccak256":"0x2cdde9b0485fe296c4cb84de53192307b702fc993b66b8a40a5abb34a8cf23fa","urls":["bzz-raw://645eead17db9c4d58b4f00b09e1dd213cec2a87f3fd9e7864d9cab72f405097e","dweb:/ipfs/QmNW8RHp8CbM1NDGTt6fw6CQgA4kE64VwVqPHySKQCQRSA"],"license":"Apache-2.0."},"src/5_0_0/StorageSlots.sol":{"keccak256":"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272","urls":["bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c","dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran"],"license":"Apache-2.0."},"src/5_0_0/Strings.sol":{"keccak256":"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2","urls":["bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7","dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f"],"license":"MIT"},"src/Proxy_5_0_0.sol":{"keccak256":"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e","urls":["bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155","dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW"],"license":"Apache-2.0."},"src/libraries/Addresses.sol":{"keccak256":"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16","urls":["bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a","dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR"],"license":"Apache-2.0."}},"version":1},"id":12} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"upgradeActivationDelay","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_UPGRADE_DELAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROXY_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_DELAY_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addImplementation","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getEnableWindowDuration","inputs":[],"outputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUpgradeActivationDelay","inputs":[],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"implementation","inputs":[],"outputs":[{"name":"_implementation","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isNotFinalized","inputs":[],"outputs":[{"name":"notFinal","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeImplementation","inputs":[{"name":"removedImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"FinalizedImplementation","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImplementationAdded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationRemoved","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationUpgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"}],"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}],"bytecode":{"object":"0x60a060405234801562000010575f80fd5b5060405162002810380380620028108339810160408190526200003391620006a9565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b506200074c565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff92919062000706565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027e2602e91396200048c565b62000212620004d7565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b68162000526565b620001336040518060600160405280602c815260200162002716602c91396200048c565b620000e3816200059460201b6200157c1760201c565b5f80516020620027428339815191525f9081525f80516020620027a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200274283398151915282620005b4565b620003755f805160206200278283398151915282620005b4565b620003ae7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620027c283398151915262000652565b620003d65f80516020620027c28339815191525f805160206200274283398151915262000652565b620003f05f80516020620027428339815191528062000652565b6200042a7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620027c283398151915262000652565b620004647f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620027c283398151915262000652565b620000e35f80516020620027828339815191525f805160206200274283398151915262000652565b620000e381604051602401620004a3919062000731565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f80516020620027628339815191525f9081525f80516020620027a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005405f80516020620027628339815191528062000652565b6200057a7f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200276283398151915262000652565b620000e35f805160206200276283398151915282620005b4565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020620027a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f80516020620027a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620027a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006ba575f80fd5b5051919050565b5f81518084525f5b81811015620006e757602081850181015186830182015201620006c9565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f6200071a6040830185620006c1565b905060018060a01b03831660208301529392505050565b602081525f620007456020830184620006c1565b9392505050565b608051611fb1620007655f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229","sourceMap":"2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:632::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999;-1:-1:-1;;;;;;;;;;;5042:19:8;4999:24;:63::i;:::-;5072:57;854:64;-1:-1:-1;;;;;;;;;;;5072:27:8;:57::i;:::-;5139:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5139:27:8;:61::i;:::-;5210:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5210:27;:63::i;:::-;5283:53;1462:66;-1:-1:-1;;;;;;;;;;;5283:27:8;:53::i;:::-;5346:56;2074:66;-1:-1:-1;;;;;;;;;;;5346:27:8;:56::i;:::-;5412:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5412:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c63430008180033","sourceMap":"2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15","linkReferences":{},"immutableReferences":{"8949":[{"start":2280,"length":32}]}},"methodIdentifiers":{"ENABLE_WINDOW_DURATION_SLOT()":"52b1e35e","MAX_UPGRADE_DELAY()":"d38d8d7a","PROXY_VERSION()":"c5ab8453","UPGRADE_DELAY_SLOT()":"20cea94d","addImplementation(address,bytes,bool)":"5e3a97e7","getEnableWindowDuration()":"e02904c6","getUpgradeActivationDelay()":"72a44f07","implementation()":"5c60da1b","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isGovernanceAdmin(address)":"cb1cccce","isNotFinalized()":"e907fa3c","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","removeImplementation(address,bytes,bool)":"5cef2e86","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","upgradeTo(address,bytes,bool)":"7147855d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29\",\"dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"upgradeActivationDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"FinalizedImplementation","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false}],"type":"event","name":"ImplementationUpgraded","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":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROXY_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_DELAY_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"addImplementation"},{"inputs":[],"stateMutability":"view","type":"function","name":"getEnableWindowDuration","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUpgradeActivationDelay","outputs":[{"internalType":"uint256","name":"delay","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"implementation","outputs":[{"internalType":"address","name":"_implementation","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isNotFinalized","outputs":[{"internalType":"bool","name":"notFinal","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"removedImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeImplementation"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"payable","type":"function","name":"upgradeTo"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["cairo-lang/=lib/cairo-lang/src/","forge-std/=lib/forge-std/src/","starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/","starknet-token/=lib/starknet-token/src/starkware/isd/","starkware/isd/=lib/starknet-token/src/starkware/isd/","starkware/solidity/=lib/cairo-lang/src/starkware/solidity/","starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Proxy_5_0_0.sol":"Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f","urls":["bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f","dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg"],"license":"MIT"},"src/5_0_0/AccessControl.sol":{"keccak256":"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b","urls":["bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333","dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt"],"license":"MIT"},"src/5_0_0/NamedStorage.sol":{"keccak256":"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3","urls":["bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917","dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39"],"license":"Apache-2.0."},"src/5_0_0/ProxyStorage.sol":{"keccak256":"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03","urls":["bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc","dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA"],"license":"Apache-2.0."},"src/5_0_0/Roles.sol":{"keccak256":"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1","urls":["bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06","dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG"],"license":"Apache-2.0."},"src/5_0_0/RolesLib.sol":{"keccak256":"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572","urls":["bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29","dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41"],"license":"Apache-2.0."},"src/5_0_0/StorageSlots.sol":{"keccak256":"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272","urls":["bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c","dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran"],"license":"Apache-2.0."},"src/5_0_0/Strings.sol":{"keccak256":"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2","urls":["bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7","dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f"],"license":"MIT"},"src/Proxy_5_0_0.sol":{"keccak256":"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e","urls":["bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155","dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW"],"license":"Apache-2.0."},"src/libraries/Addresses.sol":{"keccak256":"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16","urls":["bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a","dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR"],"license":"Apache-2.0."}},"version":1},"id":12} \ No newline at end of file From 0f25521bc92436c10fc3494b1ed9b0c921694419 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 17:13:56 +0530 Subject: [PATCH 08/12] feat : added temp anvil logs in proxy 5.0.0 --- .../src/artifacts/Proxy_5_0_0.json | 1185 ++++++++++++++++- 1 file changed, 1184 insertions(+), 1 deletion(-) diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json index bc0a4d8..82d80b1 100644 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json @@ -1 +1,1184 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"upgradeActivationDelay","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_UPGRADE_DELAY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROXY_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_DELAY_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addImplementation","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getEnableWindowDuration","inputs":[],"outputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUpgradeActivationDelay","inputs":[],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"implementation","inputs":[],"outputs":[{"name":"_implementation","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"isAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isNotFinalized","inputs":[],"outputs":[{"name":"notFinal","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"registerAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"registerUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeImplementation","inputs":[{"name":"removedImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeAppRoleAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeGovernanceAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeOperator","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeSecurityAgent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeTokenAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeUpgradeGovernor","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"finalize","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"FinalizedImplementation","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImplementationAdded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationRemoved","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"finalize","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"ImplementationUpgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"},{"name":"initializer","type":"bytes","indexed":false,"internalType":"bytes"}],"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}],"bytecode":{"object":"0x60a060405234801562000010575f80fd5b5060405162002810380380620028108339810160408190526200003391620006a9565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b506200074c565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff92919062000706565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027e2602e91396200048c565b62000212620004d7565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b68162000526565b620001336040518060600160405280602c815260200162002716602c91396200048c565b620000e3816200059460201b6200157c1760201c565b5f80516020620027428339815191525f9081525f80516020620027a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200274283398151915282620005b4565b620003755f805160206200278283398151915282620005b4565b620003ae7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620027c283398151915262000652565b620003d65f80516020620027c28339815191525f805160206200274283398151915262000652565b620003f05f80516020620027428339815191528062000652565b6200042a7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620027c283398151915262000652565b620004647f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620027c283398151915262000652565b620000e35f80516020620027828339815191525f805160206200274283398151915262000652565b620000e381604051602401620004a3919062000731565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f80516020620027628339815191525f9081525f80516020620027a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005405f80516020620027628339815191528062000652565b6200057a7f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200276283398151915262000652565b620000e35f805160206200276283398151915282620005b4565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020620027a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f80516020620027a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620027a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006ba575f80fd5b5051919050565b5f81518084525f5b81811015620006e757602081850181015186830182015201620006c9565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f6200071a6040830185620006c1565b905060018060a01b03831660208301529392505050565b602081525f620007456020830184620006c1565b9392505050565b608051611fb1620007655f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229","sourceMap":"2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:632::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999;-1:-1:-1;;;;;;;;;;;5042:19:8;4999:24;:63::i;:::-;5072:57;854:64;-1:-1:-1;;;;;;;;;;;5072:27:8;:57::i;:::-;5139:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5139:27:8;:61::i;:::-;5210:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5210:27;:63::i;:::-;5283:53;1462:66;-1:-1:-1;;;;;;;;;;;5283:27:8;:53::i;:::-;5346:56;2074:66;-1:-1:-1;;;;;;;;;;;5346:27:8;:56::i;:::-;5412:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5412:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c63430008180033","sourceMap":"2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15","linkReferences":{},"immutableReferences":{"8949":[{"start":2280,"length":32}]}},"methodIdentifiers":{"ENABLE_WINDOW_DURATION_SLOT()":"52b1e35e","MAX_UPGRADE_DELAY()":"d38d8d7a","PROXY_VERSION()":"c5ab8453","UPGRADE_DELAY_SLOT()":"20cea94d","addImplementation(address,bytes,bool)":"5e3a97e7","getEnableWindowDuration()":"e02904c6","getUpgradeActivationDelay()":"72a44f07","implementation()":"5c60da1b","initialize(bytes)":"439fab91","isAppGovernor(address)":"5a5d1bb9","isAppRoleAdmin(address)":"8e5224ff","isGovernanceAdmin(address)":"cb1cccce","isNotFinalized()":"e907fa3c","isOperator(address)":"6d70f7ae","isSecurityAdmin(address)":"d08fb6cb","isSecurityAgent(address)":"757bd9ab","isTokenAdmin(address)":"a2bdde3d","isUpgradeGovernor(address)":"6c04d9d5","registerAppGovernor(address)":"cdd1f70d","registerAppRoleAdmin(address)":"17896383","registerGovernanceAdmin(address)":"9463629a","registerOperator(address)":"3682a450","registerSecurityAdmin(address)":"62a14376","registerSecurityAgent(address)":"0e770f23","registerTokenAdmin(address)":"0b3a2d21","registerUpgradeGovernor(address)":"6fc97cbf","removeImplementation(address,bytes,bool)":"5cef2e86","renounceRole(bytes32,address)":"36568abe","revokeAppGovernor(address)":"deec9c5a","revokeAppRoleAdmin(address)":"2f951985","revokeGovernanceAdmin(address)":"ee0e6807","revokeOperator(address)":"fad8b32a","revokeSecurityAdmin(address)":"8101b64c","revokeSecurityAgent(address)":"d9fa7091","revokeTokenAdmin(address)":"fa0f73ba","revokeUpgradeGovernor(address)":"ed9ef16a","upgradeTo(address,bytes,bool)":"7147855d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29\",\"dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"upgradeActivationDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"FinalizedImplementation","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false},{"internalType":"bool","name":"finalize","type":"bool","indexed":false}],"type":"event","name":"ImplementationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true},{"internalType":"bytes","name":"initializer","type":"bytes","indexed":false}],"type":"event","name":"ImplementationUpgraded","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":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"ENABLE_WINDOW_DURATION_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROXY_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_DELAY_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"addImplementation"},{"inputs":[],"stateMutability":"view","type":"function","name":"getEnableWindowDuration","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUpgradeActivationDelay","outputs":[{"internalType":"uint256","name":"delay","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"implementation","outputs":[{"internalType":"address","name":"_implementation","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isAppRoleAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isGovernanceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"isNotFinalized","outputs":[{"internalType":"bool","name":"notFinal","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isSecurityAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isTokenAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isUpgradeGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"registerUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"removedImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeImplementation"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppGovernor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeAppRoleAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeGovernanceAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeOperator"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeSecurityAgent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeTokenAdmin"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeUpgradeGovernor"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"stateMutability":"payable","type":"function","name":"upgradeTo"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["cairo-lang/=lib/cairo-lang/src/","forge-std/=lib/forge-std/src/","starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/","starknet-token/=lib/starknet-token/src/starkware/isd/","starkware/isd/=lib/starknet-token/src/starkware/isd/","starkware/solidity/=lib/cairo-lang/src/starkware/solidity/","starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Proxy_5_0_0.sol":"Proxy"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f","urls":["bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f","dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg"],"license":"MIT"},"src/5_0_0/AccessControl.sol":{"keccak256":"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b","urls":["bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333","dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt"],"license":"MIT"},"src/5_0_0/NamedStorage.sol":{"keccak256":"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3","urls":["bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917","dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39"],"license":"Apache-2.0."},"src/5_0_0/ProxyStorage.sol":{"keccak256":"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03","urls":["bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc","dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA"],"license":"Apache-2.0."},"src/5_0_0/Roles.sol":{"keccak256":"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1","urls":["bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06","dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG"],"license":"Apache-2.0."},"src/5_0_0/RolesLib.sol":{"keccak256":"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572","urls":["bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29","dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41"],"license":"Apache-2.0."},"src/5_0_0/StorageSlots.sol":{"keccak256":"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272","urls":["bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c","dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran"],"license":"Apache-2.0."},"src/5_0_0/Strings.sol":{"keccak256":"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2","urls":["bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7","dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f"],"license":"MIT"},"src/Proxy_5_0_0.sol":{"keccak256":"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e","urls":["bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155","dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW"],"license":"Apache-2.0."},"src/libraries/Addresses.sol":{"keccak256":"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16","urls":["bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a","dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR"],"license":"Apache-2.0."}},"version":1},"id":12} \ No newline at end of file +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "upgradeActivationDelay", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "ENABLE_WINDOW_DURATION_SLOT", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROXY_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addImplementation", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getEnableWindowDuration", + "inputs": [], + "outputs": [ + { "name": "duration", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUpgradeActivationDelay", + "inputs": [], + "outputs": [ + { "name": "delay", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "implementation", + "inputs": [], + "outputs": [ + { + "name": "_implementation", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isNotFinalized", + "inputs": [], + "outputs": [ + { "name": "notFinal", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeImplementation", + "inputs": [ + { + "name": "removedImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { "name": "role", "type": "bytes32", "internalType": "bytes32" }, + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeAppGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeAppRoleAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeGovernanceAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeOperator", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeSecurityAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeSecurityAgent", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeTokenAdmin", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeUpgradeGovernor", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "finalize", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "FinalizedImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationAdded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationRemoved", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "finalize", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ImplementationUpgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "initializer", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "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 + } + ], + "bytecode": { + "object": "0x60a060405234801562000010575f80fd5b5060405162002810380380620028108339810160408190526200003391620006a9565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b506200074c565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff92919062000706565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027e2602e91396200048c565b62000212620004d7565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b68162000526565b620001336040518060600160405280602c815260200162002716602c91396200048c565b620000e3816200059460201b6200157c1760201c565b5f80516020620027428339815191525f9081525f80516020620027a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200274283398151915282620005b4565b620003755f805160206200278283398151915282620005b4565b620003ae7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620027c283398151915262000652565b620003d65f80516020620027c28339815191525f805160206200274283398151915262000652565b620003f05f80516020620027428339815191528062000652565b6200042a7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620027c283398151915262000652565b620004647f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620027c283398151915262000652565b620000e35f80516020620027828339815191525f805160206200274283398151915262000652565b620000e381604051602401620004a3919062000731565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f80516020620027628339815191525f9081525f80516020620027a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005405f80516020620027628339815191528062000652565b6200057a7f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200276283398151915262000652565b620000e35f805160206200276283398151915282620005b4565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020620027a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f80516020620027a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620027a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006ba575f80fd5b5051919050565b5f81518084525f5b81811015620006e757602081850181015186830182015201620006c9565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f6200071a6040830185620006c1565b905060018060a01b03831660208301529392505050565b602081525f620007456020830184620006c1565b9392505050565b608051611fb1620007655f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229", + "sourceMap": "2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:632::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999;-1:-1:-1;;;;;;;;;;;5042:19:8;4999:24;:63::i;:::-;5072:57;854:64;-1:-1:-1;;;;;;;;;;;5072:27:8;:57::i;:::-;5139:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5139:27:8;:61::i;:::-;5210:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5210:27;:63::i;:::-;5283:53;1462:66;-1:-1:-1;;;;;;;;;;;5283:27:8;:53::i;:::-;5346:56;2074:66;-1:-1:-1;;;;;;;;;;;5346:27:8;:56::i;:::-;5412:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5412:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c63430008180033", + "sourceMap": "2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15", + "linkReferences": {}, + "immutableReferences": { "8949": [{ "start": 2280, "length": 32 }] } + }, + "methodIdentifiers": { + "ENABLE_WINDOW_DURATION_SLOT()": "52b1e35e", + "MAX_UPGRADE_DELAY()": "d38d8d7a", + "PROXY_VERSION()": "c5ab8453", + "UPGRADE_DELAY_SLOT()": "20cea94d", + "addImplementation(address,bytes,bool)": "5e3a97e7", + "getEnableWindowDuration()": "e02904c6", + "getUpgradeActivationDelay()": "72a44f07", + "implementation()": "5c60da1b", + "initialize(bytes)": "439fab91", + "isAppGovernor(address)": "5a5d1bb9", + "isAppRoleAdmin(address)": "8e5224ff", + "isGovernanceAdmin(address)": "cb1cccce", + "isNotFinalized()": "e907fa3c", + "isOperator(address)": "6d70f7ae", + "isSecurityAdmin(address)": "d08fb6cb", + "isSecurityAgent(address)": "757bd9ab", + "isTokenAdmin(address)": "a2bdde3d", + "isUpgradeGovernor(address)": "6c04d9d5", + "registerAppGovernor(address)": "cdd1f70d", + "registerAppRoleAdmin(address)": "17896383", + "registerGovernanceAdmin(address)": "9463629a", + "registerOperator(address)": "3682a450", + "registerSecurityAdmin(address)": "62a14376", + "registerSecurityAgent(address)": "0e770f23", + "registerTokenAdmin(address)": "0b3a2d21", + "registerUpgradeGovernor(address)": "6fc97cbf", + "removeImplementation(address,bytes,bool)": "5cef2e86", + "renounceRole(bytes32,address)": "36568abe", + "revokeAppGovernor(address)": "deec9c5a", + "revokeAppRoleAdmin(address)": "2f951985", + "revokeGovernanceAdmin(address)": "ee0e6807", + "revokeOperator(address)": "fad8b32a", + "revokeSecurityAdmin(address)": "8101b64c", + "revokeSecurityAgent(address)": "d9fa7091", + "revokeTokenAdmin(address)": "fa0f73ba", + "revokeUpgradeGovernor(address)": "ed9ef16a", + "upgradeTo(address,bytes,bool)": "7147855d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29\",\"dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "upgradeActivationDelay", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "FinalizedImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + }, + { + "internalType": "bool", + "name": "finalize", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationRemoved", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "ImplementationUpgraded", + "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": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ENABLE_WINDOW_DURATION_SLOT", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "MAX_UPGRADE_DELAY", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PROXY_VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_DELAY_SLOT", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addImplementation" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getEnableWindowDuration", + "outputs": [ + { "internalType": "uint256", "name": "duration", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getUpgradeActivationDelay", + "outputs": [ + { "internalType": "uint256", "name": "delay", "type": "uint256" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ] + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "pure", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isAppGovernor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isAppRoleAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isGovernanceAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isNotFinalized", + "outputs": [ + { "internalType": "bool", "name": "notFinal", "type": "bool" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isOperator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isSecurityAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isSecurityAgent", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isTokenAdmin", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "isUpgradeGovernor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerAppGovernor" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerAppRoleAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerGovernanceAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerOperator" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSecurityAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSecurityAgent" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerTokenAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerUpgradeGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "removedImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeImplementation" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "role", "type": "bytes32" }, + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceRole" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeAppGovernor" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeAppRoleAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeGovernanceAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeOperator" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeSecurityAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeSecurityAgent" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeTokenAdmin" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeUpgradeGovernor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bool", "name": "finalize", "type": "bool" } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeTo" + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "cairo-lang/=lib/cairo-lang/src/", + "forge-std/=lib/forge-std/src/", + "starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/", + "starknet-token/=lib/starknet-token/src/starkware/isd/", + "starkware/isd/=lib/starknet-token/src/starkware/isd/", + "starkware/solidity/=lib/cairo-lang/src/starkware/solidity/", + "starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Proxy_5_0_0.sol": "Proxy" }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "lib/forge-std/src/console.sol": { + "keccak256": "0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f", + "urls": [ + "bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f", + "dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg" + ], + "license": "MIT" + }, + "src/5_0_0/AccessControl.sol": { + "keccak256": "0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b", + "urls": [ + "bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333", + "dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt" + ], + "license": "MIT" + }, + "src/5_0_0/NamedStorage.sol": { + "keccak256": "0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3", + "urls": [ + "bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917", + "dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/ProxyStorage.sol": { + "keccak256": "0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03", + "urls": [ + "bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc", + "dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/Roles.sol": { + "keccak256": "0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1", + "urls": [ + "bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06", + "dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/RolesLib.sol": { + "keccak256": "0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572", + "urls": [ + "bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29", + "dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/StorageSlots.sol": { + "keccak256": "0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272", + "urls": [ + "bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c", + "dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran" + ], + "license": "Apache-2.0." + }, + "src/5_0_0/Strings.sol": { + "keccak256": "0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2", + "urls": [ + "bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7", + "dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f" + ], + "license": "MIT" + }, + "src/Proxy_5_0_0.sol": { + "keccak256": "0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e", + "urls": [ + "bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155", + "dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW" + ], + "license": "Apache-2.0." + }, + "src/libraries/Addresses.sol": { + "keccak256": "0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16", + "urls": [ + "bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a", + "dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR" + ], + "license": "Apache-2.0." + } + }, + "version": 1 + }, + "id": 12 +} From 6f007c2c3ca66d5d9523836455e4be7b506361ec Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 17:29:23 +0530 Subject: [PATCH 09/12] feat : updated the prxy , remove console logs in contract --- .../src/artifacts/Proxy_5_0_0.json | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json index 82d80b1..7a3ba41 100644 --- a/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json +++ b/crates/l2/starknet-proxy-client/src/artifacts/Proxy_5_0_0.json @@ -518,15 +518,15 @@ } ], "bytecode": { - "object": "0x60a060405234801562000010575f80fd5b5060405162002810380380620028108339810160408190526200003391620006a9565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b506200074c565b6040805180820190915260128152713e3e3e3e3e20696e697469616c697a65282960701b60208201523390620000d79082620000e6565b620000e3818062000137565b50565b620001338282604051602401620000ff92919062000706565b60408051601f198184030181529190526020810180516001600160e01b0390811663319af33360e01b17909152620002da16565b5050565b62000141620002f0565b15620001d9576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff16620001d35760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b62000208565b620001e48262000341565b620002086040518060600160405280602e8152602001620027e2602e91396200048c565b62000212620004d7565b15620002ab576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620001335760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b6064820152608401620001ca565b620002b68162000526565b620001336040518060600160405280602c815260200162002716602c91396200048c565b620000e3816200059460201b6200157c1760201c565b5f80516020620027428339815191525f9081525f80516020620027a28339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200035b5f805160206200274283398151915282620005b4565b620003755f805160206200278283398151915282620005b4565b620003ae7ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620027c283398151915262000652565b620003d65f80516020620027c28339815191525f805160206200274283398151915262000652565b620003f05f80516020620027428339815191528062000652565b6200042a7f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da75f80516020620027c283398151915262000652565b620004647f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e5f80516020620027c283398151915262000652565b620000e35f80516020620027828339815191525f805160206200274283398151915262000652565b620000e381604051602401620004a3919062000731565b60408051601f198184030181529190526020810180516001600160e01b0390811663104c13eb60e21b17909152620002da16565b5f80516020620027628339815191525f9081525f80516020620027a28339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c245481906200033a565b620005405f80516020620027628339815191528062000652565b6200057a7f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200276283398151915262000652565b620000e35f805160206200276283398151915282620005b4565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020620027a2833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000133575f8281525f80516020620027a2833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620027a28339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620006ba575f80fd5b5051919050565b5f81518084525f5b81811015620006e757602081850181015186830182015201620006c9565b505f602082860101526020601f19601f83011685010191505092915050565b604081525f6200071a6040830185620006c1565b905060018060a01b03831660208301529392505050565b602081525f620007456020830184620006c1565b9392505050565b608051611fb1620007655f395f6108e80152611fb15ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c634300081800333e3e3e3e3e20696e69745365637572697479526f6c65732870726f766973696f6e616c53656341646d696e2903711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee993e3e3e3e3e20696e6974476f7665726e616e6365526f6c65732870726f766973696f6e616c476f7665726e6f7229", - "sourceMap": "2986:11128:12:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:7;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:12::1;4015:22:::0;2455:66:9;4416:28:12;4273:187;3989:49:::1;4048:32;4072:7;2810:66:9::0;5407:31:12;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3134:198:8;3233:46;;;;;;;;;;;;-1:-1:-1;;;3233:46:8;;;;3916:10:4;;3233:46:8;;3916:10:4;3233:11:8;:46::i;:::-;3289:36;3300:11;;3289:10;:36::i;:::-;3165:167;3134:198::o;7364:145:3:-;7431:71;7494:2;7498;7447:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7447:54:3;;;;;;;;;;;;;;-1:-1:-1;;;;;7447:54:3;;;-1:-1:-1;;;7447:54:3;;;;7431:15;:71;:::i;:::-;7364:145;;:::o;3338:1220:8:-;3461:28;:26;:28::i;:::-;3457:560;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3716:144:8;;;;-1:-1:-1;;;3716:144:8;;1155:2:14;3716:144:8;;;1137:21:14;1194:2;1174:18;;;1167:30;1233:27;1213:18;;;1206:55;1278:18;;3716:144:8;;;;;;;;;3457:560;;;3891:40;3911:19;3891;:40::i;:::-;3945:61;;;;;;;;;;;;;;;;;;:11;:61::i;:::-;4031:26;:24;:26::i;:::-;4027:525;;;-1:-1:-1;;;;;5259:31:4;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4248:151:8;;;;-1:-1:-1;;;4248:151:8;;1509:2:14;4248:151:8;;;1491:21:14;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;-1:-1:-1;;;1638:18:14;;;1631:32;1680:19;;4248:151:8;1307:398:14;4027:525:8;4430:38;4448:19;4430:17;:38::i;:::-;4482:59;;;;;;;;;;;;;;;;;;:11;:59::i;408:133:3:-;479:55;526:7;505:19;;;;;479:55;;:::i;2822:152:8:-;-1:-1:-1;;;;;;;;;;;2883:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;2883:4:8;;2906:44;:61;;2899:68;;2822:152;:::o;4850:632::-;4926:63;-1:-1:-1;;;;;;;;;;;4969:19:8;4926:24;:63::i;:::-;4999;-1:-1:-1;;;;;;;;;;;5042:19:8;4999:24;:63::i;:::-;5072:57;854:64;-1:-1:-1;;;;;;;;;;;5072:27:8;:57::i;:::-;5139:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5139:27:8;:61::i;:::-;5210:63;-1:-1:-1;;;;;;;;;;;1268:66:8;5210:27;:63::i;:::-;5283:53;1462:66;-1:-1:-1;;;;;;;;;;;5283:27:8;:53::i;:::-;5346:56;2074:66;-1:-1:-1;;;;;;;;;;;5346:27:8;:56::i;:::-;5412:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5412:27:8;:63::i;6000:121:3:-;6055:59;6110:2;6071:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6071:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6071:42:3;;;-1:-1:-1;;;6071:42:3;;;;6055:15;:59;:::i;2980:148:8:-;-1:-1:-1;;;;;;;;;;;3039:4:8;6680:14:4;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;:24;;3039:4:8;;3062:42;6595:116:4;4564:280:8;4638:59;-1:-1:-1;;;;;;;;;;;1668:66:8;4638:27;:59::i;:::-;4707;1874:66;-1:-1:-1;;;;;;;;;;;4707:27:8;:59::i;:::-;4776:61;-1:-1:-1;;;;;;;;;;;4817:19:8;4776:24;:61::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;9592:227:4:-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:14:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:14;;14:184;-1:-1:-1;14:184:14:o;203:423::-;245:3;283:5;277:12;310:6;305:3;298:19;335:1;345:162;359:6;356:1;353:13;345:162;;;421:4;477:13;;;473:22;;467:29;449:11;;;445:20;;438:59;374:12;345:162;;;349:3;552:1;545:4;536:6;531:3;527:16;523:27;516:38;615:4;608:2;604:7;599:2;591:6;587:15;583:29;578:3;574:39;570:50;563:57;;;203:423;;;;:::o;631:317::-;808:2;797:9;790:21;771:4;828:45;869:2;858:9;854:18;846:6;828:45;:::i;:::-;820:53;;938:1;934;929:3;925:11;921:19;913:6;909:32;904:2;893:9;889:18;882:60;631:317;;;;;:::o;1710:220::-;1859:2;1848:9;1841:21;1822:4;1879:45;1920:2;1909:9;1905:18;1897:6;1879:45;:::i;:::-;1871:53;1710:220;-1:-1:-1;;;1710:220:14:o;1935:127::-;2986:11128:12;;;;;;;;;;;;", + "object": "0x60a060405234801562000010575f80fd5b5060405162002631380380620026318339810160408190526200003391620005ad565b5f608081905262000043620000a0565b506200006d817fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b62000099621275007fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073855565b50620005c5565b33620000ad8180620000b0565b50565b620000ba6200020f565b1562000152576001600160a01b0382165f9081527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b0602052604090205460ff166200014c5760405162461bcd60e51b815260206004820152601960248201527f524f4c45535f414c52454144595f494e495449414c495a45440000000000000060448201526064015b60405180910390fd5b6200015d565b6200015d8262000260565b6200016762000400565b1562000204576001600160a01b0381165f9081527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c23602052604090205460ff16620002005760405162461bcd60e51b815260206004820152602260248201527f53454355524954595f524f4c45535f414c52454144595f494e495449414c495a604482015261115160f21b606482015260840162000143565b5050565b62000200816200044f565b5f80516020620025518339815191525f9081525f80516020620025b18339815191526020527fa5fdb349cc4ffac7e8ce7d3b075149d1bc847367d814e69a9beca89ef02db8b15481905b1415905090565b6200027a5f805160206200255183398151915282620004b8565b620002a57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de0606882620004b8565b620002bf5f80516020620025d183398151915282620004b8565b620002d95f80516020620025f183398151915282620004b8565b620002f35f805160206200261183398151915282620004b8565b6200030d5f805160206200259183398151915282620004b8565b620003467ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060685f80516020620025d183398151915262000556565b6200036e5f80516020620025d18339815191525f805160206200255183398151915262000556565b620003885f80516020620025518339815191528062000556565b620003b05f80516020620025f18339815191525f80516020620025d183398151915262000556565b620003d85f80516020620026118339815191525f80516020620025d183398151915262000556565b620000ad5f80516020620025918339815191525f805160206200255183398151915262000556565b5f80516020620025718339815191525f9081525f80516020620025b18339815191526020527f2c11a1f9c63817dbb9f0faa966615764d2db5d6e008269e948a99e0b52181c2454819062000259565b620004695f80516020620025718339815191528062000556565b620004a37f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b965f805160206200257183398151915262000556565b620000ad5f8051602062002571833981519152825b5f8281525f80516020620025b1833981519152602090815260408083206001600160a01b038516845290915290205460ff1662000200575f8281525f80516020620025b1833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b5f8281525f80516020620025b18339815191526020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f60208284031215620005be575f80fd5b5051919050565b608051611f73620005de5f395f6108e80152611f735ff3fe60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a26469706673582212201ac84a54ca884fecbcbc7b2c5945c83ee2e3b251730028617aa81a9286b3229364736f6c6343000818003303711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b30251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec22853e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da70128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e", + "sourceMap": "2986:11128:11:-:0;;;3922:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3972:5;868:31:6;;;;909:21;:19;:21::i;:::-;-1:-1:-1;3989:49:11::1;4015:22:::0;2455:66:8;4416:28:11;4273:187;3989:49:::1;4048:32;4072:7;2810:66:8::0;5407:31:11;5254:200;4048:32:::1;3922:165:::0;2986:11128;;3102:142:7;3916:10:3;3201:36:7;3916:10:3;;3201::7;:36::i;:::-;3133:111;3102:142::o;3250:1072::-;3373:28;:26;:28::i;:::-;3369:485;;;-1:-1:-1;;;;;5259:31:3;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;3628:144:7;;;;-1:-1:-1;;;3628:144:7;;405:2:13;3628:144:7;;;387:21:13;444:2;424:18;;;417:30;483:27;463:18;;;456:55;528:18;;3628:144:7;;;;;;;;;3369:485;;;3803:40;3823:19;3803;:40::i;:::-;3868:26;:24;:26::i;:::-;3864:452;;;-1:-1:-1;;;;;5259:31:3;;5236:4;5259:31;;;:14;;:31;:14;:31;;;;;4085:151:7;;;;-1:-1:-1;;;4085:151:7;;759:2:13;4085:151:7;;;741:21:13;798:2;778:18;;;771:30;837:34;817:18;;;810:62;-1:-1:-1;;;888:18:13;;;881:32;930:19;;4085:151:7;557:398:13;4085:151:7;3250:1072;;:::o;3864:452::-;4267:38;4285:19;4267:17;:38::i;2790:152::-;-1:-1:-1;;;;;;;;;;;2851:4:7;6680:14:3;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;:24;;2851:4:7;;2874:44;:61;;2867:68;;2790:152;:::o;4614:906::-;4690:63;-1:-1:-1;;;;;;;;;;;4733:19:7;4690:24;:63::i;:::-;4763:59;822:64;4802:19;4763:24;:59::i;:::-;4832:61;-1:-1:-1;;;;;;;;;;;4873:19:7;4832:24;:61::i;:::-;4903:55;-1:-1:-1;;;;;;;;;;;4938:19:7;4903:24;:55::i;:::-;4968:58;-1:-1:-1;;;;;;;;;;;5006:19:7;4968:24;:58::i;:::-;5036:63;-1:-1:-1;;;;;;;;;;;5079:19:7;5036:24;:63::i;:::-;5110:57;822:64;-1:-1:-1;;;;;;;;;;;5110:27:7;:57::i;:::-;5177:61;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5177:27:7;:61::i;:::-;5248:63;-1:-1:-1;;;;;;;;;;;1236:66:7;5248:27;:63::i;:::-;5321:53;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5321:27:7;:53::i;:::-;5384:56;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5384:27:7;:56::i;:::-;5450:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;5450:27:7;:63::i;2948:148::-;-1:-1:-1;;;;;;;;;;;3007:4:7;6680:14:3;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;:24;;3007:4:7;;3030:42;6595:116:3;4328:280:7;4402:59;-1:-1:-1;;;;;;;;;;;1636:66:7;4402:27;:59::i;:::-;4471;1842:66;-1:-1:-1;;;;;;;;;;;4471:27:7;:59::i;:::-;4540:61;-1:-1:-1;;;;;;;;;;;4581:19:7;9592:227:3;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:3;;;;;;;;-1:-1:-1;;;;;5259:31:3;;;;;;;;;;;;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:3;;;;;;;;-1:-1:-1;;;;;9705:31:3;;;;;;;;;;:38;;-1:-1:-1;;9705:38:3;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9195:241::-;9270:25;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;;:24;;;;9326:36;;;;9377:52;;6680:24;;9326:36;;6680:24;;:14;;9377:52;;9270:25;9377:52;9260:176;9195:241;;:::o;14:184:13:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:13;;14:184;-1:-1:-1;14:184:13:o;557:398::-;2986:11128:11;;;;;;;;;;;;", "linkReferences": {} }, "deployedBytecode": { - "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f5c8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b5a565b6107f7565b348015610320575f80fd5b506102f461032f366004611b5a565b610824565b34801561033f575f80fd5b506102f461034e366004611b5a565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b5a565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b73565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b5a565b610960565b348015610401575f80fd5b506102f4610410366004611be2565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b5a565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f5c833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c2e565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c2e565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b5a565b610ca4565b348015610512575f80fd5b50610467610521366004611b5a565b610cce565b348015610531575f80fd5b50610467610540366004611b5a565b610cf9565b348015610550575f80fd5b506102f461055f366004611b5a565b610d24565b6102f4610572366004611c2e565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b5a565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b5a565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b5a565b611392565b3480156105f3575f80fd5b506102f4610602366004611b5a565b6113bd565b348015610612575f80fd5b50610467610621366004611b5a565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611cb2565b34801561066e575f80fd5b5061046761067d366004611b5a565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b5a565b611417565b3480156106ac575f80fd5b506104676106bb366004611b5a565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b5a565b61146b565b348015610700575f80fd5b506102f461070f366004611b5a565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b5a565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b5a565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b5a565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b5a565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261159c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261159c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261159c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611ce4565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115d1565b5050565b5f80516020611f1c8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb8282611601565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261159c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361167b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611d14565b5f84848484604051602001610a389493929190611d6b565b6040516020818303038152906040528051906020012090505f610a596116b1565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf6116b1565b5f8381526020919091526040812055610ad66116ec565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611da2565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611d14565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d6b565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611ddb565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611ddb565b905081610c2b6116b1565b5f858152602091909152604090205580610c436116ec565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611da2565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261159c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361167b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361167b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261159c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611d14565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611723565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d6b565b6040516020818303038152906040528051906020012090505f610e626116b1565b5f83815260209190915260408120549150610e7b6116ec565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f5c8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f5c83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dee565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611e09565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611cb2565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611e09565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611e24565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb6116b1565b5f86815260209190915260408120556112126116ec565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dee565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361167b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611ce4565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115d1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361167b565b6108215f80516020611f1c8339815191528261159c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361167b565b5f6109f55f80516020611f1c8339815191528361167b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261159c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361167b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115d1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115d1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115d1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611ce4565b6108cb5f80516020611f1c833981519152836115d1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115d1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115d1565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115c281611812565b6115cc838361181c565b505050565b5f8281525f80516020611f3c83398151915260205260409020600101546115f781611812565b6115cc8383611890565b6001600160a01b03811633146116715760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611890565b5f9182525f80516020611f3c833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116e76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b815250611902565b905090565b5f6116e76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b815250611902565b5f8061173a5f80516020611f5c8339815191525490565b90506001600160a01b038116611751575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161179391611e09565b5f60405180830381855af49150503d805f81146117cb576040519150601f19603f3d011682016040523d82523d5f602084013e6117d0565b606091505b50915091508181906117f55760405162461bcd60e51b81526004016102669190611cb2565b508080602001905181019061180a9190611e24565b935050505090565b6108218133611934565b611826828261167b565b6108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61189a828261167b565b156108cb575f8281525f80516020611f3c833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016119159190611e09565b60408051601f1981840301815291905280516020909101209392505050565b61193e828261167b565b6108cb57611956816001600160a01b03166014611998565b611961836020611998565b604051602001611972929190611e3f565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611cb2565b60605f6119a6836002611eb3565b6119b1906002611ddb565b67ffffffffffffffff8111156119c9576119c9611eca565b6040519080825280601f01601f1916602001820160405280156119f3576020820181803683370190505b509050600360fc1b815f81518110611a0d57611a0d611ede565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a3b57611a3b611ede565b60200101906001600160f81b03191690815f1a9053505f611a5d846002611eb3565b611a68906001611ddb565b90505b6001811115611adf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a9c57611a9c611ede565b1a60f81b828281518110611ab257611ab2611ede565b60200101906001600160f81b03191690815f1a90535060049490941c93611ad881611ef2565b9050611a6b565b508315611b2e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b611b3d611f07565b565b80356001600160a01b0381168114611b55575f80fd5b919050565b5f60208284031215611b6a575f80fd5b611b2e82611b3f565b5f8060408385031215611b84575f80fd5b82359150611b9460208401611b3f565b90509250929050565b5f8083601f840112611bad575f80fd5b50813567ffffffffffffffff811115611bc4575f80fd5b602083019150836020828501011115611bdb575f80fd5b9250929050565b5f8060208385031215611bf3575f80fd5b823567ffffffffffffffff811115611c09575f80fd5b611c1585828601611b9d565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c41575f80fd5b611c4a85611b3f565b9350602085013567ffffffffffffffff811115611c65575f80fd5b611c7187828801611b9d565b9094509250506040850135611c8581611c21565b939692955090935050565b5f5b83811015611caa578181015183820152602001611c92565b50505f910152565b602081525f8251806020840152611cd0816040850160208701611c90565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d8f9083018587611d43565b9050821515604083015295945050505050565b604081525f611db5604083018587611d43565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611dc7565b602081525f611e01602083018486611d43565b949350505050565b5f8251611e1a818460208701611c90565b9190910192915050565b5f60208284031215611e34575f80fd5b8151611b2e81611c21565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e76816017850160208801611c90565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611ea7816028840160208801611c90565b01602801949350505050565b80820281158282048414176109f5576109f5611dc7565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611f0057611f00611dc7565b505f190190565b634e487b7160e01b5f52605160045260245ffdfe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a2646970667358221220bf6f09d43af45a98c3016fb09629920e993082c2a0a1b79b29c14e95153bc22b64736f6c63430008180033", - "sourceMap": "2986:11128:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:12;;216:2:14;7342:42:12;;;198:21:14;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:12;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:12;;7685:66;;;;-1:-1:-1;;;7685:66:12;;577:2:14;7685:66:12;;;559:21:14;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:14;;;628:52;697:18;;7685:66:12;375:346:14;7685:66:12;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:7;;;;;;;;;;-1:-1:-1;3988:116:7;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:7;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:7;;;;;:::i;:::-;;:::i;2402:119:9:-;;;;;;;;;;-1:-1:-1;2402:119:9;2455:66;2402:119;;;;;1241:25:14;;;1229:2;1214:18;2402:119:9;;;;;;;;4385:137:7;;;;;;;;;;-1:-1:-1;4385:137:7;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:7;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:7;;;;;:::i;:::-;;:::i;6611:122:12:-;;;;;;;;;;-1:-1:-1;6611:122:12;;;;;:::i;:::-;;:::i;2748:128:9:-;;;;;;;;;;-1:-1:-1;2748:128:9;2810:66;2748:128;;2064:135:7;;;;;;;;;;-1:-1:-1;2064:135:7;;;;;:::i;:::-;;:::i;:::-;;;2467:14:14;;2460:22;2442:41;;2430:2;2415:18;2064:135:7;2302:187:14;5572:195:12;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:12;5572:195;;-1:-1:-1;;;;;2658:32:14;;;2640:51;;2628:2;2613:18;5572:195:12;2494:203:14;10655:619:12;;;;;;;;;;-1:-1:-1;10655:619:12;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:12;;;;;:::i;:::-;;:::i;3732:122:7:-;;;;;;;;;;-1:-1:-1;3732:122:7;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:7;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:7;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:7;;;;;:::i;:::-;;:::i;12173:1939:12:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:7:-;;;;;;;;;;-1:-1:-1;2777:139:7;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:7;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:7;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:7;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:7;;;;;:::i;:::-;;:::i;3799:46:12:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:12;;;;;;;;;;;;:::i;2349:143:7:-;;;;;;;;;;-1:-1:-1;2349:143:7;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:7;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:7;;;;;:::i;:::-;;:::i;3740:52:12:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:7;;;;;;;;;;-1:-1:-1;4936:121:7;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:7;;;;;:::i;:::-;;:::i;5050:198:12:-;;;;;;;;;;-1:-1:-1;2810:66:9;5221:11:12;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:9;9196:11:12;9238:14;9016:244;;5184:125:7;;;;;;;;;;-1:-1:-1;5184:125:7;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:7;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:7;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:7;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2074:66:8;4089:7:7;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1874:66:8;3967:7:7;3927:23;:48::i;3356:121::-;3422:48;1058:66:8;3462:7:7;3422:23;:48::i;4385:137::-;4447:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4466:49:::1;1058:66:8;4507:7:7::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:7;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:7;;4833:2:14;5474:42:7;;;4815:21:14;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:7;4631:356:14;5409:118:7;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1462:66:8;3711:7:7;3677:23;:42::i;6611:122:12:-;6694:32;;-1:-1:-1;;;6694:32:12;;5194:2:14;6694:32:12;;;5176:21:14;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:14;;;5245:52;5314:18;;6694:32:12;4992:346:14;2064:135:7;2125:4;2148:44;854:64:8;2184:7:7;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:7:o;10655:619:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;10821:22:12::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:12;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:12;;6593:2:14;11039:58:12::1;::::0;::::1;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:12::1;6391:351:14::0;11039:58:12::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:12::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:12;::::1;1072:20:13::0;9908:63:12::1;;;::::0;-1:-1:-1;;;9908:63:12;;7279:2:14;9908:63:12::1;::::0;::::1;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;9908:63:12::1;7077:344:14::0;9908:63:12::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:9::0;5221:11:12;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:12::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:7:-;3799:48;1668:66:8;3839:7:7;3799:23;:48::i;3061:143::-;3126:4;3149:48;2284:66:8;3189:7:7;3149:21;:48::i;2498:128::-;2556:4;2579:40;1462:66:8;2611:7:7;2579:21;:40::i;4110:126::-;4179:50;2284:66:8;4221:7:7;4179:23;:50::i;12173:1939:12:-;1750:45:7;3916:10:4;3061:143:7;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:7;;;;;;;:::i;:::-;2134:66:9;9196:11:12;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:12;;7890:2:14;6773:53:12::1;::::0;::::1;7872:21:14::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:12::1;7688:348:14::0;6773:53:12::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:12;;8243:2:14;7058:53:12::2;::::0;::::2;8225:21:14::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:14;;;8294:45;8356:18;;7058:53:12::2;8041:339:14::0;7058:53:12::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:12::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:12;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:12;;6593:2:14;12581:58:12::3;::::0;::::3;6575:21:14::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:12::3;6391:351:14::0;12581:58:12::3;-1:-1:-1::0;;;;;12657:28:12;::::3;1072:20:13::0;12649:63:12::3;;;::::0;-1:-1:-1;;;12649:63:12;;7279:2:14;12649:63:12::3;::::0;::::3;7261:21:14::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:14;;;7330:50;7397:18;;12649:63:12::3;7077:344:14::0;12649:63:12::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:12::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:12;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:12::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:12;;8587:2:14;12813:139:12::3;::::0;::::3;8569:21:14::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:12::3;8385:347:14::0;12813:139:12::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:12;;8939:2:14;12962:72:12::3;::::0;::::3;8921:21:14::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:14;;;8990:52;9059:18;;12962:72:12::3;8737:346:14::0;12962:72:12::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:12;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:12::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:12;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:12::3;-1:-1:-1::0;;;;;;13246:54:12;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:12::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:12::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:12::3;-1:-1:-1::0;;;13584:37:12::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:12;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:12;;-1:-1:-1;13516:115:12;-1:-1:-1;13516:115:12;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:12;;9831:2:14;13641:45:12::3;::::0;::::3;9813:21:14::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:12::3;9629:349:14::0;13641:45:12::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:12;;10435:2:14;13696:69:12::3;::::0;::::3;10417:21:14::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:12::3;10233:349:14::0;13696:69:12::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:12::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:9;9447:17:12;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:12;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:9;4921:11:12;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:7:-;2840:4;2863:46;1874:66:8;2901:7:7;2863:21;:46::i;4792:138::-;4855:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4874:49:::1;1668:66:8;4915:7:7::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1058:66:8;2328:7:7;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:7;3552:23;:50::i;2922:133::-;2982:4;3005:43;2074:66:8;3040:7:7;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:7;2437:21;:48::i;3232:118::-;3297:46;854:64:8;3335:7:7;3297:23;:46::i;2632:139::-;2695:4;2718:46;1668:66:8;2756:7:7;2718:21;:46::i;4936:121::-;5001:49;1874:66:8;5042:7:7;5001:24;:49::i;4262:117::-;4325:47;854:64:8;4364:7:7;4325:24;:47::i;5184:125::-;5251:51;2284:66:8;5294:7:7;5251:24;:51::i;4528:142::-;4593:7;3916:10:4;-1:-1:-1;;;;;1931:37:7;;;1910:106;;;;-1:-1:-1;;;1910:106:7;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:7;4612:24:::1;:51::i;5063:115::-:0;5125:46;2074:66:8;5163:7:7;5125:24;:46::i;4676:110::-;4736:43;1462:66:8;4771:7:7;4736:24;:43::i;547:380:3:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;6990:152:4:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:4;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:4;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:4;;10789:2:14;8150:117:4;;;10771:21:14;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:14;;;10911:45;10973:19;;8150:117:4;10587:411:14;8150:117:4;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:4;;;;;;;;-1:-1:-1;;;;;5259:31:4;;;;;;;;;;;;;;;5143:154::o;1160:189:6:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:6;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:6;;;1700:36;:55::i;5904:564:12:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:12;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:12;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:12;-1:-1:-1;;;6321:37:12;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:12;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:12;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:4:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:4;;;;;;;;-1:-1:-1;;;;;9705:31:4;;;;;;;;;;:38;;-1:-1:-1;;9705:38:4;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:4;;;;;;;;-1:-1:-1;;;;;10091:31:4;;;;;;;;;;:39;;-1:-1:-1;;10091:39:4;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:5:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:5;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:5:o;5941:484:4:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:4;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:4;;;;;;;;;;-1:-1:-1;;;6059:349:4;;;;;;;:::i;2248:441:10:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:10;;2348:47;;-1:-1:-1;;;2405:6:10;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:10;;;;;;;;;-1:-1:-1;;;2430:6:10;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:10;;;;;;;;-1:-1:-1;2460:9:10;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:10;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:10;;;;;;;;-1:-1:-1;2575:1:10;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:10;;2596:55;;;;-1:-1:-1;;;2596:55:10;;12894:2:14;2596:55:10;;;12876:21:14;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:10;12692:356:14;2596:55:10;2675:6;2248:441;-1:-1:-1;;;2248:441:10:o;-1:-1:-1:-;;;:::i;:::-;:::o;726:173:14:-;794:20;;-1:-1:-1;;;;;843:31:14;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:14;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:14;-1:-1:-1;;;;1888:409:14:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:14;-1:-1:-1;;3366:2:14;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:14;;-1:-1:-1;;2825:612:14:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:14;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:14;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:14:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:14;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:14;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:14;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:14;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:14;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:14;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:14:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:14:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:14;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:14:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:14;;12551:136::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15", + "object": "0x60806040526004361061021d575f3560e01c806372a44f0711610122578063d08fb6cb116100aa578063e907fa3c1161006e578063e907fa3c14610747578063ed9ef16a1461077b578063ee0e68071461079a578063fa0f73ba146107b9578063fad8b32a146107d85761026f565b8063d08fb6cb146106a1578063d38d8d7a146106c0578063d9fa7091146106d6578063deec9c5a146106f5578063e02904c6146107145761026f565b80639463629a116100f15780639463629a146105e8578063a2bdde3d14610607578063c5ab845314610626578063cb1cccce14610663578063cdd1f70d146106825761026f565b806372a44f0714610577578063757bd9ab1461058b5780638101b64c146105aa5780638e5224ff146105c95761026f565b80635a5d1bb9116101a557806362a143761161017457806362a14376146104e85780636c04d9d5146105075780636d70f7ae146105265780636fc97cbf146105455780637147855d146105645761026f565b80635a5d1bb9146104485780635c60da1b146104775780635cef2e86146104aa5780635e3a97e7146104c95761026f565b80632f951985116101ec5780632f9519851461039957806336568abe146103b85780633682a450146103d7578063439fab91146103f657806352b1e35e146104155761026f565b80630b3a2d21146102f65780630e770f2314610315578063178963831461033457806320cea94d146103535761026f565b3661026f5760405162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f5245434549564560448201526064015b60405180910390fd5b5f6102855f80516020611f1e8339815191525490565b90506001600160a01b0381166102d65760405162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b6044820152606401610266565b365f80375f80365f845af43d5f803e8080156102f0573d5ff35b3d5ffd5b005b348015610301575f80fd5b506102f4610310366004611b30565b6107f7565b348015610320575f80fd5b506102f461032f366004611b30565b610824565b34801561033f575f80fd5b506102f461034e366004611b30565b61084e565b34801561035e575f80fd5b506103867fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040519081526020015b60405180910390f35b3480156103a4575f80fd5b506102f46103b3366004611b30565b610878565b3480156103c3575f80fd5b506102f46103d2366004611b49565b6108cf565b3480156103e2575f80fd5b506102f46103f1366004611b30565b610960565b348015610401575f80fd5b506102f4610410366004611bb8565b61098a565b348015610420575f80fd5b506103867fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073881565b348015610453575f80fd5b50610467610462366004611b30565b6109cb565b6040519015158152602001610390565b348015610482575f80fd5b505f80516020611f1e833981519152546040516001600160a01b039091168152602001610390565b3480156104b5575f80fd5b506102f46104c4366004611c04565b6109fb565b3480156104d4575f80fd5b506102f46104e3366004611c04565b610b35565b3480156104f3575f80fd5b506102f4610502366004611b30565b610ca4565b348015610512575f80fd5b50610467610521366004611b30565b610cce565b348015610531575f80fd5b50610467610540366004611b30565b610cf9565b348015610550575f80fd5b506102f461055f366004611b30565b610d24565b6102f4610572366004611c04565b610d4e565b348015610582575f80fd5b506103866112d5565b348015610596575f80fd5b506104676105a5366004611b30565b611314565b3480156105b5575f80fd5b506102f46105c4366004611b30565b61133f565b3480156105d4575f80fd5b506104676105e3366004611b30565b611392565b3480156105f3575f80fd5b506102f4610602366004611b30565b6113bd565b348015610612575f80fd5b50610467610621366004611b30565b6113d4565b348015610631575f80fd5b50610656604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103909190611c88565b34801561066e575f80fd5b5061046761067d366004611b30565b6113ff565b34801561068d575f80fd5b506102f461069c366004611b30565b611417565b3480156106ac575f80fd5b506104676106bb366004611b30565b611440565b3480156106cb575f80fd5b5061038662ed4e0081565b3480156106e1575f80fd5b506102f46106f0366004611b30565b61146b565b348015610700575f80fd5b506102f461070f366004611b30565b611495565b34801561071f575f80fd5b507fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc4059073854610386565b348015610752575f80fd5b507f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610467565b348015610786575f80fd5b506102f4610795366004611b30565b6114be565b3480156107a5575f80fd5b506102f46107b4366004611b30565b6114e8565b3480156107c4575f80fd5b506102f46107d3366004611b30565b611528565b3480156107e3575f80fd5b506102f46107f2366004611b30565b611552565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8261157c565b50565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968261157c565b6108217f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998261157c565b80336001600160a01b038216036108a15760405162461bcd60e51b815260040161026690611cba565b6108cb7f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee99836115b1565b5050565b5f80516020611ede8339815191528214801561090957507f0000000000000000000000000000000000000000000000000000000000000000155b156109565760405162461bcd60e51b815260206004820181905260248201527f43414e4e4f545f52454e4f554e43455f474f5645524e414e43455f41444d494e6044820152606401610266565b6108cb82826115e1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78261157c565b60405162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b6044820152606401610266565b5f6109f57ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688361165b565b92915050565b610a0433610cce565b610a205760405162461bcd60e51b815260040161026690611cea565b5f84848484604051602001610a389493929190611d41565b6040516020818303038152906040528051906020012090505f610a59611691565b5f8381526020919091526040902054905080610ab75760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b610abf611691565b5f8381526020919091526040812055610ad66116cc565b5f8381526020019081526020015f205f9055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d868686604051610b2593929190611d78565b60405180910390a2505050505050565b610b3e33610cce565b610b5a5760405162461bcd60e51b815260040161026690611cea565b6001600160a01b0384163b610ba85760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b5f84848484604051602001610bc09493929190611d41565b6040516020818303038152906040528051906020012090505f610be16112d5565b610beb9042611db1565b90505f610c167fb00a6109e73dbe7bbf8d3f18fb9221d2d024dc2671e3d5ff02532ccc405907385490565b610c209083611db1565b905081610c2b611691565b5f858152602091909152604090205580610c436116cc565b5f8581526020019081526020015f2081905550866001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b878787604051610c9393929190611d78565b60405180910390a250505050505050565b6108217f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38261157c565b5f6109f57f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288361165b565b5f6109f57f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da78361165b565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec2288261157c565b610d5733610cce565b610d735760405162461bcd60e51b815260040161026690611cea565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d25415610de25760405162461bcd60e51b815260206004820152601860248201527f494d504c454d454e544154494f4e5f46494e414c495a454400000000000000006044820152606401610266565b610dea611703565b15610e295760405162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b6044820152606401610266565b5f84848484604051602001610e419493929190611d41565b6040516020818303038152906040528051906020012090505f610e62611691565b5f83815260209190915260408120549150610e7b6116cc565b5f8481526020919091526040902054905081610ed95760405162461bcd60e51b815260206004820152601b60248201527f554e4b4e4f574e5f555047524144455f494e464f524d4154494f4e00000000006044820152606401610266565b6001600160a01b0387163b610f275760405162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b6044820152606401610266565b4282111580610f5257505f610f475f80516020611f1e8339815191525490565b6001600160a01b0316145b610f9e5760405162461bcd60e51b815260206004820152601760248201527f555047524144455f4e4f545f454e41424c45445f5945540000000000000000006044820152606401610266565b42811015610fe75760405162461bcd60e51b815260206004820152601660248201527512535413115351539510551253d397d156141254915160521b6044820152606401610266565b610ffc875f80516020611f1e83398151915255565b5f80886001600160a01b031663439fab9160e01b8989604051602401611023929190611dc4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110619190611ddf565b5f60405180830381855af49150503d805f8114611099576040519150601f19603f3d011682016040523d82523d5f602084013e61109e565b606091505b50915091508181906110c35760405162461bcd60e51b81526004016102669190611c88565b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290516001600160a01b038b169161110291611ddf565b5f60405180830381855af49150503d805f811461113a576040519150601f19603f3d011682016040523d82523d5f602084013e61113f565b606091505b509092509050816111925760405162461bcd60e51b815260206004820152601960248201527f43414c4c5f544f5f495346524f5a454e5f5245564552544544000000000000006044820152606401610266565b808060200190518101906111a69190611dfa565b156111f35760405162461bcd60e51b815260206004820152601960248201527f4e45575f494d504c454d454e544154494f4e5f46524f5a454e000000000000006044820152606401610266565b6111fb611691565b5f86815260209190915260408120556112126116cc565b5f8681526020019081526020015f205f9055886001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544898960405161125f929190611dc4565b60405180910390a285156112ca5761129660017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b6040516001600160a01b038a16907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c905f90a25b505050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f80549062ed4e00821061130c5762ed4e0061130e565b815b91505090565b5f6109f57f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b968361165b565b80336001600160a01b038216036113685760405162461bcd60e51b815260040161026690611cba565b6108cb7f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b3836115b1565b5f6109f57f03e615638e0b79444a70f8c695bf8f2a47033bf1cf95691ec3130f64939cee998361165b565b6108215f80516020611ede8339815191528261157c565b5f6109f57f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e8361165b565b5f6109f55f80516020611ede8339815191528361165b565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de060688261157c565b5f6109f57f026bd110619d11cfdfc28e281df893bc24828e89177318e9dbd860cdaedeb6b38361165b565b6108217f037693ba312785932d430dccf0f56ffedd0aa7c0f8b6da2cc4530c2717689b96826115b1565b6108217ed2ead78c620e94b02d0a996e99298c59ddccfa1d8a0149080ac3a20de06068826115b1565b6108217f0251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228826115b1565b80336001600160a01b038216036115115760405162461bcd60e51b815260040161026690611cba565b6108cb5f80516020611ede833981519152836115b1565b6108217f0128d63adbf6b09002c26caf55c47e2f26635807e3ef1b027218aa74c8d61a3e826115b1565b6108217f023edb77f7c8cc9e38e8afe78954f703aeeda7fffe014eeb6e56ea84e62f6da7826115b1565b5f8281525f80516020611efe83398151915260205260409020600101546115a2816117f2565b6115ac83836117fc565b505050565b5f8281525f80516020611efe83398151915260205260409020600101546115d7816117f2565b6115ac8383611870565b6001600160a01b03811633146116515760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610266565b6108cb8282611870565b5f9182525f80516020611efe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6116c76040518060400160405280601481526020017350524f58595f355f454e41424c45445f54494d4560601b8152506118e2565b905090565b5f6116c76040518060400160405280601581526020017450524f58595f355f44495341424c45445f54494d4560581b8152506118e2565b5f8061171a5f80516020611f1e8339815191525490565b90506001600160a01b038116611731575f91505090565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b17905290515f9182916001600160a01b0385169161177391611ddf565b5f60405180830381855af49150503d805f81146117ab576040519150601f19603f3d011682016040523d82523d5f602084013e6117b0565b606091505b50915091508181906117d55760405162461bcd60e51b81526004016102669190611c88565b50808060200190518101906117ea9190611dfa565b935050505090565b6108218133611914565b611806828261165b565b6108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61187a828261165b565b156108cb575f8281525f80516020611efe833981519152602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f80826040516020016118f59190611ddf565b60408051601f1981840301815291905280516020909101209392505050565b61191e828261165b565b6108cb57611936816001600160a01b03166014611978565b611941836020611978565b604051602001611952929190611e15565b60408051601f198184030181529082905262461bcd60e51b825261026691600401611c88565b60605f611986836002611e89565b611991906002611db1565b67ffffffffffffffff8111156119a9576119a9611ea0565b6040519080825280601f01601f1916602001820160405280156119d3576020820181803683370190505b509050600360fc1b815f815181106119ed576119ed611eb4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a1b57611a1b611eb4565b60200101906001600160f81b03191690815f1a9053505f611a3d846002611e89565b611a48906001611db1565b90505b6001811115611abf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7c57611a7c611eb4565b1a60f81b828281518110611a9257611a92611eb4565b60200101906001600160f81b03191690815f1a90535060049490941c93611ab881611ec8565b9050611a4b565b508315611b0e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610266565b9392505050565b80356001600160a01b0381168114611b2b575f80fd5b919050565b5f60208284031215611b40575f80fd5b611b0e82611b15565b5f8060408385031215611b5a575f80fd5b82359150611b6a60208401611b15565b90509250929050565b5f8083601f840112611b83575f80fd5b50813567ffffffffffffffff811115611b9a575f80fd5b602083019150836020828501011115611bb1575f80fd5b9250929050565b5f8060208385031215611bc9575f80fd5b823567ffffffffffffffff811115611bdf575f80fd5b611beb85828601611b73565b90969095509350505050565b8015158114610821575f80fd5b5f805f8060608587031215611c17575f80fd5b611c2085611b15565b9350602085013567ffffffffffffffff811115611c3b575f80fd5b611c4787828801611b73565b9094509250506040850135611c5b81611bf7565b939692955090935050565b5f5b83811015611c80578181015183820152602001611c68565b50505f910152565b602081525f8251806020840152611ca6816040850160208701611c66565b601f01601f19169190910160400192915050565b60208082526016908201527521a0a72727aa2fa822a92327a926afa7a72fa9a2a62360511b604082015260600190565b60208082526015908201527427a7262cafaaa823a920a222afa3a7ab22a92727a960591b604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03851681526060602082018190525f90611d659083018587611d19565b9050821515604083015295945050505050565b604081525f611d8b604083018587611d19565b90508215156020830152949350505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109f5576109f5611d9d565b602081525f611dd7602083018486611d19565b949350505050565b5f8251611df0818460208701611c66565b9190910192915050565b5f60208284031215611e0a575f80fd5b8151611b0e81611bf7565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611e4c816017850160208801611c66565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611e7d816028840160208801611c66565b01602801949350505050565b80820281158282048414176109f5576109f5611d9d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81611ed657611ed6611d9d565b505f19019056fe03711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c84184653e43b954ba190a7e49386f1f78b01dcd9f628db23f432fa029a7dfd6d98e8fb177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24a26469706673582212201ac84a54ca884fecbcbc7b2c5945c83ee2e3b251730028617aa81a9286b3229364736f6c63430008180033", + "sourceMap": "2986:11128:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7342:42;;-1:-1:-1;;;7342:42:11;;216:2:13;7342:42:11;;;198:21:13;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;7342:42:11;;;;;;;;2986:11128;7633:23;7659:16;-1:-1:-1;;;;;;;;;;;5740:11:11;;5572:195;7659:16;7633:42;-1:-1:-1;;;;;;7693:31:11;;7685:66;;;;-1:-1:-1;;;7685:66:11;;577:2:13;7685:66:11;;;559:21:13;616:2;596:18;;;589:30;-1:-1:-1;;;635:18:13;;;628:52;697:18;;7685:66:11;375:346:13;7685:66:11;8030:14;8027:1;8024;8011:34;8253:1;8250;8234:14;8231:1;8214:15;8207:5;8194:61;8329:16;8326:1;8323;8308:38;8443:6;8510:66;;;;8625:16;8622:1;8615:27;8510:66;8545:16;8542:1;8535:27;8436:220;;3988:116:6;;;;;;;;;;-1:-1:-1;3988:116:6;;;;;:::i;:::-;;:::i;3860:122::-;;;;;;;;;;-1:-1:-1;3860:122:6;;;;;:::i;:::-;;:::i;3356:121::-;;;;;;;;;;-1:-1:-1;3356:121:6;;;;;:::i;:::-;;:::i;2402:119:8:-;;;;;;;;;;-1:-1:-1;2402:119:8;2455:66;2402:119;;;;;1241:25:13;;;1229:2;1214:18;2402:119:8;;;;;;;;4385:137:6;;;;;;;;;;-1:-1:-1;4385:137:6;;;;;:::i;:::-;;:::i;5337:247::-;;;;;;;;;;-1:-1:-1;5337:247:6;;;;;:::i;:::-;;:::i;3615:111::-;;;;;;;;;;-1:-1:-1;3615:111:6;;;;;:::i;:::-;;:::i;6611:122:11:-;;;;;;;;;;-1:-1:-1;6611:122:11;;;;;:::i;:::-;;:::i;2748:128:8:-;;;;;;;;;;-1:-1:-1;2748:128:8;2810:66;2748:128;;2064:135:6;;;;;;;;;;-1:-1:-1;2064:135:6;;;;;:::i;:::-;;:::i;:::-;;;2467:14:13;;2460:22;2442:41;;2430:2;2415:18;2064:135:6;2302:187:13;5572:195:11;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;5740:11:11;5572:195;;-1:-1:-1;;;;;2658:32:13;;;2640:51;;2628:2;2613:18;5572:195:11;2494:203:13;10655:619:11;;;;;;;;;;-1:-1:-1;10655:619:11;;;;;:::i;:::-;;:::i;9749:672::-;;;;;;;;;;-1:-1:-1;9749:672:11;;;;;:::i;:::-;;:::i;3732:122:6:-;;;;;;;;;;-1:-1:-1;3732:122:6;;;;;:::i;:::-;;:::i;3061:143::-;;;;;;;;;;-1:-1:-1;3061:143:6;;;;;:::i;:::-;;:::i;2498:128::-;;;;;;;;;;-1:-1:-1;2498:128:6;;;;;:::i;:::-;;:::i;4110:126::-;;;;;;;;;;-1:-1:-1;4110:126:6;;;;;:::i;:::-;;:::i;12173:1939:11:-;;;;;;:::i;:::-;;:::i;4763:281::-;;;;;;;;;;;;;:::i;2777:139:6:-;;;;;;;;;;-1:-1:-1;2777:139:6;;;;;:::i;:::-;;:::i;4792:138::-;;;;;;;;;;-1:-1:-1;4792:138:6;;;;;:::i;:::-;;:::i;2205:::-;;;;;;;;;;-1:-1:-1;2205:138:6;;;;;:::i;:::-;;:::i;3483:126::-;;;;;;;;;;-1:-1:-1;3483:126:6;;;;;:::i;:::-;;:::i;2922:133::-;;;;;;;;;;-1:-1:-1;2922:133:6;;;;;:::i;:::-;;:::i;3799:46:11:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3799:46:11;;;;;;;;;;;;:::i;2349:143:6:-;;;;;;;;;;-1:-1:-1;2349:143:6;;;;;:::i;:::-;;:::i;3232:118::-;;;;;;;;;;-1:-1:-1;3232:118:6;;;;;:::i;:::-;;:::i;2632:139::-;;;;;;;;;;-1:-1:-1;2632:139:6;;;;;:::i;:::-;;:::i;3740:52:11:-;;;;;;;;;;;;3784:8;3740:52;;4936:121:6;;;;;;;;;;-1:-1:-1;4936:121:6;;;;;:::i;:::-;;:::i;4262:117::-;;;;;;;;;;-1:-1:-1;4262:117:6;;;;;:::i;:::-;;:::i;5050:198:11:-;;;;;;;;;;-1:-1:-1;2810:66:8;5221:11:11;5050:198;;9016:244;;;;;;;;;;-1:-1:-1;2134:66:8;9196:11:11;9238:14;9016:244;;5184:125:6;;;;;;;;;;-1:-1:-1;5184:125:6;;;;;:::i;:::-;;:::i;4528:142::-;;;;;;;;;;-1:-1:-1;4528:142:6;;;;;:::i;:::-;;:::i;5063:115::-;;;;;;;;;;-1:-1:-1;5063:115:6;;;;;:::i;:::-;;:::i;4676:110::-;;;;;;;;;;-1:-1:-1;4676:110:6;;;;;:::i;:::-;;:::i;3988:116::-;4052:45;2042:66:7;4089:7:6;4052:23;:45::i;:::-;3988:116;:::o;3860:122::-;3927:48;1842:66:7;3967:7:6;3927:23;:48::i;3356:121::-;3422:48;1026:66:7;3462:7:6;3422:23;:48::i;4385:137::-;4447:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4466:49:::1;1026:66:7;4507:7:6::0;4466:24:::1;:49::i;:::-;4385:137:::0;;:::o;5337:247::-;-1:-1:-1;;;;;;;;;;;5413:24:6;;:45;;;;;5442:16;5441:17;5413:45;5409:118;;;5474:42;;-1:-1:-1;;;5474:42:6;;4833:2:13;5474:42:6;;;4815:21:13;;;4852:18;;;4845:30;4911:34;4891:18;;;4884:62;4963:18;;5474:42:6;4631:356:13;5409:118:6;5536:41;5563:4;5569:7;5536:26;:41::i;3615:111::-;3677:42;1430:66:7;3711:7:6;3677:23;:42::i;6611:122:11:-;6694:32;;-1:-1:-1;;;6694:32:11;;5194:2:13;6694:32:11;;;5176:21:13;5233:2;5213:18;;;5206:30;-1:-1:-1;;;5252:18:13;;;5245:52;5314:18;;6694:32:11;4992:346:13;2064:135:6;2125:4;2148:44;822:64:7;2184:7:6;2148:21;:44::i;:::-;2141:51;2064:135;-1:-1:-1;;2064:135:6:o;10655:619:11:-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;10821:22:11::1;10867:21;10890:4;;10896:8;10856:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10846:60;;;;;;10821:85;;10975:22;11000:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;;;-1:-1:-1;11047:18:11;11039:58:::1;;;::::0;-1:-1:-1;;;11039:58:11;;6593:2:13;11039:58:11::1;::::0;::::1;6575:21:13::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;11039:58:11::1;6391:351:13::0;11039:58:11::1;11114:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;11107:36;11160:16:::1;:14;:16::i;:::-;:32;11177:14;11160:32;;;;;;;;;;;11153:39;;;11229:21;-1:-1:-1::0;;;;;11207:60:11::1;;11252:4;;11258:8;11207:60;;;;;;;;:::i;:::-;;;;;;;;10811:463;;10655:619:::0;;;;:::o;9749:672::-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;9916:28:11;::::1;1072:20:12::0;9908:63:11::1;;;::::0;-1:-1:-1;;;9908:63:11;;7279:2:13;9908:63:11::1;::::0;::::1;7261:21:13::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:13;;;7330:50;7397:18;;9908:63:11::1;7077:344:13::0;9908:63:11::1;9982:22;10028:17;10047:4;;10053:8;10017:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10007:56;;;;;;9982:81;;10074:22;10117:27;:25;:27::i;:::-;10099:45;::::0;:15:::1;:45;:::i;:::-;10074:70;;10154:26;10200:25;2810:66:8::0;5221:11:11;;5050:198;10200:25:::1;10183:42;::::0;:14;:42:::1;:::i;:::-;10154:71;;10268:14;10236:13;:11;:13::i;:::-;:29;::::0;;;::::1;::::0;;;;;;;:46;10327:18;10292:16:::1;:14;:16::i;:::-;:32;10309:14;10292:32;;;;;;;;;;;:53;;;;10380:17;-1:-1:-1::0;;;;;10360:54:11::1;;10399:4;;10405:8;10360:54;;;;;;;;:::i;:::-;;;;;;;;9898:523;;;9749:672:::0;;;;:::o;3732:122:6:-;3799:48;1636:66:7;3839:7:6;3799:23;:48::i;3061:143::-;3126:4;3149:48;2252:66:7;3189:7:6;3149:21;:48::i;2498:128::-;2556:4;2579:40;1430:66:7;2611:7:6;2579:21;:40::i;4110:126::-;4179:50;2252:66:7;4221:7:6;4179:23;:50::i;12173:1939:11:-;1750:45:6;3916:10:3;3061:143:6;:::i;1750:45::-;1729:113;;;;-1:-1:-1;;;1729:113:6;;;;;;;:::i;:::-;2134:66:8;9196:11:11;9238:14;6773:53:::1;;;::::0;-1:-1:-1;;;6773:53:11;;7890:2:13;6773:53:11::1;::::0;::::1;7872:21:13::0;7929:2;7909:18;;;7902:30;7968:26;7948:18;;;7941:54;8012:18;;6773:53:11::1;7688:348:13::0;6773:53:11::1;7067:24:::2;:22;:24::i;:::-;7066:25;7058:53;;;::::0;-1:-1:-1;;;7058:53:11;;8243:2:13;7058:53:11::2;::::0;::::2;8225:21:13::0;8282:2;8262:18;;;8255:30;-1:-1:-1;;;8301:18:13;;;8294:45;8356:18;;7058:53:11::2;8041:339:13::0;7058:53:11::2;12355:22:::3;12401:17;12420:4;;12426:8;12390:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12380:56;;;;;;12355:81;;12446:22;12471:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12539:16:11::3;:14;:16::i;:::-;:32;::::0;;;::::3;::::0;;;;;;;;;-1:-1:-1;12589:18:11;12581:58:::3;;;::::0;-1:-1:-1;;;12581:58:11;;6593:2:13;12581:58:11::3;::::0;::::3;6575:21:13::0;6632:2;6612:18;;;6605:30;6671:29;6651:18;;;6644:57;6718:18;;12581:58:11::3;6391:351:13::0;12581:58:11::3;-1:-1:-1::0;;;;;12657:28:11;::::3;1072:20:12::0;12649:63:11::3;;;::::0;-1:-1:-1;;;12649:63:11;;7279:2:13;12649:63:11::3;::::0;::::3;7261:21:13::0;7318:2;7298:18;;;7291:30;-1:-1:-1;;;7337:18:13;;;7330:50;7397:18;;12649:63:11::3;7077:344:13::0;12649:63:11::3;12852:15;12834:14;:33;;:69;;;-1:-1:-1::0;12899:3:11::3;12871:16;-1:-1:-1::0;;;;;;;;;;;5740:11:11;;5572:195;12871:16:::3;-1:-1:-1::0;;;;;12871:32:11::3;;12834:69;12813:139;;;::::0;-1:-1:-1;;;12813:139:11;;8587:2:13;12813:139:11::3;::::0;::::3;8569:21:13::0;8626:2;8606:18;;;8599:30;8665:25;8645:18;;;8638:53;8708:18;;12813:139:11::3;8385:347:13::0;12813:139:11::3;12992:15;12970:18;:37;;12962:72;;;::::0;-1:-1:-1;;;12962:72:11;;8939:2:13;12962:72:11::3;::::0;::::3;8921:21:13::0;8978:2;8958:18;;;8951:30;-1:-1:-1;;;8997:18:13;;;8990:52;9059:18;;12962:72:11::3;8737:346:13::0;12962:72:11::3;13045:36;13063:17;-1:-1:-1::0;;;;;;;;;;;8883:31:11;8744:186;13045:36:::3;13161:12;13175:23:::0;13202:17:::3;-1:-1:-1::0;;;;;13202:30:11::3;13269:24;;;13295:4;;13246:54;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;13246:54:11;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13246:54:11::3;-1:-1:-1::0;;;;;;13246:54:11;;::::3;::::0;;;::::3;::::0;;;13202:108;;::::3;::::0;13246:54;13202:108:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:150;;;;13328:7;13344:10;13320:36;;;;;-1:-1:-1::0;;;13320:36:11::3;;;;;;;;:::i;:::-;-1:-1:-1::0;13584:37:11::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;13584:37:11::3;-1:-1:-1::0;;;13584:37:11::3;::::0;;13540:91;;-1:-1:-1;;;;;13540:30:11;::::3;::::0;:91:::3;::::0;::::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13516:115:11;;-1:-1:-1;13516:115:11;-1:-1:-1;13516:115:11;13641:45:::3;;;::::0;-1:-1:-1;;;13641:45:11;;9831:2:13;13641:45:11::3;::::0;::::3;9813:21:13::0;9870:2;9850:18;;;9843:30;9909:27;9889:18;;;9882:55;9954:18;;13641:45:11::3;9629:349:13::0;13641:45:11::3;13716:10;13705:30;;;;;;;;;;;;:::i;:::-;13704:31;13696:69;;;::::0;-1:-1:-1;;;13696:69:11;;10435:2:13;13696:69:11::3;::::0;::::3;10417:21:13::0;10474:2;10454:18;;;10447:30;10513:27;10493:18;;;10486:55;10558:18;;13696:69:11::3;10233:349:13::0;13696:69:11::3;13836:13;:11;:13::i;:::-;:29;::::0;;;::::3;::::0;;;;;;;13829:36;13882:16:::3;:14;:16::i;:::-;:32;13899:14;13882:32;;;;;;;;;;;13875:39;;;13953:17;-1:-1:-1::0;;;;;13930:47:11::3;;13972:4;;13930:47;;;;;;;:::i;:::-;;;;;;;;13992:8;13988:118;;;14016:18;9460:3:::0;2134:66:8;9447:17:11;9333:147;14016:18:::3;14053:42;::::0;-1:-1:-1;;;;;14053:42:11;::::3;::::0;::::3;::::0;;;::::3;13988:118;12345:1767;;;;;12173:1939:::0;;;;:::o;4763:281::-;2455:66:8;4921:11:11;;;3784:8;4961:25;;4960:55;;3784:8;4960:55;;;4990:5;4960:55;4952:63;;5025:12;4763:281;:::o;2777:139:6:-;2840:4;2863:46;1842:66:7;2901:7:6;2863:21;:46::i;4792:138::-;4855:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4874:49:::1;1636:66:7;4915:7:6::0;4874:24:::1;:49::i;2205:138::-:0;2267:4;2290:46;1026:66:7;2328:7:6;2290:21;:46::i;3483:126::-;3552:50;-1:-1:-1;;;;;;;;;;;3594:7:6;3552:23;:50::i;2922:133::-;2982:4;3005:43;2042:66:7;3040:7:6;3005:21;:43::i;2349:143::-;2414:4;2437:48;-1:-1:-1;;;;;;;;;;;2477:7:6;2437:21;:48::i;3232:118::-;3297:46;822:64:7;3335:7:6;3297:23;:46::i;2632:139::-;2695:4;2718:46;1636:66:7;2756:7:6;2718:21;:46::i;4936:121::-;5001:49;1842:66:7;5042:7:6;5001:24;:49::i;4262:117::-;4325:47;822:64:7;4364:7:6;4325:24;:47::i;5184:125::-;5251:51;2252:66:7;5294:7:6;5251:24;:51::i;4528:142::-;4593:7;3916:10:3;-1:-1:-1;;;;;1931:37:6;;;1910:106;;;;-1:-1:-1;;;1910:106:6;;;;;;;:::i;:::-;4612:51:::1;-1:-1:-1::0;;;;;;;;;;;4655:7:6;4612:24:::1;:51::i;5063:115::-:0;5125:46;2042:66:7;5163:7:6;5125:24;:46::i;4676:110::-;4736:43;1430:66:7;4771:7:6;4736:24;:43::i;6990:152:3:-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7110:25:::1;7121:4;7127:7;7110:10;:25::i;:::-;6990:152:::0;;;:::o;7408:154::-;6654:7;6680:14;;;-1:-1:-1;;;;;;;;;;;6680:14:3;;;;;:24;;;5030:16;5041:4;5030:10;:16::i;:::-;7529:26:::1;7541:4;7547:7;7529:11;:26::i;8078:233::-:0;-1:-1:-1;;;;;8171:23:3;;3916:10;8171:23;8150:117;;;;-1:-1:-1;;;8150:117:3;;10789:2:13;8150:117:3;;;10771:21:13;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:13;;;10911:45;10973:19;;8150:117:3;10587:411:13;8150:117:3;8278:26;8290:4;8296:7;8278:11;:26::i;5143:154::-;5236:4;5259:14;;;-1:-1:-1;;;;;;;;;;;5259:14:3;;;;;;;;-1:-1:-1;;;;;5259:31:3;;;;;;;;;;;;;;;5143:154::o;1160:189:5:-;1230:35;1288:54;1325:16;;;;;;;;;;;;;-1:-1:-1;;;1325:16:5;;;1288:36;:54::i;:::-;1281:61;;1160:189;:::o;1569:193::-;1642:35;1700:55;1737:17;;;;;;;;;;;;;-1:-1:-1;;;1737:17:5;;;1700:36;:55::i;5904:564:11:-;5955:4;5971:23;5997:16;-1:-1:-1;;;;;;;;;;;5740:11:11;;5572:195;5997:16;5971:42;-1:-1:-1;;;;;;6113:31:11;;6109:74;;6167:5;6160:12;;;5904:564;:::o;6109:74::-;6321:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6321:37:11;-1:-1:-1;;;6321:37:11;;;6279:89;;6238:12;;;;-1:-1:-1;;;;;6279:28:11;;;:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:131;;;;6386:7;6402:10;6378:36;;;;;-1:-1:-1;;;6378:36:11;;;;;;;;:::i;:::-;;6442:10;6431:30;;;;;;;;;;;;:::i;:::-;6424:37;;;;;5904:564;:::o;5576:95:3:-;5634:30;5645:4;3916:10;5634;:30::i;9592:227::-;9667:22;9675:4;9681:7;9667;:22::i;:::-;9662:151;;9705:14;;;;-1:-1:-1;;;;;;;;;;;9705:14:3;;;;;;;;-1:-1:-1;;;;;9705:31:3;;;;;;;;;;:38;;-1:-1:-1;;9705:38:3;9739:4;9705:38;;;9762:40;3916:10;;9705:14;;9762:40;;9705:14;9762:40;9592:227;;:::o;9978:228::-;10053:22;10061:4;10067:7;10053;:22::i;:::-;10049:151;;;10125:5;10091:14;;;-1:-1:-1;;;;;;;;;;;10091:14:3;;;;;;;;-1:-1:-1;;;;;10091:31:3;;;;;;;;;;:39;;-1:-1:-1;;10091:39:3;;;10149:40;3916:10;;10091:14;;10149:40;;10125:5;10149:40;9978:228;;:::o;1151:298:4:-;1251:50;1317:16;1363:4;1346:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1346:22:4;;;;;;;;;1336:33;;1346:22;1336:33;;;;;1151:298;-1:-1:-1;;;1151:298:4:o;5941:484:3:-;6021:22;6029:4;6035:7;6021;:22::i;:::-;6016:403;;6204:41;6232:7;-1:-1:-1;;;;;6204:41:3;6242:2;6204:19;:41::i;:::-;6316:38;6344:4;6351:2;6316:19;:38::i;:::-;6111:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6111:265:3;;;;;;;;;;-1:-1:-1;;;6059:349:3;;;;;;;:::i;2248:441:9:-;2323:13;2348:19;2380:10;2384:6;2380:1;:10;:::i;:::-;:14;;2393:1;2380:14;:::i;:::-;2370:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:25:9;;2348:47;;-1:-1:-1;;;2405:6:9;2412:1;2405:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2405:15:9;;;;;;;;;-1:-1:-1;;;2430:6:9;2437:1;2430:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2430:15:9;;;;;;;;-1:-1:-1;2460:9:9;2472:10;2476:6;2472:1;:10;:::i;:::-;:14;;2485:1;2472:14;:::i;:::-;2460:26;;2455:132;2492:1;2488;:5;2455:132;;;-1:-1:-1;;;2539:5:9;2547:3;2539:11;2526:25;;;;;;;:::i;:::-;;;;2514:6;2521:1;2514:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;2514:37:9;;;;;;;;-1:-1:-1;2575:1:9;2565:11;;;;;2495:3;;;:::i;:::-;;;2455:132;;;-1:-1:-1;2604:10:9;;2596:55;;;;-1:-1:-1;;;2596:55:9;;12894:2:13;2596:55:9;;;12876:21:13;;;12913:18;;;12906:30;12972:34;12952:18;;;12945:62;13024:18;;2596:55:9;12692:356:13;2596:55:9;2675:6;2248:441;-1:-1:-1;;;2248:441:9:o;726:173:13:-;794:20;;-1:-1:-1;;;;;843:31:13;;833:42;;823:70;;889:1;886;879:12;823:70;726:173;;;:::o;904:186::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1055:29;1074:9;1055:29;:::i;1277:254::-;1345:6;1353;1406:2;1394:9;1385:7;1381:23;1377:32;1374:52;;;1422:1;1419;1412:12;1374:52;1458:9;1445:23;1435:33;;1487:38;1521:2;1510:9;1506:18;1487:38;:::i;:::-;1477:48;;1277:254;;;;;:::o;1536:347::-;1587:8;1597:6;1651:3;1644:4;1636:6;1632:17;1628:27;1618:55;;1669:1;1666;1659:12;1618:55;-1:-1:-1;1692:20:13;;1735:18;1724:30;;1721:50;;;1767:1;1764;1757:12;1721:50;1804:4;1796:6;1792:17;1780:29;;1856:3;1849:4;1840:6;1832;1828:19;1824:30;1821:39;1818:59;;;1873:1;1870;1863:12;1818:59;1536:347;;;;;:::o;1888:409::-;1958:6;1966;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2075:9;2062:23;2108:18;2100:6;2097:30;2094:50;;;2140:1;2137;2130:12;2094:50;2179:58;2229:7;2220:6;2209:9;2205:22;2179:58;:::i;:::-;2256:8;;2153:84;;-1:-1:-1;1888:409:13;-1:-1:-1;;;;1888:409:13:o;2702:118::-;2788:5;2781:13;2774:21;2767:5;2764:32;2754:60;;2810:1;2807;2800:12;2825:612;2910:6;2918;2926;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3026:29;3045:9;3026:29;:::i;:::-;3016:39;;3106:2;3095:9;3091:18;3078:32;3133:18;3125:6;3122:30;3119:50;;;3165:1;3162;3155:12;3119:50;3204:58;3254:7;3245:6;3234:9;3230:22;3204:58;:::i;:::-;3281:8;;-1:-1:-1;3178:84:13;-1:-1:-1;;3366:2:13;3351:18;;3338:32;3379:28;3338:32;3379:28;:::i;:::-;2825:612;;;;-1:-1:-1;2825:612:13;;-1:-1:-1;;2825:612:13:o;3624:250::-;3709:1;3719:113;3733:6;3730:1;3727:13;3719:113;;;3809:11;;;3803:18;3790:11;;;3783:39;3755:2;3748:10;3719:113;;;-1:-1:-1;;3866:1:13;3848:16;;3841:27;3624:250::o;3879:396::-;4028:2;4017:9;4010:21;3991:4;4060:6;4054:13;4103:6;4098:2;4087:9;4083:18;4076:34;4119:79;4191:6;4186:2;4175:9;4171:18;4166:2;4158:6;4154:15;4119:79;:::i;:::-;4259:2;4238:15;-1:-1:-1;;4234:29:13;4219:45;;;;4266:2;4215:54;;3879:396;-1:-1:-1;;3879:396:13:o;4280:346::-;4482:2;4464:21;;;4521:2;4501:18;;;4494:30;-1:-1:-1;;;4555:2:13;4540:18;;4533:52;4617:2;4602:18;;4280:346::o;5343:345::-;5545:2;5527:21;;;5584:2;5564:18;;;5557:30;-1:-1:-1;;;5618:2:13;5603:18;;5596:51;5679:2;5664:18;;5343:345::o;5693:266::-;5781:6;5776:3;5769:19;5833:6;5826:5;5819:4;5814:3;5810:14;5797:43;-1:-1:-1;5885:1:13;5860:16;;;5878:4;5856:27;;;5849:38;;;;5941:2;5920:15;;;-1:-1:-1;;5916:29:13;5907:39;;;5903:50;;5693:266::o;5964:422::-;-1:-1:-1;;;;;6171:32:13;;6153:51;;6240:2;6235;6220:18;;6213:30;;;-1:-1:-1;;6260:61:13;;6302:18;;6294:6;6286;6260:61;:::i;:::-;6252:69;;6371:6;6364:14;6357:22;6352:2;6341:9;6337:18;6330:50;5964:422;;;;;;;:::o;6747:325::-;6926:2;6915:9;6908:21;6889:4;6946:61;7003:2;6992:9;6988:18;6980:6;6972;6946:61;:::i;:::-;6938:69;;7057:6;7050:14;7043:22;7038:2;7027:9;7023:18;7016:50;6747:325;;;;;;:::o;7426:127::-;7487:10;7482:3;7478:20;7475:1;7468:31;7518:4;7515:1;7508:15;7542:4;7539:1;7532:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;9088:244::-;9245:2;9234:9;9227:21;9208:4;9265:61;9322:2;9311:9;9307:18;9299:6;9291;9265:61;:::i;:::-;9257:69;9088:244;-1:-1:-1;;;;9088:244:13:o;9337:287::-;9466:3;9504:6;9498:13;9520:66;9579:6;9574:3;9567:4;9559:6;9555:17;9520:66;:::i;:::-;9602:16;;;;;9337:287;-1:-1:-1;;9337:287:13:o;9983:245::-;10050:6;10103:2;10091:9;10082:7;10078:23;10074:32;10071:52;;;10119:1;10116;10109:12;10071:52;10151:9;10145:16;10170:28;10192:5;10170:28;:::i;11297:812::-;11708:25;11703:3;11696:38;11678:3;11763:6;11757:13;11779:75;11847:6;11842:2;11837:3;11833:12;11826:4;11818:6;11814:17;11779:75;:::i;:::-;-1:-1:-1;;;11913:2:13;11873:16;;;11905:11;;;11898:40;11963:13;;11985:76;11963:13;12047:2;12039:11;;12032:4;12020:17;;11985:76;:::i;:::-;12081:17;12100:2;12077:26;;11297:812;-1:-1:-1;;;;11297:812:13:o;12114:168::-;12187:9;;;12218;;12235:15;;;12229:22;;12215:37;12205:71;;12256:18;;:::i;12287:127::-;12348:10;12343:3;12339:20;12336:1;12329:31;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12419:127;12480:10;12475:3;12471:20;12468:1;12461:31;12511:4;12508:1;12501:15;12535:4;12532:1;12525:15;12551:136;12590:3;12618:5;12608:39;;12627:18;;:::i;:::-;-1:-1:-1;;;12663:18:13;;12551:136::o", "linkReferences": {}, - "immutableReferences": { "8949": [{ "start": 2280, "length": 32 }] } + "immutableReferences": { "856": [{ "start": 2280, "length": 32 }] } }, "methodIdentifiers": { "ENABLE_WINDOW_DURATION_SLOT()": "52b1e35e", @@ -567,7 +567,7 @@ "revokeUpgradeGovernor(address)": "ed9ef16a", "upgradeTo(address,bytes,bool)": "7147855d" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f\",\"dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg\"]},\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29\",\"dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upgradeActivationDelay\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FinalizedImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"ImplementationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"ImplementationUpgraded\",\"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\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ENABLE_WINDOW_DURATION_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_UPGRADE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_DELAY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"addImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEnableWindowDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUpgradeActivationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAppRoleAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isGovernanceAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isNotFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"notFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSecurityAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTokenAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isUpgradeGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"registerUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"removedImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"removeImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeAppRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeGovernanceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeSecurityAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeTokenAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUpgradeGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"finalize\",\"type\":\"bool\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The Proxy contract implements delegation of calls to other contracts (`implementations`), with proper forwarding of return values and revert reasons. This pattern allows retaining the contract storage while replacing implementation code. The following operations are supported by the proxy contract: - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation. - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`). - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version. The only entity allowed to perform the above operations is the proxy governor (see :sol:mod:`ProxyGovernance`). Every implementation is required to have an `initialize` function that replaces the constructor of a normal contract. Furthermore, the only parameter of this function is an array of bytes (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the implementation to ensure that this function cannot be run more than once if so desired. When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also announced, allowing users of the contract to analyze the full effect of an upgrade to the new implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is identical to the announced `data` is the upgrade performed by pointing the proxy to the new implementation and calling its `initialize` function with this `data`. ProxyStorage contains the storage variables required by the Proxy. The Proxy storage variables are not in the low slot addresses (a.k.a linear storage) - to avoid storage collision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Proxy_5_0_0.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":cairo-lang/=lib/cairo-lang/src/\",\":forge-std/=lib/forge-std/src/\",\":starknet-cc/=lib/cairo-lang/src/starkware/starknet/solidity/\",\":starknet-token/=lib/starknet-token/src/starkware/isd/\",\":starkware/isd/=lib/starknet-token/src/starkware/isd/\",\":starkware/solidity/=lib/cairo-lang/src/starkware/solidity/\",\":starkware/starknet/solidity/=lib/cairo-lang/src/starkware/starknet/solidity/\"]},\"sources\":{\"src/5_0_0/AccessControl.sol\":{\"keccak256\":\"0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://780e24d5629c673aa1efcc98e1c8f6129d944ef8b32792cc693dfda095873333\",\"dweb:/ipfs/QmPZz3C6Pn4BcZuX3ABZWCcdXhW5YavXPWsAT3WzXXxFbt\"]},\"src/5_0_0/NamedStorage.sol\":{\"keccak256\":\"0xc2b96c4e9fca2bb7cb265086a8377291a2fcf038c1c938ded83cc62ffad552c3\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://9d2f160447e77d2f81fec54851ecc960591dba9a92c963a648fd11dd4aa14917\",\"dweb:/ipfs/QmWRGXLdBHy715WAuBNKe1C25rbBmP8oEYVqh5B72hTA39\"]},\"src/5_0_0/ProxyStorage.sol\":{\"keccak256\":\"0xe0e4255645aab6b7a9b7419420e677130b54f42cb136ac8cb5e2d6bf7f034d03\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://b6ffab7681237bd5bbf692bad55491aa28d71b6db222432be02ab99244a208bc\",\"dweb:/ipfs/QmZ2E7Ke48kctcRTvhjMaKWEcf8Z533r39Wvs3tWtk55XA\"]},\"src/5_0_0/Roles.sol\":{\"keccak256\":\"0xf81e26787d8d268c8158517ef463fa357ac499ca74fc5d908f37ec53503006a1\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://e40e4d0d580b2584cae427ab26ddfb8a725c00df2a359dd44fb5800908251f06\",\"dweb:/ipfs/QmWRwrDxZAp5gMvt61LVhGQaWk7bx1H7FFAccs89wZdGFG\"]},\"src/5_0_0/RolesLib.sol\":{\"keccak256\":\"0x6e7ae318b0632d639074806bb9e209ed8dd2537662812b0c4e73fbea94415f1d\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://1607f278263545b0290927979dbdd7837aa8b43c557f12ab8ab8b137c8be2473\",\"dweb:/ipfs/QmcjyDCpKtSTRABNUdRKAFstc5N5hU1ygLvke6CDDScQwW\"]},\"src/5_0_0/StorageSlots.sol\":{\"keccak256\":\"0x303de59cd73d16544cdda9e8a5ff90c2f0f8e42bd823a585b497eda076081272\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://126b212b0d36003b6e8688c6544296a63a8daa0b2d19ed70291cce0236b0ef2c\",\"dweb:/ipfs/QmcoKtyHSFSjtiBZ6e4nnUnqcQdMNrWXgmSbxejN9iDran\"]},\"src/5_0_0/Strings.sol\":{\"keccak256\":\"0x43b2d3275f2d2927db40aebd1b6e5514b54f778043fff677d3714c824f7ad9e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa5f40e3f0f64c825f643f123260949bdcb63a552d4d3b49551efa5f4927f0e7\",\"dweb:/ipfs/QmNVmkv2FB3aUJb8g4BrF9D19Y37PsrHPf31dD636Kk82f\"]},\"src/Proxy_5_0_0.sol\":{\"keccak256\":\"0xf381b8d9116c0f51ba70df5a6b89c8a366543f8375d4a2ab5032b125d0001a0e\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://77f7a2d7624aa8bfd4c8bc7f4f778538ac6ac3f75bcc4b80835f7132bb016155\",\"dweb:/ipfs/QmPiW7pxBpNmoXNkpLn5p2VTEYr3b4Yd77REMPTpKWF3WW\"]},\"src/libraries/Addresses.sol\":{\"keccak256\":\"0xb0865ea6dcc8f3e095309859500c92912cf149f5a88d4d7ee73f75c5549bdb16\",\"license\":\"Apache-2.0.\",\"urls\":[\"bzz-raw://924d7db5ad489487c980f85511ee04002ec4921bb09e787614dd56c619b5d35a\",\"dweb:/ipfs/QmZbGn7PmGHWYqjj3rsypoJon3LJnbD4bP1fWdn1ivd4JR\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.24+commit.e11b9ed9" }, "language": "Solidity", @@ -1097,14 +1097,6 @@ "libraries": {} }, "sources": { - "lib/forge-std/src/console.sol": { - "keccak256": "0x0b7475858d62180b6ccbea2181cf9fa0ed6773fdb8b0f5cbd946d13c5660579f", - "urls": [ - "bzz-raw://4ba7fa71d8d3ace512ee0a3d9d4d5923a6eb01fcbd93219726e40eeb50a8e52f", - "dweb:/ipfs/QmScHyHRhrWp21Gazmzq1HR1YDjkbpya6SPTHEs5wzjhwg" - ], - "license": "MIT" - }, "src/5_0_0/AccessControl.sol": { "keccak256": "0xf5b3f552f8bd4dabcde63211086f4cda6d4b8637fe91297b2330f0fd9ebfa09b", "urls": [ @@ -1138,10 +1130,10 @@ "license": "Apache-2.0." }, "src/5_0_0/RolesLib.sol": { - "keccak256": "0x3faa928d001ca6505da2b314e9b155d09853cb1a678d5b8a250da02c31831572", + "keccak256": "0x6e7ae318b0632d639074806bb9e209ed8dd2537662812b0c4e73fbea94415f1d", "urls": [ - "bzz-raw://b37fd2d23c868b57b9c07dbab56e7a7e1a3b0dab9a2adf9978c239ace4b14d29", - "dweb:/ipfs/QmTQ7eUq2PgwSxPpzCLviQqvGz55YKjD3Yj1BGy17bHD41" + "bzz-raw://1607f278263545b0290927979dbdd7837aa8b43c557f12ab8ab8b137c8be2473", + "dweb:/ipfs/QmcjyDCpKtSTRABNUdRKAFstc5N5hU1ygLvke6CDDScQwW" ], "license": "Apache-2.0." }, @@ -1180,5 +1172,5 @@ }, "version": 1 }, - "id": 12 + "id": 11 } From 7a72a866a094c41f15742702d2bb758d3c4880fc Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 17:43:06 +0530 Subject: [PATCH 10/12] feat : updated funcs in proxy 5.0.0 --- crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs index 5c0f4d3..65d9eee 100644 --- a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs @@ -17,11 +17,11 @@ abigen!( function proxyRemoveGovernor(address governorForRemoval) external function proxyAcceptGovernance() external - function register_app_governor(address account) external + function registerAppGovernor(address account) external function registerAppRoleAdmin(address account) external function registerGovernanceAdmin(address account) external function registerOperator(address account) external - function register_security_admin(address account) external + function registerSecurityAdmin(address account) external function registerSecurityAgent(address account) external function registerTokenAdmin(address account) external function registerUpgradeGovernor(address account) external From 6d53b51f8d0f714561b6e7f23f130dbfbfb3db59 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 18:17:18 +0530 Subject: [PATCH 11/12] feat : updated enum --- crates/l2/starkgate-manager-client/src/lib.rs | 2 +- crates/l2/starkgate-registry-client/src/lib.rs | 2 +- crates/l2/starknet-core-contract-client/src/lib.rs | 4 ++-- crates/l2/starknet-eth-bridge-client/src/lib.rs | 2 +- crates/l2/starknet-proxy-client/src/deploy.rs | 8 ++++---- crates/l2/starknet-token-bridge-client/src/lib.rs | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/l2/starkgate-manager-client/src/lib.rs b/crates/l2/starkgate-manager-client/src/lib.rs index 3558591..4390499 100644 --- a/crates/l2/starkgate-manager-client/src/lib.rs +++ b/crates/l2/starkgate-manager-client/src/lib.rs @@ -35,7 +35,7 @@ pub async fn deploy_starkgate_manager_behind_safe_proxy( client.clone(), STARKGATE_MANAGER, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxyLatest, + ProxyVersion::SafeProxy5_0_0, ) .await?; diff --git a/crates/l2/starkgate-registry-client/src/lib.rs b/crates/l2/starkgate-registry-client/src/lib.rs index 28bb98f..fd8148d 100644 --- a/crates/l2/starkgate-registry-client/src/lib.rs +++ b/crates/l2/starkgate-registry-client/src/lib.rs @@ -36,7 +36,7 @@ pub async fn deploy_starkgate_registry_behind_safe_proxy( client.clone(), STARKGATE_REGISTRY, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxyLatest, + ProxyVersion::SafeProxy5_0_0, ) .await?; diff --git a/crates/l2/starknet-core-contract-client/src/lib.rs b/crates/l2/starknet-core-contract-client/src/lib.rs index 976cc5b..9841d83 100644 --- a/crates/l2/starknet-core-contract-client/src/lib.rs +++ b/crates/l2/starknet-core-contract-client/src/lib.rs @@ -42,7 +42,7 @@ pub async fn deploy_starknet_sovereign_behind_safe_proxy( client.clone(), STARKNET_SOVEREIGN, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::SafeProxy3_0_2, ) .await?; @@ -84,7 +84,7 @@ pub async fn deploy_starknet_validity_behind_safe_proxy( client.clone(), STARKNET, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::SafeProxy3_0_2, ) .await?; diff --git a/crates/l2/starknet-eth-bridge-client/src/lib.rs b/crates/l2/starknet-eth-bridge-client/src/lib.rs index eb6abdd..1a6b079 100644 --- a/crates/l2/starknet-eth-bridge-client/src/lib.rs +++ b/crates/l2/starknet-eth-bridge-client/src/lib.rs @@ -35,7 +35,7 @@ pub async fn deploy_starknet_eth_bridge_behind_safe_proxy( client.clone(), STARKNET_ETH_BRIDGE, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxy, + ProxyVersion::SafeProxy3_0_2, ) .await?; diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 938e449..3ead66b 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -36,9 +36,9 @@ pub enum ProxyVersion { /// deploys unsafe proxy. UnsafeProxy, /// deploys safe proxy (starknet proxy version 3.0.2) - SafeProxy, + SafeProxy3_0_2, /// deploys safe proxy (starknet proxy version 5.0.0) - SafeProxyLatest, + SafeProxy5_0_0, } pub async fn deploy_contract_behind_proxy( @@ -58,8 +58,8 @@ pub async fn deploy_contract_behind_proxy( log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); let type_of_proxy = match proxy_type { - ProxyVersion::SafeProxy => SAFE_PROXY_3_0_2, - ProxyVersion::SafeProxyLatest => SAFE_PROXY_5_0_0, + ProxyVersion::SafeProxy3_0_2 => SAFE_PROXY_3_0_2, + ProxyVersion::SafeProxy5_0_0 => SAFE_PROXY_5_0_0, ProxyVersion::UnsafeProxy => UNSAFE_PROXY, }; diff --git a/crates/l2/starknet-token-bridge-client/src/lib.rs b/crates/l2/starknet-token-bridge-client/src/lib.rs index b0be912..c585bae 100644 --- a/crates/l2/starknet-token-bridge-client/src/lib.rs +++ b/crates/l2/starknet-token-bridge-client/src/lib.rs @@ -37,7 +37,7 @@ pub async fn deploy_starknet_token_bridge_behind_safe_proxy( client.clone(), STARKNET_TOKEN_BRIDGE, NO_CONSTRUCTOR_ARG, - ProxyVersion::SafeProxyLatest, + ProxyVersion::SafeProxy5_0_0, ) .await?; From 06f4def47a96ef4eaa21fefac1be0256a55cf8c7 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 3 Jul 2024 18:50:53 +0530 Subject: [PATCH 12/12] refactoring and renaming --- .../src/clients/starkgate_manager.rs | 10 +++++----- .../src/clients/starkgate_registry.rs | 10 +++++----- .../src/clients/sovereign.rs | 10 +++++----- .../src/clients/validity.rs | 10 +++++----- .../src/clients/eth_bridge.rs | 10 +++++----- crates/l2/starknet-proxy-client/src/clients/mod.rs | 1 - .../starknet-proxy-client/src/clients/proxy_3_0_2.rs | 6 +++--- .../starknet-proxy-client/src/clients/proxy_5_0_0.rs | 6 +++--- crates/l2/starknet-proxy-client/src/deploy.rs | 4 ++-- crates/l2/starknet-proxy-client/src/interfaces/mod.rs | 1 + .../src/{clients => interfaces}/proxy.rs | 0 crates/l2/starknet-proxy-client/src/lib.rs | 1 + .../src/clients/token_bridge.rs | 10 +++++----- 13 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 crates/l2/starknet-proxy-client/src/interfaces/mod.rs rename crates/l2/starknet-proxy-client/src/{clients => interfaces}/proxy.rs (100%) diff --git a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs index b58987e..0f78e43 100644 --- a/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs +++ b/crates/l2/starkgate-manager-client/src/clients/starkgate_manager.rs @@ -4,11 +4,11 @@ use crate::interfaces::manager::StarkgateManager; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; pub struct StarkgateManagerContractClient { manager: StarkgateManager, - proxy_support: ProxySupportLatest, + proxy_support: ProxySupport5_0_0, manager_implementation: Address, } @@ -20,7 +20,7 @@ impl StarkgateManagerContractClient { ) -> Self { Self { manager: StarkgateManager::new(address, client.clone()), - proxy_support: ProxySupportLatest::new(address, client.clone()), + proxy_support: ProxySupport5_0_0::new(address, client.clone()), manager_implementation: implementation_address, } } @@ -32,8 +32,8 @@ impl AsRef> for StarkgateManagerCo } } -impl AsRef> for StarkgateManagerContractClient { - fn as_ref(&self) -> &ProxySupportLatest { +impl AsRef> for StarkgateManagerContractClient { + fn as_ref(&self) -> &ProxySupport5_0_0 { &self.proxy_support } } diff --git a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs index f35ed53..604897d 100644 --- a/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs +++ b/crates/l2/starkgate-registry-client/src/clients/starkgate_registry.rs @@ -4,11 +4,11 @@ use crate::interfaces::registry::StarkgateRegistry; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; pub struct StarkgateRegistryContractClient { registry: StarkgateRegistry, - proxy_support: ProxySupportLatest, + proxy_support: ProxySupport5_0_0, registry_implementation: Address, } @@ -20,7 +20,7 @@ impl StarkgateRegistryContractClient { ) -> Self { Self { registry: StarkgateRegistry::new(address, client.clone()), - proxy_support: ProxySupportLatest::new(address, client.clone()), + proxy_support: ProxySupport5_0_0::new(address, client.clone()), registry_implementation: implementation_address, } } @@ -31,8 +31,8 @@ impl AsRef> for StarkgateRegistry } } -impl AsRef> for StarkgateRegistryContractClient { - fn as_ref(&self) -> &ProxySupportLatest { +impl AsRef> for StarkgateRegistryContractClient { + fn as_ref(&self) -> &ProxySupport5_0_0 { &self.proxy_support } } diff --git a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs b/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs index 66b4f56..a2c3b6c 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/sovereign.rs @@ -4,7 +4,7 @@ use crate::interfaces::{ GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetSovereignContract, }; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; /// Client to interact with a Starknet core contract running in `Sovereign` mode @@ -12,7 +12,7 @@ pub struct StarknetSovereignContractClient { core_contract: StarknetSovereignContract, messaging: StarknetMessaging, operator: Operator, - proxy_support: ProxySupport, + proxy_support: ProxySupport3_0_2, governance: StarknetGovernance, governed_finalizable: GovernedFinalizable, core_contract_implementation: Address, @@ -28,7 +28,7 @@ impl StarknetSovereignContractClient { core_contract: StarknetSovereignContract::new(address, client.clone()), messaging: StarknetMessaging::new(address, client.clone()), operator: Operator::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupport3_0_2::new(address, client.clone()), governance: StarknetGovernance::new(address, client.clone()), governed_finalizable: GovernedFinalizable::new(address, client.clone()), core_contract_implementation: implementation_address, @@ -48,8 +48,8 @@ impl AsRef> for StarknetSovereign &self.messaging } } -impl AsRef> for StarknetSovereignContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarknetSovereignContractClient { + fn as_ref(&self) -> &ProxySupport3_0_2 { &self.proxy_support } } diff --git a/crates/l2/starknet-core-contract-client/src/clients/validity.rs b/crates/l2/starknet-core-contract-client/src/clients/validity.rs index 3b2b408..1520feb 100644 --- a/crates/l2/starknet-core-contract-client/src/clients/validity.rs +++ b/crates/l2/starknet-core-contract-client/src/clients/validity.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use ethers::abi::Address; -use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; use crate::interfaces::{ GovernedFinalizable, Operator, StarknetGovernance, StarknetMessaging, StarknetValidityContract, @@ -13,7 +13,7 @@ pub struct StarknetValidityContractClient { core_contract: StarknetValidityContract, messaging: StarknetMessaging, operator: Operator, - proxy_support: ProxySupport, + proxy_support: ProxySupport3_0_2, governance: StarknetGovernance, governed_finalizable: GovernedFinalizable, core_contract_implementation: ethers::addressbook::Address, @@ -29,7 +29,7 @@ impl StarknetValidityContractClient { core_contract: StarknetValidityContract::new(address, client.clone()), messaging: StarknetMessaging::new(address, client.clone()), operator: Operator::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupport3_0_2::new(address, client.clone()), governance: StarknetGovernance::new(address, client.clone()), governed_finalizable: GovernedFinalizable::new(address, client.clone()), core_contract_implementation: implementation_address, @@ -49,8 +49,8 @@ impl AsRef> for StarknetValidityC &self.messaging } } -impl AsRef> for StarknetValidityContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarknetValidityContractClient { + fn as_ref(&self) -> &ProxySupport3_0_2 { &self.proxy_support } } diff --git a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs index b141c7d..2fd66e3 100644 --- a/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs +++ b/crates/l2/starknet-eth-bridge-client/src/clients/eth_bridge.rs @@ -4,12 +4,12 @@ use crate::interfaces::eth_bridge::StarknetEthBridge; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport; +use starknet_proxy_client::clients::proxy_3_0_2::ProxySupport3_0_2; /// Client to interact with a Starknet Eth Bridge pub struct StarknetEthBridgeContractClient { eth_bridge: StarknetEthBridge, - proxy_support: ProxySupport, + proxy_support: ProxySupport3_0_2, eth_bridge_implementation: Address, } @@ -21,7 +21,7 @@ impl StarknetEthBridgeContractClient { ) -> Self { Self { eth_bridge: StarknetEthBridge::new(address, client.clone()), - proxy_support: ProxySupport::new(address, client.clone()), + proxy_support: ProxySupport3_0_2::new(address, client.clone()), eth_bridge_implementation: implementation_address, } } @@ -33,8 +33,8 @@ impl AsRef> for StarknetEthBridge } } -impl AsRef> for StarknetEthBridgeContractClient { - fn as_ref(&self) -> &ProxySupport { +impl AsRef> for StarknetEthBridgeContractClient { + fn as_ref(&self) -> &ProxySupport3_0_2 { &self.proxy_support } } diff --git a/crates/l2/starknet-proxy-client/src/clients/mod.rs b/crates/l2/starknet-proxy-client/src/clients/mod.rs index dbc44bb..0466744 100644 --- a/crates/l2/starknet-proxy-client/src/clients/mod.rs +++ b/crates/l2/starknet-proxy-client/src/clients/mod.rs @@ -1,3 +1,2 @@ -pub mod proxy; pub mod proxy_3_0_2; pub mod proxy_5_0_0; diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs index 0362f55..86c5b14 100644 --- a/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_3_0_2.rs @@ -1,4 +1,4 @@ -use crate::clients::proxy::{ProxyInitializeData, ProxySupportTrait}; +use crate::interfaces::proxy::{ProxyInitializeData, ProxySupportTrait}; use async_trait::async_trait; use ethers::addressbook::Address; use ethers::contract::{abigen, ContractError}; @@ -7,7 +7,7 @@ use ethers::prelude::{Bytes, TransactionReceipt}; use utils::errors::Error; abigen!( - ProxySupport, + ProxySupport3_0_2, r#"[ function isFrozen() external view virtual returns (bool) function initialize(bytes calldata data) external notCalledDirectly @@ -22,7 +22,7 @@ abigen!( #[async_trait] impl ProxySupportTrait for T where - T: AsRef> + Send + Sync, + T: AsRef> + Send + Sync, { async fn is_frozen(&self) -> Result> { self.as_ref().is_frozen().call().await.map_err(Into::into) diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs index 65d9eee..384eb24 100644 --- a/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs +++ b/crates/l2/starknet-proxy-client/src/clients/proxy_5_0_0.rs @@ -1,4 +1,4 @@ -use crate::clients::proxy::{ProxyInitializeData, ProxySupportLatestTrait}; +use crate::interfaces::proxy::{ProxyInitializeData, ProxySupportLatestTrait}; use async_trait::async_trait; use ethers::addressbook::Address; use ethers::contract::{abigen, ContractError}; @@ -7,7 +7,7 @@ use ethers::prelude::{Bytes, TransactionReceipt}; use utils::errors::Error; abigen!( - ProxySupportLatest, + ProxySupport5_0_0, r#"[ function isFrozen() external view virtual returns (bool) function initialize(bytes calldata data) external notCalledDirectly @@ -31,7 +31,7 @@ abigen!( #[async_trait] impl ProxySupportLatestTrait for T where - T: AsRef> + Send + Sync, + T: AsRef> + Send + Sync, { async fn is_frozen(&self) -> Result> { self.as_ref().is_frozen().call().await.map_err(Into::into) diff --git a/crates/l2/starknet-proxy-client/src/deploy.rs b/crates/l2/starknet-proxy-client/src/deploy.rs index 3ead66b..3222efa 100644 --- a/crates/l2/starknet-proxy-client/src/deploy.rs +++ b/crates/l2/starknet-proxy-client/src/deploy.rs @@ -57,14 +57,14 @@ pub async fn deploy_contract_behind_proxy( log::debug!("ℹ️ Contract deployed : {:?}", contract.address().clone()); - let type_of_proxy = match proxy_type { + let proxy_code = match proxy_type { ProxyVersion::SafeProxy3_0_2 => SAFE_PROXY_3_0_2, ProxyVersion::SafeProxy5_0_0 => SAFE_PROXY_5_0_0, ProxyVersion::UnsafeProxy => UNSAFE_PROXY, }; let proxy_contract = - deploy_contract(client.clone(), type_of_proxy, Token::Uint(U256::from(0))).await?; + deploy_contract(client.clone(), proxy_code, Token::Uint(U256::from(0))).await?; log::debug!( "ℹ️ Proxy for contract [{:?}] deployed : {:?}", diff --git a/crates/l2/starknet-proxy-client/src/interfaces/mod.rs b/crates/l2/starknet-proxy-client/src/interfaces/mod.rs new file mode 100644 index 0000000..44dcc92 --- /dev/null +++ b/crates/l2/starknet-proxy-client/src/interfaces/mod.rs @@ -0,0 +1 @@ +pub mod proxy; diff --git a/crates/l2/starknet-proxy-client/src/clients/proxy.rs b/crates/l2/starknet-proxy-client/src/interfaces/proxy.rs similarity index 100% rename from crates/l2/starknet-proxy-client/src/clients/proxy.rs rename to crates/l2/starknet-proxy-client/src/interfaces/proxy.rs diff --git a/crates/l2/starknet-proxy-client/src/lib.rs b/crates/l2/starknet-proxy-client/src/lib.rs index 4ecad0d..67a4707 100644 --- a/crates/l2/starknet-proxy-client/src/lib.rs +++ b/crates/l2/starknet-proxy-client/src/lib.rs @@ -1,2 +1,3 @@ pub mod clients; pub mod deploy; +pub mod interfaces; diff --git a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs index 2c033a9..af6e9e0 100644 --- a/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs +++ b/crates/l2/starknet-token-bridge-client/src/clients/token_bridge.rs @@ -4,12 +4,12 @@ use crate::interfaces::token_bridge::StarknetTokenBridge; use utils::{LocalWalletSignerMiddleware, StarknetContractClient}; use ethers::types::Address; -use starknet_proxy_client::clients::proxy_5_0_0::ProxySupportLatest; +use starknet_proxy_client::clients::proxy_5_0_0::ProxySupport5_0_0; /// Client to interact with a Token Bridge (ERC20) pub struct StarknetTokenBridgeContractClient { token_bridge: StarknetTokenBridge, - proxy_support: ProxySupportLatest, + proxy_support: ProxySupport5_0_0, token_bridge_implementation: Address, } @@ -21,7 +21,7 @@ impl StarknetTokenBridgeContractClient { ) -> Self { Self { token_bridge: StarknetTokenBridge::new(address, client.clone()), - proxy_support: ProxySupportLatest::new(address, client.clone()), + proxy_support: ProxySupport5_0_0::new(address, client.clone()), token_bridge_implementation: implementation_address, } } @@ -33,8 +33,8 @@ impl AsRef> for StarknetTokenBr } } -impl AsRef> for StarknetTokenBridgeContractClient { - fn as_ref(&self) -> &ProxySupportLatest { +impl AsRef> for StarknetTokenBridgeContractClient { + fn as_ref(&self) -> &ProxySupport5_0_0 { &self.proxy_support } }