{
  "_format": "hh-sol-artifact-1",
  "contractName": "Withdrawal2Test",
  "sourceName": "contracts/test/withdrawal/Withdrawal2Test.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "blockHash",
          "type": "bytes32"
        }
      ],
      "name": "BlockHashNotExists",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RelayLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenIndex",
          "type": "uint256"
        }
      ],
      "name": "TokenAlreadyExist",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenIndex",
          "type": "uint256"
        }
      ],
      "name": "TokenNotExist",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WithdrawalAggregatorMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WithdrawalChainVerificationFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WithdrawalProofVerificationFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "tokenIndex",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "nullifier",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct WithdrawalLib.Withdrawal",
          "name": "withdrawal",
          "type": "tuple"
        }
      ],
      "name": "ClaimableWithdrawalQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "withdrawalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "tokenIndex",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "nullifier",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct WithdrawalLib.Withdrawal",
          "name": "withdrawal",
          "type": "tuple"
        }
      ],
      "name": "DirectWithdrawalQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "tokenIndices",
          "type": "uint256[]"
        }
      ],
      "name": "DirectWithdrawalTokenIndicesAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "tokenIndices",
          "type": "uint256[]"
        }
      ],
      "name": "DirectWithdrawalTokenIndicesRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "withdrawalVerifier",
          "type": "address"
        }
      ],
      "name": "VerifierUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "RELAY_LIMIT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIndices",
          "type": "uint256[]"
        }
      ],
      "name": "addDirectWithdrawalTokenIndices",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "addOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contribution",
      "outputs": [
        {
          "internalType": "contract IContribution",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDirectWithdrawalTokenIndices",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_scrollMessenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_withdrawalVerifier",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rollup",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_contribution",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_directWithdrawalTokenIndices",
          "type": "uint256[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ScrollMessenger",
      "outputs": [
        {
          "internalType": "contract IL2ScrollMessenger",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidity",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "nullifiers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIndices",
          "type": "uint256[]"
        }
      ],
      "name": "removeDirectWithdrawalTokenIndices",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rollup",
      "outputs": [
        {
          "internalType": "contract IRollup",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "tokenIndex",
              "type": "uint32"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "nullifier",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "blockHash",
              "type": "bytes32"
            },
            {
              "internalType": "uint32",
              "name": "blockNumber",
              "type": "uint32"
            }
          ],
          "internalType": "struct ChainedWithdrawalLib.ChainedWithdrawal[]",
          "name": "withdrawals",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "lastWithdrawalHash",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "withdrawalAggregator",
              "type": "address"
            }
          ],
          "internalType": "struct WithdrawalProofPublicInputsLib.WithdrawalProofPublicInputs",
          "name": "publicInputs",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "submitWithdrawalProof",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_withdrawalVerifier",
          "type": "address"
        }
      ],
      "name": "updateVerifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawalVerifier",
      "outputs": [
        {
          "internalType": "contract IPlonkVerifier",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516121e86100fd60003960008181610dde01528181610e070152610f4d01526121e86000f3fe60806040526004361061012a5760003560e01c8063871c5fe7116100ab578063a93e83a61161006f578063a93e83a61461034d578063ad3cb1cc1461036d578063c0e70bbd146103ab578063cb23bcb5146103cb578063e1cb0e52146103eb578063f2fde38b146103ff57600080fd5b8063871c5fe71461028e5780638da5cb5b146102ae57806397fc007c146102eb5780639a0002a91461030b578063a7178c371461032b57600080fd5b806352d1902d116100f257806352d1902d1461020157806354adcb99146102245780637065cb4814610239578063715018a61461025957806377e88d2c1461026e57600080fd5b80631a6865021461012f5780632997e86b1461016c57806337f9fe26146101ac5780634f1ef286146101cc57806350520b1f146101e1575b600080fd5b34801561013b57600080fd5b5060035461014f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561017857600080fd5b5061019c610187366004611956565b60056020526000908152604090205460ff1681565b6040519015158152602001610163565b3480156101b857600080fd5b5060005461014f906001600160a01b031681565b6101df6101da3660046119d1565b61041f565b005b3480156101ed57600080fd5b5060045461014f906001600160a01b031681565b34801561020d57600080fd5b5061021661043e565b604051908152602001610163565b34801561023057600080fd5b50610216606481565b34801561024557600080fd5b506101df610254366004611a7a565b61045b565b34801561026557600080fd5b506101df610467565b34801561027a57600080fd5b506101df610289366004611a95565b61047b565b34801561029a57600080fd5b506101df6102a9366004611baa565b610679565b3480156102ba57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661014f565b3480156102f757600080fd5b506101df610306366004611a7a565b6106bd565b34801561031757600080fd5b506101df610326366004611baa565b610734565b34801561033757600080fd5b50610340610801565b6040516101639190611c5b565b34801561035957600080fd5b506101df610368366004611cce565b610812565b34801561037957600080fd5b5061039e604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101639190611dd6565b3480156103b757600080fd5b5060015461014f906001600160a01b031681565b3480156103d757600080fd5b5060025461014f906001600160a01b031681565b3480156103f757600080fd5b506003610216565b34801561040b57600080fd5b506101df61041a366004611a7a565b610da1565b610427610dd3565b61043082610e78565b61043a8282610e80565b5050565b6000610448610f42565b5060008051602061219383398151915290565b61046481610f8b565b50565b61046f610ffc565b6104796000610f8b565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156104c05750825b90506000826001600160401b031660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b038c16158061054f57506001600160a01b038b16155b8061056157506001600160a01b038a16155b8061057357506001600160a01b038916155b8061058557506001600160a01b038816155b8061059757506001600160a01b038716155b156105b557604051639fabe1c160e01b815260040160405180910390fd5b6105be8c611057565b6105c6611068565b600180546001600160a01b03199081166001600160a01b038e8116919091179092556000805482168d84161790556002805482168b84161790556004805482168a841617905560038054909116918b1691909117905561062586611070565b831561066b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610681610ffc565b61043a82828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061107092505050565b6106c5610ffc565b6001600160a01b0381166106ec57604051639fabe1c160e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917fd24015cc99cc1700cafca3042840a1d8ac1e3964fd2e0e37ea29c654056ee32791a250565b61073c610ffc565b60005b818110156107c357600061077584848481811061075e5761075e611de9565b90506020020135600661112c90919063ffffffff16565b9050806107ba5783838381811061078e5761078e611de9565b90506020020135604051632a2c67cd60e01b81526004016107b191815260200190565b60405180910390fd5b5060010161073f565b507f0e5fb72f67c09578724f25132b948e5fb901741fa3240f11804518dc94799a2b82826040516107f5929190611dff565b60405180910390a15050565b606061080d6006611141565b905090565b61081f8585858585611155565b60008080866001600160401b0381111561083b5761083b61198b565b604051908082528060200260200182016040528015610864578160200160208202803683370190505b50905060005b878110156109e457600089898381811061088657610886611de9565b905060c0020180360381019061089c9190611e4c565b606081015160009081526005602052604090205490915060ff16156108e55760018383815181106108cf576108cf611de9565b91151560209283029190910190910152506109dc565b6060810151600090815260056020526040808220805460ff1916600117905560025460a0840151915163d2b210a160e01b815263ffffffff90921660048301526001600160a01b03169063d2b210a190602401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190611edf565b9050816080015181146109a7578160800151604051630631b89b60e41b81526004016107b191815260200190565b6109b482602001516112c1565b156109cb57856109c381611f0e565b9650506109d9565b846109d581611f0e565b9550505b50505b60010161086a565b50821580156109f1575081155b156109fe57505050610d9a565b6064610a0a8385611f27565b1115610a2957604051635a8a34e560e01b815260040160405180910390fd5b6000836001600160401b03811115610a4357610a4361198b565b604051908082528060200260200182016040528015610a9557816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610a615790505b5090506000836001600160401b03811115610ab257610ab261198b565b604051908082528060200260200182016040528015610adb578160200160208202803683370190505b50905060008060005b8b811015610c9357858181518110610afe57610afe611de9565b6020026020010151610c8b5760008d8d83818110610b1e57610b1e611de9565b905060c00201803603810190610b349190611e4c565b90506000604051806080016040528083600001516001600160a01b03168152602001836020015163ffffffff1681526020018360400151815260200183606001518152509050610b8782602001516112c1565b15610c075780878681518110610b9f57610b9f611de9565b602090810291909101015280516001600160a01b0316610bbe826112d7565b7fdbe674c66915823ad8cb90cac7eb482e951adec0311c9cf091da19de527ee93583604051610bed9190611f3a565b60405180910390a384610bff81611f0e565b955050610c88565b6000610c12826112d7565b905080878681518110610c2757610c27611de9565b60200260200101818152505081600001516001600160a01b0316817f740137a4fd93de42bb435842325e4fad55ea4ba617db0b44125377b94b43249d84604051610c719190611f3a565b60405180910390a384610c8381611f0e565b955050505b50505b600101610ae4565b506000639d6a54cb60e01b8585604051602401610cb1929190611f74565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050610cee8161134f565b6004546001600160a01b031663f099f9f57f738128fe393bef1bcd8a524796fff40618b938cd467c71fcf37850ab0ba4f7d733610d2b8b8d611f27565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b5050505050505050505050505b5050505050565b610da9610ffc565b6001600160a01b03811661045b57604051631e4fbdf760e01b8152600060048201526024016107b1565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e5a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e4e600080516020612193833981519152546001600160a01b031690565b6001600160a01b031614155b156104795760405163703e46dd60e11b815260040160405180910390fd5b610464610ffc565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610eda575060408051601f3d908101601f19168201909252610ed791810190611edf565b60015b610f0257604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107b1565b6000805160206121938339815191528114610f3357604051632a87526960e21b8152600481018290526024016107b1565b610f3d83836113cb565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104795760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b3361102e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104795760405163118cdaa760e01b81523360048201526024016107b1565b61105f611421565b6104648161146a565b610479611421565b60005b81518110156110f15760006110ab83838151811061109357611093611de9565b6020026020010151600661147290919063ffffffff16565b9050806110e8578282815181106110c4576110c4611de9565b6020026020010151604051631a3aa67b60e31b81526004016107b191815260200190565b50600101611073565b507f03e4a91d34a2a2419d5513d9814cf5ea9e317e6166670b4b89a97e478541d4b9816040516111219190611c5b565b60405180910390a150565b6000611138838361147e565b90505b92915050565b6060600061114e83611571565b9392505050565b6111be83600001358686808060200260200160405190810160405280939291908181526020016000905b828210156111ab5761119c60c08302860136819003810190611e4c565b8152602001906001019061117f565b50505050506115cd90919063ffffffff16565b6111db5760405163fbf63aef60e01b815260040160405180910390fd5b336111ec6040850160208601611a7a565b6001600160a01b03161461121357604051635f4736cb60e11b815260040160405180910390fd5b6000546001600160a01b0316637e4f7a8a838361124561124061123b368a90038a018a61202e565b61162a565b61165d565b6040518463ffffffff1660e01b815260040161126393929190612083565b602060405180830381865afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906120cb565b610d9a57604051630e28fbf160e21b815260040160405180910390fd5b600061113b600663ffffffff808516906116d516565b60008160000151826020015183604001518460600151604051602001611332949392919060609490941b6001600160601b031916845260e09290921b6001600160e01b03191660148401526018830152603882015260580190565b604051602081830303815290604052805190602001209050919050565b600154600354604051635f7b157760e01b8152600092600019926001600160a01b0391821692635f7b15779286926113949291169083908990889033906004016120ed565b6000604051808303818588803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b5050505050505050565b6113d4826116ed565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561141957610f3d8282611752565b61043a6117c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661047957604051631afcd79f60e31b815260040160405180910390fd5b610da9611421565b600061113883836117e7565b600081815260018301602052604081205480156115675760006114a2600183612136565b85549091506000906114b690600190612136565b905080821461151b5760008660000182815481106114d6576114d6611de9565b90600052602060002001549050808760000184815481106114f9576114f9611de9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061152c5761152c612149565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061113b565b600091505061113b565b6060816000018054806020026020016040519081016040528092919081815260200182805480156115c157602002820191906000526020600020905b8154815260200190600101908083116115ad575b50505050509050919050565b600080805b845181101561160e5760008582815181106115ef576115ef611de9565b602002602001015190506116038184611836565b9250506001016115d2565b5082811461162057600091505061113b565b5060019392505050565b60008160000151826020015160405160200161133292919091825260601b6001600160601b031916602082015260340190565b604080516008808252610120820190925260609160009190602082016101008036833701905050905060005b60088110156116ce5761169d81602061215f565b84901b60e01c63ffffffff168282815181106116bb576116bb611de9565b6020908102919091010152600101611689565b5092915050565b60008181526001830160205260408120541515611138565b806001600160a01b03163b60000361172357604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107b1565b60008051602061219383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161176f9190612176565b600060405180830381855af49150503d80600081146117aa576040519150601f19603f3d011682016040523d82523d6000602084013e6117af565b606091505b50915091506117bf8583836118d8565b95945050505050565b34156104795760405163b398979f60e01b815260040160405180910390fd5b600081815260018301602052604081205461182e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561113b565b50600061113b565b600081836000015184602001518560400151866060015187608001518860a001516040516020016118ba979695949392919096875260609590951b6001600160601b031916602087015260e093841b6001600160e01b0319908116603488015260388701939093526058860191909152607885015291901b166098820152609c0190565b60405160208183030381529060405280519060200120905092915050565b6060826118ed576118e88261192d565b61114e565b815115801561190457506001600160a01b0384163b155b156116ce57604051639996b31560e01b81526001600160a01b03851660048201526024016107b1565b80511561193d5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60006020828403121561196857600080fd5b5035919050565b80356001600160a01b038116811461198657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156119c9576119c961198b565b604052919050565b600080604083850312156119e457600080fd5b6119ed8361196f565b915060208301356001600160401b03811115611a0857600080fd5b8301601f81018513611a1957600080fd5b80356001600160401b03811115611a3257611a3261198b565b611a45601f8201601f19166020016119a1565b818152866020838501011115611a5a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215611a8c57600080fd5b6111388261196f565b600080600080600080600060e0888a031215611ab057600080fd5b611ab98861196f565b9650611ac76020890161196f565b9550611ad56040890161196f565b9450611ae36060890161196f565b9350611af16080890161196f565b9250611aff60a0890161196f565b915060c08801356001600160401b03811115611b1a57600080fd5b8801601f81018a13611b2b57600080fd5b80356001600160401b03811115611b4457611b4461198b565b8060051b611b54602082016119a1565b9182526020818401810192908101908d841115611b7057600080fd5b6020850194505b83851015611b9657843580835260209586019590935090910190611b77565b809550505050505092959891949750929550565b60008060208385031215611bbd57600080fd5b82356001600160401b03811115611bd357600080fd5b8301601f81018513611be457600080fd5b80356001600160401b03811115611bfa57600080fd5b8560208260051b8401011115611c0f57600080fd5b6020919091019590945092505050565b600081518084526020840193506020830160005b82811015611c51578151865260209586019590910190600101611c33565b5093949350505050565b6020815260006111386020830184611c1f565b600060408284031215611c8057600080fd5b50919050565b60008083601f840112611c9857600080fd5b5081356001600160401b03811115611caf57600080fd5b602083019150836020828501011115611cc757600080fd5b9250929050565b600080600080600060808688031215611ce657600080fd5b85356001600160401b03811115611cfc57600080fd5b8601601f81018813611d0d57600080fd5b80356001600160401b03811115611d2357600080fd5b88602060c083028401011115611d3857600080fd5b602091820196509450611d4e9088908801611c6e565b925060608601356001600160401b03811115611d6957600080fd5b611d7588828901611c86565b969995985093965092949392505050565b60005b83811015611da1578181015183820152602001611d89565b50506000910152565b60008151808452611dc2816020860160208601611d86565b601f01601f19169290920160200192915050565b6020815260006111386020830184611daa565b634e487b7160e01b600052603260045260246000fd5b6020808252810182905260006001600160fb1b03831115611e1f57600080fd5b8260051b80856040850137919091016040019392505050565b803563ffffffff8116811461198657600080fd5b600060c0828403128015611e5f57600080fd5b5060405160009060c081016001600160401b0381118282101715611e8557611e8561198b565b604052611e918461196f565b8152611e9f60208501611e38565b602082015260408481013590820152606080850135908201526080808501359082018190529150611ed260a08501611e38565b60a0820152949350505050565b600060208284031215611ef157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611f2057611f20611ef8565b5060010190565b8082018082111561113b5761113b611ef8565b81516001600160a01b0316815260208083015163ffffffff169082015260408083015190820152606080830151908201526080810161113b565b6040808252835190820181905260009060208501906060840190835b81811015611fe657611fd083855180516001600160a01b0316825260208082015163ffffffff169083015260408082015190830152606090810151910152565b6020939093019260809290920191600101611f90565b50508381036020808601919091528551808352918101925085019060005b81811015612022578251845260209384019390920191600101612004565b50919695505050505050565b6000604082840312801561204157600080fd5b50604080519081016001600160401b03811182821017156120645761206461198b565b604052823581526120776020840161196f565b60208201529392505050565b60408152826040820152828460608301376000606084830101526000601f19601f850116820160608382030160208401526120c16060820185611c1f565b9695505050505050565b6000602082840312156120dd57600080fd5b8151801515811461114e57600080fd5b60018060a01b038616815284602082015260a06040820152600061211460a0830186611daa565b6060830194909452506001600160a01b03919091166080909101529392505050565b8181038181111561113b5761113b611ef8565b634e487b7160e01b600052603160045260246000fd5b808202811582820484141761113b5761113b611ef8565b60008251612188818460208701611d86565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220be0cf053dda706186df02c9da9876f1aff53c89f24e6b834eb244230cdc6be1a64736f6c634300081b0033",
  "deployedBytecode": "0x60806040526004361061012a5760003560e01c8063871c5fe7116100ab578063a93e83a61161006f578063a93e83a61461034d578063ad3cb1cc1461036d578063c0e70bbd146103ab578063cb23bcb5146103cb578063e1cb0e52146103eb578063f2fde38b146103ff57600080fd5b8063871c5fe71461028e5780638da5cb5b146102ae57806397fc007c146102eb5780639a0002a91461030b578063a7178c371461032b57600080fd5b806352d1902d116100f257806352d1902d1461020157806354adcb99146102245780637065cb4814610239578063715018a61461025957806377e88d2c1461026e57600080fd5b80631a6865021461012f5780632997e86b1461016c57806337f9fe26146101ac5780634f1ef286146101cc57806350520b1f146101e1575b600080fd5b34801561013b57600080fd5b5060035461014f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561017857600080fd5b5061019c610187366004611956565b60056020526000908152604090205460ff1681565b6040519015158152602001610163565b3480156101b857600080fd5b5060005461014f906001600160a01b031681565b6101df6101da3660046119d1565b61041f565b005b3480156101ed57600080fd5b5060045461014f906001600160a01b031681565b34801561020d57600080fd5b5061021661043e565b604051908152602001610163565b34801561023057600080fd5b50610216606481565b34801561024557600080fd5b506101df610254366004611a7a565b61045b565b34801561026557600080fd5b506101df610467565b34801561027a57600080fd5b506101df610289366004611a95565b61047b565b34801561029a57600080fd5b506101df6102a9366004611baa565b610679565b3480156102ba57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661014f565b3480156102f757600080fd5b506101df610306366004611a7a565b6106bd565b34801561031757600080fd5b506101df610326366004611baa565b610734565b34801561033757600080fd5b50610340610801565b6040516101639190611c5b565b34801561035957600080fd5b506101df610368366004611cce565b610812565b34801561037957600080fd5b5061039e604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101639190611dd6565b3480156103b757600080fd5b5060015461014f906001600160a01b031681565b3480156103d757600080fd5b5060025461014f906001600160a01b031681565b3480156103f757600080fd5b506003610216565b34801561040b57600080fd5b506101df61041a366004611a7a565b610da1565b610427610dd3565b61043082610e78565b61043a8282610e80565b5050565b6000610448610f42565b5060008051602061219383398151915290565b61046481610f8b565b50565b61046f610ffc565b6104796000610f8b565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156104c05750825b90506000826001600160401b031660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b038c16158061054f57506001600160a01b038b16155b8061056157506001600160a01b038a16155b8061057357506001600160a01b038916155b8061058557506001600160a01b038816155b8061059757506001600160a01b038716155b156105b557604051639fabe1c160e01b815260040160405180910390fd5b6105be8c611057565b6105c6611068565b600180546001600160a01b03199081166001600160a01b038e8116919091179092556000805482168d84161790556002805482168b84161790556004805482168a841617905560038054909116918b1691909117905561062586611070565b831561066b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610681610ffc565b61043a82828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061107092505050565b6106c5610ffc565b6001600160a01b0381166106ec57604051639fabe1c160e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917fd24015cc99cc1700cafca3042840a1d8ac1e3964fd2e0e37ea29c654056ee32791a250565b61073c610ffc565b60005b818110156107c357600061077584848481811061075e5761075e611de9565b90506020020135600661112c90919063ffffffff16565b9050806107ba5783838381811061078e5761078e611de9565b90506020020135604051632a2c67cd60e01b81526004016107b191815260200190565b60405180910390fd5b5060010161073f565b507f0e5fb72f67c09578724f25132b948e5fb901741fa3240f11804518dc94799a2b82826040516107f5929190611dff565b60405180910390a15050565b606061080d6006611141565b905090565b61081f8585858585611155565b60008080866001600160401b0381111561083b5761083b61198b565b604051908082528060200260200182016040528015610864578160200160208202803683370190505b50905060005b878110156109e457600089898381811061088657610886611de9565b905060c0020180360381019061089c9190611e4c565b606081015160009081526005602052604090205490915060ff16156108e55760018383815181106108cf576108cf611de9565b91151560209283029190910190910152506109dc565b6060810151600090815260056020526040808220805460ff1916600117905560025460a0840151915163d2b210a160e01b815263ffffffff90921660048301526001600160a01b03169063d2b210a190602401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190611edf565b9050816080015181146109a7578160800151604051630631b89b60e41b81526004016107b191815260200190565b6109b482602001516112c1565b156109cb57856109c381611f0e565b9650506109d9565b846109d581611f0e565b9550505b50505b60010161086a565b50821580156109f1575081155b156109fe57505050610d9a565b6064610a0a8385611f27565b1115610a2957604051635a8a34e560e01b815260040160405180910390fd5b6000836001600160401b03811115610a4357610a4361198b565b604051908082528060200260200182016040528015610a9557816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610a615790505b5090506000836001600160401b03811115610ab257610ab261198b565b604051908082528060200260200182016040528015610adb578160200160208202803683370190505b50905060008060005b8b811015610c9357858181518110610afe57610afe611de9565b6020026020010151610c8b5760008d8d83818110610b1e57610b1e611de9565b905060c00201803603810190610b349190611e4c565b90506000604051806080016040528083600001516001600160a01b03168152602001836020015163ffffffff1681526020018360400151815260200183606001518152509050610b8782602001516112c1565b15610c075780878681518110610b9f57610b9f611de9565b602090810291909101015280516001600160a01b0316610bbe826112d7565b7fdbe674c66915823ad8cb90cac7eb482e951adec0311c9cf091da19de527ee93583604051610bed9190611f3a565b60405180910390a384610bff81611f0e565b955050610c88565b6000610c12826112d7565b905080878681518110610c2757610c27611de9565b60200260200101818152505081600001516001600160a01b0316817f740137a4fd93de42bb435842325e4fad55ea4ba617db0b44125377b94b43249d84604051610c719190611f3a565b60405180910390a384610c8381611f0e565b955050505b50505b600101610ae4565b506000639d6a54cb60e01b8585604051602401610cb1929190611f74565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050610cee8161134f565b6004546001600160a01b031663f099f9f57f738128fe393bef1bcd8a524796fff40618b938cd467c71fcf37850ab0ba4f7d733610d2b8b8d611f27565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b5050505050505050505050505b5050505050565b610da9610ffc565b6001600160a01b03811661045b57604051631e4fbdf760e01b8152600060048201526024016107b1565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e5a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e4e600080516020612193833981519152546001600160a01b031690565b6001600160a01b031614155b156104795760405163703e46dd60e11b815260040160405180910390fd5b610464610ffc565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610eda575060408051601f3d908101601f19168201909252610ed791810190611edf565b60015b610f0257604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107b1565b6000805160206121938339815191528114610f3357604051632a87526960e21b8152600481018290526024016107b1565b610f3d83836113cb565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104795760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b3361102e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146104795760405163118cdaa760e01b81523360048201526024016107b1565b61105f611421565b6104648161146a565b610479611421565b60005b81518110156110f15760006110ab83838151811061109357611093611de9565b6020026020010151600661147290919063ffffffff16565b9050806110e8578282815181106110c4576110c4611de9565b6020026020010151604051631a3aa67b60e31b81526004016107b191815260200190565b50600101611073565b507f03e4a91d34a2a2419d5513d9814cf5ea9e317e6166670b4b89a97e478541d4b9816040516111219190611c5b565b60405180910390a150565b6000611138838361147e565b90505b92915050565b6060600061114e83611571565b9392505050565b6111be83600001358686808060200260200160405190810160405280939291908181526020016000905b828210156111ab5761119c60c08302860136819003810190611e4c565b8152602001906001019061117f565b50505050506115cd90919063ffffffff16565b6111db5760405163fbf63aef60e01b815260040160405180910390fd5b336111ec6040850160208601611a7a565b6001600160a01b03161461121357604051635f4736cb60e11b815260040160405180910390fd5b6000546001600160a01b0316637e4f7a8a838361124561124061123b368a90038a018a61202e565b61162a565b61165d565b6040518463ffffffff1660e01b815260040161126393929190612083565b602060405180830381865afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906120cb565b610d9a57604051630e28fbf160e21b815260040160405180910390fd5b600061113b600663ffffffff808516906116d516565b60008160000151826020015183604001518460600151604051602001611332949392919060609490941b6001600160601b031916845260e09290921b6001600160e01b03191660148401526018830152603882015260580190565b604051602081830303815290604052805190602001209050919050565b600154600354604051635f7b157760e01b8152600092600019926001600160a01b0391821692635f7b15779286926113949291169083908990889033906004016120ed565b6000604051808303818588803b1580156113ad57600080fd5b505af11580156113c1573d6000803e3d6000fd5b5050505050505050565b6113d4826116ed565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561141957610f3d8282611752565b61043a6117c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661047957604051631afcd79f60e31b815260040160405180910390fd5b610da9611421565b600061113883836117e7565b600081815260018301602052604081205480156115675760006114a2600183612136565b85549091506000906114b690600190612136565b905080821461151b5760008660000182815481106114d6576114d6611de9565b90600052602060002001549050808760000184815481106114f9576114f9611de9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061152c5761152c612149565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061113b565b600091505061113b565b6060816000018054806020026020016040519081016040528092919081815260200182805480156115c157602002820191906000526020600020905b8154815260200190600101908083116115ad575b50505050509050919050565b600080805b845181101561160e5760008582815181106115ef576115ef611de9565b602002602001015190506116038184611836565b9250506001016115d2565b5082811461162057600091505061113b565b5060019392505050565b60008160000151826020015160405160200161133292919091825260601b6001600160601b031916602082015260340190565b604080516008808252610120820190925260609160009190602082016101008036833701905050905060005b60088110156116ce5761169d81602061215f565b84901b60e01c63ffffffff168282815181106116bb576116bb611de9565b6020908102919091010152600101611689565b5092915050565b60008181526001830160205260408120541515611138565b806001600160a01b03163b60000361172357604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107b1565b60008051602061219383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161176f9190612176565b600060405180830381855af49150503d80600081146117aa576040519150601f19603f3d011682016040523d82523d6000602084013e6117af565b606091505b50915091506117bf8583836118d8565b95945050505050565b34156104795760405163b398979f60e01b815260040160405180910390fd5b600081815260018301602052604081205461182e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561113b565b50600061113b565b600081836000015184602001518560400151866060015187608001518860a001516040516020016118ba979695949392919096875260609590951b6001600160601b031916602087015260e093841b6001600160e01b0319908116603488015260388701939093526058860191909152607885015291901b166098820152609c0190565b60405160208183030381529060405280519060200120905092915050565b6060826118ed576118e88261192d565b61114e565b815115801561190457506001600160a01b0384163b155b156116ce57604051639996b31560e01b81526001600160a01b03851660048201526024016107b1565b80511561193d5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60006020828403121561196857600080fd5b5035919050565b80356001600160a01b038116811461198657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156119c9576119c961198b565b604052919050565b600080604083850312156119e457600080fd5b6119ed8361196f565b915060208301356001600160401b03811115611a0857600080fd5b8301601f81018513611a1957600080fd5b80356001600160401b03811115611a3257611a3261198b565b611a45601f8201601f19166020016119a1565b818152866020838501011115611a5a57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215611a8c57600080fd5b6111388261196f565b600080600080600080600060e0888a031215611ab057600080fd5b611ab98861196f565b9650611ac76020890161196f565b9550611ad56040890161196f565b9450611ae36060890161196f565b9350611af16080890161196f565b9250611aff60a0890161196f565b915060c08801356001600160401b03811115611b1a57600080fd5b8801601f81018a13611b2b57600080fd5b80356001600160401b03811115611b4457611b4461198b565b8060051b611b54602082016119a1565b9182526020818401810192908101908d841115611b7057600080fd5b6020850194505b83851015611b9657843580835260209586019590935090910190611b77565b809550505050505092959891949750929550565b60008060208385031215611bbd57600080fd5b82356001600160401b03811115611bd357600080fd5b8301601f81018513611be457600080fd5b80356001600160401b03811115611bfa57600080fd5b8560208260051b8401011115611c0f57600080fd5b6020919091019590945092505050565b600081518084526020840193506020830160005b82811015611c51578151865260209586019590910190600101611c33565b5093949350505050565b6020815260006111386020830184611c1f565b600060408284031215611c8057600080fd5b50919050565b60008083601f840112611c9857600080fd5b5081356001600160401b03811115611caf57600080fd5b602083019150836020828501011115611cc757600080fd5b9250929050565b600080600080600060808688031215611ce657600080fd5b85356001600160401b03811115611cfc57600080fd5b8601601f81018813611d0d57600080fd5b80356001600160401b03811115611d2357600080fd5b88602060c083028401011115611d3857600080fd5b602091820196509450611d4e9088908801611c6e565b925060608601356001600160401b03811115611d6957600080fd5b611d7588828901611c86565b969995985093965092949392505050565b60005b83811015611da1578181015183820152602001611d89565b50506000910152565b60008151808452611dc2816020860160208601611d86565b601f01601f19169290920160200192915050565b6020815260006111386020830184611daa565b634e487b7160e01b600052603260045260246000fd5b6020808252810182905260006001600160fb1b03831115611e1f57600080fd5b8260051b80856040850137919091016040019392505050565b803563ffffffff8116811461198657600080fd5b600060c0828403128015611e5f57600080fd5b5060405160009060c081016001600160401b0381118282101715611e8557611e8561198b565b604052611e918461196f565b8152611e9f60208501611e38565b602082015260408481013590820152606080850135908201526080808501359082018190529150611ed260a08501611e38565b60a0820152949350505050565b600060208284031215611ef157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611f2057611f20611ef8565b5060010190565b8082018082111561113b5761113b611ef8565b81516001600160a01b0316815260208083015163ffffffff169082015260408083015190820152606080830151908201526080810161113b565b6040808252835190820181905260009060208501906060840190835b81811015611fe657611fd083855180516001600160a01b0316825260208082015163ffffffff169083015260408082015190830152606090810151910152565b6020939093019260809290920191600101611f90565b50508381036020808601919091528551808352918101925085019060005b81811015612022578251845260209384019390920191600101612004565b50919695505050505050565b6000604082840312801561204157600080fd5b50604080519081016001600160401b03811182821017156120645761206461198b565b604052823581526120776020840161196f565b60208201529392505050565b60408152826040820152828460608301376000606084830101526000601f19601f850116820160608382030160208401526120c16060820185611c1f565b9695505050505050565b6000602082840312156120dd57600080fd5b8151801515811461114e57600080fd5b60018060a01b038616815284602082015260a06040820152600061211460a0830186611daa565b6060830194909452506001600160a01b03919091166080909101529392505050565b8181038181111561113b5761113b611ef8565b634e487b7160e01b600052603160045260246000fd5b808202811582820484141761113b5761113b611ef8565b60008251612188818460208701611d86565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220be0cf053dda706186df02c9da9876f1aff53c89f24e6b834eb244230cdc6be1a64736f6c634300081b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
