{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_accountant",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "uint64",
          "name": "originAndNonce",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidityProvider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "toDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "toId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "toHook",
          "type": "bool"
        }
      ],
      "name": "Send",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DUST_AMOUNT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accountant",
      "outputs": [
        {
          "internalType": "contract IEventAccountant",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approveAffectedAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_custom",
          "type": "address"
        }
      ],
      "name": "enrollCustom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "tokenId",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "action",
          "type": "bytes"
        }
      ],
      "name": "exposed_handleTransferToHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "giveLocal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "liquidityProvider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oldRepr",
          "type": "address"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipient",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_remoteHook",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "sendToHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "dest",
          "type": "uint32"
        },
        {
          "internalType": "bytes29",
          "name": "tokenId",
          "type": "bytes29"
        },
        {
          "internalType": "bytes29",
          "name": "action",
          "type": "bytes29"
        }
      ],
      "name": "sendTransferMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "takeTokens",
      "outputs": [
        {
          "internalType": "bytes29",
          "name": "_tokenId",
          "type": "bytes29"
        },
        {
          "internalType": "bytes32",
          "name": "_detailsHash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenRegistry",
      "outputs": [
        {
          "internalType": "contract ITokenRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051620052dd380380620052dd8339818101604052602081101561003557600080fd5b5051606081901b6001600160601b0319166080526001600160a01b031661525a6200008360003980610d035280610e815280610f5f52806111555280611ec35280611f7b525061525a6000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "861:1169:54:-:0;;;999:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;999:69:54;-1:-1:-1;19942:42:34;;;;;;;-1:-1:-1;861:1169:54;-1:-1:-1;861:1169:54;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "861:1169:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1439:161:54;;;;;;;;;;;;;;;;;;:::i;:::-;;7988:409:34;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7988:409:34;;;;;;;;;;;;;;;;:::i;504:50:80:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1353:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1353:191:80;;;;:::i;20104:692:34:-;;;;;;;;;;;;;:::i;3631:245::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3631:245:34;;;;;;;;;;;:::i;19812:44::-;;;;;;;;;;;;;:::i;1838:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1838:52:34;;:::i;19469:84::-;;;;;;;;;;;;;:::i;456:41:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:41:79;;;;:::i;:::-;;;;;;;;;;;;;;;;1259:174:54;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1259:174:54;;;;;;;;;;;;;;;;;;:::i;1335:85:7:-;;;;;;;;;;;;;:::i;1474:48:34:-;;;;;;;;;;;;;:::i;1638:35::-;;;;;;;;;;;;;:::i;5240:977::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5240:977:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4201:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4201:734:34;;-1:-1:-1;4201:734:34;;-1:-1:-1;;;;;4201:734:34:i;1242:214:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1242:214:79;;;;;;;;;:::i;6584:987:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6584:987:34;;-1:-1:-1;6584:987:34;-1:-1:-1;6584:987:34;:::i;8830:452::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8830:452:34;;;;:::i;1606:422:54:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1606:422:54;;;;;;;;-1:-1:-1;1606:422:54;;-1:-1:-1;;1606:422:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1606:422:54;;-1:-1:-1;1606:422:54;;-1:-1:-1;;;;;1606:422:54:i;1074:179::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1074:179:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2261:240:7;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;171:33:68:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1439:161:54;1557:36;1568:5;1575:6;1583:9;1557:10;:36::i;:::-;1439:161;;;:::o;7988:409:34:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8233:44:34::1;::::0;;;;;8268:4:::1;8233:44;::::0;::::1;::::0;8275:1:::1;8233:44:::0;;;;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:44;;;;;-1:-1:-1;;8233:44:34;;;;;;;-1:-1:-1;8233:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8287:44:34::1;::::0;;;;;8322:4:::1;8287:44;::::0;::::1;::::0;8329:1:::1;8287:44:::0;;;;;;:26:::1;::::0;::::1;::::0;-1:-1:-1;8287:26:34::1;::::0;-1:-1:-1;8287:44:34;;;;;-1:-1:-1;;8287:44:34;;;;;;;-1:-1:-1;8287:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8341:13:34::1;::::0;:49:::1;::::0;;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;;;;:13:::1;:49:::0;;::::1;::::0;;;;;;:13;;;::::1;::::0;-1:-1:-1;8341:26:34::1;::::0;-1:-1:-1;8341:49:34;;;;;:13:::1;::::0;:49;;;;;;;:13;;:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7988:409:::0;;;:::o;504:50:80:-;;;;;;:::o;1353:191::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:21:80::1;:69:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1353:191::o;20104:692:34:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20166:34:34::1;20203:10;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20203:27:34;-1:-1:-1;20245:9:34::1;20240:550;20264:2;20260:1;:6;20240:550;;;20287:13;20310:7;20318:1;20310:10;;;;;;;;;;;20287:34;;20335:16;20354:6;:16;;;20379:4;20354:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20354:31:34;;-1:-1:-1;20403:12:34;;20399:381:::1;;20664:6;:14;;;20687:10;20700:1;20664:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20720:45:34::1;::::0;;;;;:14:::1;20743:10;20720:45:::0;::::1;;::::0;::::1;::::0;;;;;;;;;:14;;::::1;::::0;::::1;::::0;:45;;;;;20664:38:::1;::::0;20720:45;;;;;;;;-1:-1:-1;20720:14:34;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20399:381:34::1;-1:-1:-1::0;;20268:3:34::1;;20240:550;;;;1617:1:7;20104:692:34:o:0;3631:245::-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;3756:13:34::1;:46:::0;;;::::1;;::::0;::::1;;::::0;;3812:57:::1;3846:22:::0;3812:33:::1;:57::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;3631:245:34;;;:::o;19812:44::-;;;:::o;1838:52::-;;;;;;;;;;;;;;;:::o;19469:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:84:34:o;456:41:79:-;;;;;;;;;;;;;:::o;1259:174:54:-;1383:43;1404:4;1410:7;1419:6;1383:20;:43::i;1335:85:7:-;1407:6;;;;1335:85;:::o;1474:48:34:-;1512:10;1474:48;:::o;1638:35::-;;;;;;:::o;5240:977::-;5513:24;5505:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5599:16;5617:20;5641:28;5653:6;5661:7;5641:11;:28::i;:::-;5598:71;;;;5716:17;:8;:15;;;;:17::i;:::-;5700:33;;:12;:33;;;5679:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:15;5848:109;5890:10;5914:7;5935:12;5848:28;:109::i;:::-;5830:127;;6026:53;6047:12;6061:8;6071:7;6026:20;:53::i;:::-;6144:66;;;;;;;;;;;;6204:5;6144:66;;;;;;;;;;6157:10;;6144:66;;;;;;;;;;;;;;5240:977;;;;;;;;:::o;4201:734::-;786:22:80;797:10;786;:22::i;:::-;778:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4373:7:34::1;4382;885:33:79;901:7;910;885:15;:33::i;:::-;877:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4450:12:34::2;4465:31;:15;:8:::0;4450:12;4465::::2;:15::i;:::-;:29:::0;::::2;;:31::i;:::-;4450:46:::0;-1:-1:-1;4506:16:34::2;4525:14;:12:::0;;::::2;;:14::i;:::-;4506:33:::0;-1:-1:-1;4549:15:34::2;4567:13;:11:::0;;::::2;;:13::i;:::-;4549:31:::0;-1:-1:-1;4649:20:34::2;:18:::0;;::::2;;:20::i;:::-;4645:284;;;4685:51;4701:7;4710:6;4718:8;4728:7;4685:15;:51::i;:::-;4645:284;;;4757:26;:24:::0;;::::2;;:26::i;:::-;4753:176;;;4799:57;4821:7;4830:6;4838:8;4848:7;4799:21;:57::i;4753:176::-;4887:31;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;947:1:79;;;831::80::1;;4201:734:34::0;;;;:::o;1242:214:79:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1371:14:79::1;:12;:14::i;:::-;1360:25;;:7;:25;;;;:41;;;;-1:-1:-1::0;1389:12:79::1;::::0;::::1;::::0;::::1;1360:41;1352:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1423:16;::::0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:26;1242:214::o;6584:987:34:-;6812:16;6830:20;6854:28;6866:6;6874:7;6854:11;:28::i;:::-;6811:71;;-1:-1:-1;6811:71:34;-1:-1:-1;6900:25:34;6892:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6982:17;:15;;;;:17::i;:::-;6966:33;;:12;:33;;;6945:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7101:15;7119:192;7167:11;7192:7;7213:12;7239:38;7266:10;7239:26;:38::i;:::-;7291:10;;7119:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7119:34:34;;-1:-1:-1;;;7119:192:34:i;:::-;7101:210;;7380:53;7401:12;7415:8;7425:7;7380:20;:53::i;:::-;7498:66;;;;;;;;;;;;7559:4;7498:66;;;;;;;;;;7511:10;;7498:66;;;;;;;;;;;;;;6584:987;;;;;;;;;:::o;8830:452::-;8907:13;;:44;;;;;;:13;:44;;;;;;;;;8884:20;;8907:13;;;;;:34;;:44;;;;;;;;;;;;;;;:13;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8907:44:34;;-1:-1:-1;8969:24:34;;;;;;;;;8961:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9153:26;;;;;;9168:10;9153:26;;;;;;9119:8;;9086:17;;9153:14;;;;;;:26;;;;;;;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9153:26:34;9189:27;;;;;;9199:10;9189:27;;;;;;;;;;;;9153:26;;-1:-1:-1;9189:9:34;;;;;;:27;;;;;-1:-1:-1;;9189:27:34;;;;;;;;-1:-1:-1;9189:9:34;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9226:49:34;;;;;;9258:10;9226:49;;;;;;;;;;;;:31;;;;-1:-1:-1;9226:31:34;;-1:-1:-1;9226:49:34;;;;;-1:-1:-1;;9226:49:34;;;;;;;-1:-1:-1;9226:31:34;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8830:452;;;;:::o;1606:422:54:-;1773:19;1795:48;1814:27;1807:35;1795:7;;:11;:48::i;:::-;1773:70;-1:-1:-1;1853:18:54;1874:76;1905:34;1898:42;;1874:76;1853:97;;1960:61;1982:6;1990:5;1997:11;2010:10;1960:21;:61::i;:::-;1606:422;;;;;;:::o;1074:179::-;1159:16;1177:20;1220:26;1232:5;1239:6;1220:11;:26::i;:::-;1213:33;;;;1074:179;;;;;:::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;171:33:68:-;203:1;171:33;:::o;21060:655:34:-;21523:10;:26;;;21550:6;21523:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21523:34:34;21519:190;;;21573:10;:17;;;21591:6;21599:10;21611:7;21573:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21519:190;;;21650:48;:27;;;21678:10;21690:7;21650:27;:48::i;828:104:18:-;915:10;828:104;:::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;884:228:80:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1010:21:80::1;:69:::0;;;::::1;;::::0;::::1;;::::0;;1089:16:::1;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;884:228:80;;:::o;11542:473:34:-;11741:15;11759:29;11775:12;11759:15;:29::i;:::-;11741:47;;11853:21;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11853:28:34;11848:43;;;11905:12;11931:7;11952:46;11980:8;11990:7;11952:27;:46::i;:::-;11848:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9813:1239;9901:16;9919:20;10015:1;10005:7;:11;9997:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:13;;:35;;;;;;:13;:35;;;;;;;;;10114:6;;10191:13;;;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10191:35:34;10187:696;;;10351:67;:31;;;10383:10;10403:4;10410:7;10351:31;:67::i;:::-;10521:129;10567:2;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10594:2;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10623:2;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10623:13:34;10521:28;:129::i;:::-;10506:144;;10187:696;;;10799:28;;;;;;10807:10;10799:28;;;;;;;;;;;;:7;;;;;;:28;;;;;-1:-1:-1;;10799:28:34;;;;;;;-1:-1:-1;10799:7:34;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10856:2;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10856:16:34;;-1:-1:-1;10187:696:34;10951:13;;:32;;;;;;:13;:32;;;;;;;;;10920:14;;;;10951:13;;;:24;;:32;;;;;;;;;;;;:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10951:32:34;;;;;;;;;-1:-1:-1;10951:32:34;-1:-1:-1;11004:41:34;10951:32;;11004:27;:41::i;:::-;10993:52;;9813:1239;;;;;;;;:::o;8465:193:33:-;8590:6;8548:8;8558:13;2754:28;8558:13;2771:10;2754:16;;;;;:28::i;:::-;-1:-1:-1;8626:24:33::1;:18:::0;;::::1;8645:1;8648;8626:18;:24::i;:::-;8612:39:::0;8465:193;-1:-1:-1;;;;8465:193:33:o;5595:288::-;5722:7;5760:116;5847:14;5777;5793:3;5798:5;5805:12;5760:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:62;;:116;;;;:::i;:::-;5741:135;;5595:288;;;;;;:::o;2092:178:80:-;2213:21;;:50;;;;;;:21;:50;;;;;;;;;2186:4;;2213:21;;;;;:31;;:50;;;;;;;;;;;;;;;:21;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2213:50:80;;-1:-1:-1;2092:178:80;;;;:::o;1973:191:79:-;2105:16;;;2078:4;2105:16;;;:7;:16;;;;;;:27;;:52;;;;-1:-1:-1;2136:21:79;;;2105:52;2098:59;;1973:191;;;;;:::o;13237:368:32:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;13237:368;-1:-1:-1;;;;;13237:368:32:o;14300:127:33:-;14361:7;14387:33;:19;14400:5;14387:12;:19::i;:::-;:31;;;:33::i;11640:217::-;11766:7;11724:8;11734:13;2754:28;11734:13;2771:10;;2754:28;-1:-1:-1;11796:54:33::1;11811:1;2120:2;11835:13;11828:21;11796:14:::0;;::::1;::::0;:54;;:14:::1;:54::i;13474:319::-:0;13599:7;13557:8;13567:13;2754:28;13567:13;2771:10;;2754:28;-1:-1:-1;13622:18:33::1;2120:2;13643:14;:12:::0;;::::1;;:14::i;:::-;:29;;;13622:50;;13682:12;13704:17;13712:8;13704:7;:17::i;:::-;13697:25;;::::0;-1:-1:-1;13739:47:33::1;:14:::0;;::::1;2120:2;13768:10:::0;13697:25;13739:14:::1;:47::i;:::-;13732:54:::0;13474:319;-1:-1:-1;;;;;;13474:319:33:o;4923:121::-;4983:4;5006:31;5013:7;5022:14;5006:6;:31::i;12529:421:34:-;12735:18;12756:22;:20;;;;:22::i;:::-;12735:43;;12811:59;12823:7;12832:6;12840:8;12850:7;12859:10;12811:11;:59::i;:::-;;12926:17;12932:10;12926:5;:17::i;:::-;12529:421;;;;;:::o;5226:133:33:-;5292:4;5315:37;5322:7;5331:20;5315:6;:37::i;13426:1292:34:-;13634:13;13650:17;:15;;;;:17::i;:::-;13634:33;;13700:14;13717:54;13729:7;13738:6;13746:8;13756:7;13765:5;13717:11;:54::i;:::-;13700:71;-1:-1:-1;13844:18:34;13901:30;13945:7;13966:16;:14;;;;:16::i;:::-;13996:17;:15;;;;:17::i;:::-;14027:13;:11;;;;:13::i;:::-;14054:6;14074:14;:12;;;;:14::i;:::-;14102:27;:19;:17;;;;:19::i;:::-;:25;;;:27::i;:::-;13865:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13844:295;;14435:13;14454:5;:10;;14465:5;14454:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14434:37;;;14534:8;14529:183;;14597:16;14651:4;14648:1;;14630:26;14683:4;14648:1;14673:15;2391:122:80;2471:21;;:35;;;;;;;;2446:6;;2471:21;;;:33;;:35;;;;;;;;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2471:35:80;;-1:-1:-1;2391:122:80;:::o;999:129:75:-;1097:23;;;999:129::o;6215:531:33:-;6408:7;6446:293;6717:20;6501;6543:5;6570;6597:12;6631:7;6660:10;6446:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:263;;:293;;;;:::i;704:175:28:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;737:413:17:-;1097:20;1135:8;;;737:413::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;935:126:7;:::o;2433:203:79:-;2562:16;;;2521:15;2562:16;;;:7;:16;;;;;;2596:21;2588:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:379:33;3852:12;3810:8;3820:13;2754:28;3820:13;2771:10;;2754:28;;3888:22:::1;3902:7;3888:13;:22::i;:::-;3880:42;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3958:16;::::0;;3972:1:::1;3958:16:::0;;;;;::::1;::::0;;3932:23:::1;::::0;3958:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;3958:16:33::1;3932:42;;3996:8;3984:6;3991:1;3984:9;;;;;;;;;;;;;:20;;;;;;;;;;;::::0;::::1;4026:7;4014:6;4021:1;4014:9;;;;;;;;:19:::0;;;::::1;:9;::::0;;::::1;::::0;;;;;;;:19;4050:25:::1;4068:6:::0;4050:17:::1;:25::i;885:203:28:-:0;1012:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:27;1012:68;;;985:96;;1005:5;;985:19;:96::i;:::-;885:203;;;;:::o;7902:429:33:-;8040:7;8149:5;8143:19;8184:5;8217:7;8211:21;8254:7;8283:9;8105:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8105:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8078:246;;;;;;8059:265;;7902:429;;;;;:::o;7247:193::-;7346:7;7376:57;7418:13;7376:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;:57::i;9686:578:32:-;9764:7;9788:26;9795:7;9804:9;9788:6;:26::i;:::-;9783:451;;9833:9;9846:35;9864:15;9871:7;9864:6;:15::i;:::-;9856:24;;9846:9;:35::i;:::-;9830:51;;;9898:9;9911:29;9929:9;9921:18;;9911:9;:29::i;:::-;9998:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10212:11;;;;;;;;;;;;;;;;;;9895:45;;-1:-1:-1;9998:186:32;;-1:-1:-1;9998:186:32;;10212:11;;;;;;;;;;;9954:17;10212:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9783:451;-1:-1:-1;10250:7:32;;9686:578;-1:-1:-1;9686:578:32:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:32:o;12397:443::-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:32;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;13926:234:33:-;13989:7;14012:30;14033:8;14012:20;:30::i;:::-;14008:106;;;14065:38;:15;;;14088:13;14065:15;:38::i;:::-;14058:45;;;;14008:106;14130:23;:21;:23::i;8826:165:32:-;8887:7;8914:16;8922:7;8914;:16::i;:::-;8906:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8977:7:32;8826:165::o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;9523:131:33:-;9581:5;9611:35;:18;;;2120:2;9644:1;9611:18;:35::i;4562:191::-;4631:4;4695:5;4689:12;;;;;;;;4666:35;;:19;4677:7;4666:10;:19::i;:::-;:35;;;:80;;;;;4741:5;4717:29;;;;;;;;:20;4729:7;4717:11;:20::i;:::-;:29;;;;;;;;;;4562:191;-1:-1:-1;;;4562:191:33:o;10482:301::-;10628:7;10578:15;10595:14;2754:28;10595:14;2771:10;;2754:28;-1:-1:-1;10744:32:33::1;:28:::0;;::::1;10773:2;10744:28;:32::i;15331:1077:34:-:0;15772:13;;15502:14;;15772:13;;:30;15816:17;:15;;;;:17::i;:::-;15847:13;:11;;;;:13::i;:::-;15772:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15772:98:34;;-1:-1:-1;15908:15:34;15926:14;:12;;;;:14::i;:::-;16012:13;;:35;;;;;;:13;:35;;;;;;;;;15908:32;;-1:-1:-1;16012:13:34;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16012:35:34;16008:197;;;16063:39;16074:6;16082:7;16091:10;16063;:39::i;:::-;16008:197;;;16133:61;16143:6;16151:7;16160:10;16172:21;:19;;;;:21::i;:::-;16133:9;:61::i;:::-;16336:10;16249:152;;16316:6;16249:152;;16270:32;16286:7;16295:6;16270:15;:32::i;:::-;16249:152;;;16368:1;16384:7;16249:152;;;;;;;;;;;;;;;;;;;;;;;;;;15331:1077;;;;;;;;:::o;17954:692::-;1512:10;18025;:18;;;:32;:84;;;;;1512:10;18073:21;:36;;18025:84;18008:632;;;18592:37;;:24;;;;:37;;1512:10;;18592:37;;;;1512:10;18592:24;:37;;-1:-1:-1;;;;;17954:692:34;:::o;12041:216:33:-;12188:7;12132:15;12149:20;2754:28;12149:20;2771:10;;12418:320;12564:7;12508:15;12525:20;2754:28;12525:20;2771:10;;2754:28;-1:-1:-1;12702:29:33::1;:21:::0;;::::1;12724:2;12728;12702:21;:29::i;8784:214::-:0;8905:7;8863:8;8873:13;2754:28;8873:13;2771:10;;2754:28;-1:-1:-1;8970:21:33::1;:14:::0;;::::1;8985:1;8988:2;8970:14;:21::i;10925:191::-:0;10987:7;11076:33;:25;;;11102:2;11106;11076:25;:33::i;12909:426::-;13058:7;13002:15;13019:20;2754:28;13019:20;2771:10;;2754:28;-1:-1:-1;13150:178:33::1;2389:3;::::0;13228:21:::1;:19:::0;;::::1;;:21::i;:::-;:45;;;13298:15;13291:23;::::0;27680:614:32;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:32;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:32:o;2967:751:28:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:28;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:28;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:64:18;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:18;:::o;1067:192:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;2995:141:33:-;3058:4;3081:19;3092:7;3081:10;:19::i;:::-;:48;;;;3104:25;3121:7;3104:16;:25::i;30791:744:32:-;31012:4;31006:11;30855:16;;30883:11;31086:32;31097:8;31113:4;31107:10;;31086;:32::i;:::-;31067:51;;31128:16;31147:13;31151:8;31147:3;:13::i;:::-;31128:32;;;;31170:18;31191:19;31201:8;31191:9;:19::i;:::-;31348:21;;;-1:-1:-1;31468:20:32;;31490:4;31464:31;31458:4;31451:45;-1:-1:-1;31355:3:32;31230:299;-1:-1:-1;;31230:299:32:o;9256:132::-;9330:4;9372:9;9353:28;;:15;9360:7;9353:6;:15::i;:::-;:28;;;;9256:132;-1:-1:-1;;;9256:132:32:o;13797:276::-;14016:3;14012:17;;13886:181::o;4809:556::-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:32;;4904:202;;;-1:-1:-1;5169:2:32;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:32;;5154:205;;;;4809:556;;;:::o;19502:677::-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:32;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:32:o;2553:172:31:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:32;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;3293:241:33:-;3361:4;;3392:11;:9;;;;:11::i;:::-;3377:26;;;-1:-1:-1;3440:27:33;3432:35;;;:95;;-1:-1:-1;3491:36:33;-1:-1:-1;3483:44:33;;3413:114;-1:-1:-1;;3293:241:33:o;10499:390:32:-;10858:3;10854:18;10792:25;;;;10842:31;;10642:241::o;7319:80::-;7388:4;7319:80;:::o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:32;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:32;;8456:129;-1:-1:-1;;;8456:129:32:o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;9792:121:33:-;9852:5;9882:23;:17;;;9852:5;9903:1;9882:17;:23::i;4222:118::-;4281:5;4317:14;:12;;;;:14::i;:::-;4305:28;;;;;;;;;21433:159:32;21511:7;21553:30;21563:7;21572:6;21580:2;21553:9;:30::i;11268:240:33:-;11361:7;11472:29;:21;;;11494:2;11498;11472:21;:29::i;17153:416:34:-;17420:6;17407:25;;;17433:10;17445:7;17407:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:6;17513:35;;;17549:12;17513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:171;19227:32;;19247:2;19228:21;;;;;;19227:32;;19095:171::o;26400:910:32:-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;3581:193:29:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;28842:717:32:-;28930:18;29072:4;29066:11;29159:9;29154:3;29151:18;29148:2;;;29201:4;29195;29188:18;29148:2;;29264:15;29298:9;29293:194;29317:8;:15;29313:1;:19;29293:194;;;29354:15;29372:8;29381:1;29372:11;;;;;;;;;;;;;;29354:29;;29397:42;29410:7;29431;29419:9;:19;29397:12;:42::i;:::-;;29464:12;29468:7;29464:3;:12::i;:::-;29453:23;;;;;;;-1:-1:-1;29334:4:32;;29293:194;;;;29509:43;29530:1;29533:9;29544:7;29509:20;:43::i;15578:111::-;15637:7;15663:14;15669:7;15663:5;:14::i;:::-;15680:2;15663:19;;15578:111;-1:-1:-1;;15578:111:32:o;4286:199::-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:32:o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:32;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:32:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;7750:103::-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:32:o;4608:523:29:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:29:o;15237:122:32:-;15292:7;15350:2;15318:29;15344:2;15326:12;15330:7;15326:3;:12::i;:::-;15318:21;;;:25;:29::i;:::-;:34;;;;;;;15237:122;-1:-1:-1;;15237:122:32:o;3073:1041::-;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;7091:725:29:-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:29;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {},
    "immutableReferences": {
      "31132": [
        {
          "start": 3331,
          "length": 32
        },
        {
          "start": 3713,
          "length": 32
        },
        {
          "start": 3935,
          "length": 32
        },
        {
          "start": 4437,
          "length": 32
        },
        {
          "start": 7875,
          "length": 32
        },
        {
          "start": 8059,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "DUST_AMOUNT()": "97f641ab",
    "VERSION()": "ffa1ad74",
    "accountant()": "4fb3ccc5",
    "approveAffectedAssets()": "459f1383",
    "enrollCustom(uint32,bytes32,address)": "28b1aea0",
    "enrollRemoteRouter(uint32,bytes32)": "b49c53a7",
    "exposed_handleTransferToHook(uint32,uint32,bytes,bytes)": "e280bc7e",
    "giveLocal(address,uint256,address)": "044dc0d7",
    "handle(uint32,uint32,bytes32,bytes)": "ab2dc3f5",
    "initialize(address,address)": "485cc955",
    "liquidityProvider(bytes32)": "546d573d",
    "migrate(address)": "ce5494bb",
    "owner()": "8da5cb5b",
    "remotes(uint32)": "83bbb806",
    "renounceOwnership()": "715018a6",
    "send(address,uint256,uint32,bytes32,bool)": "a9bd1226",
    "sendToHook(address,uint256,uint32,bytes32,bytes)": "bc7dbab3",
    "sendTransferMessage(uint32,bytes29,bytes29)": "86e532d4",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "takeTokens(address,uint256)": "e4ad9a18",
    "tokenRegistry()": "9d23c4c7",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/harness/BridgeRouterHarness.sol",
    "id": 42034,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "BridgeRouter": [
        31124
      ],
      "BridgeRouterHarness": [
        41923
      ],
      "EthereumBridgeRouter": [
        31250
      ],
      "EthereumBridgeRouterHarness": [
        42033
      ],
      "TypedMemView": [
        29602
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:1985:54",
    "nodes": [
      {
        "id": 41864,
        "nodeType": "PragmaDirective",
        "src": "46:22:54",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 41867,
        "nodeType": "ImportDirective",
        "src": "70:74:54",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeRouter.sol",
        "file": "../../BridgeRouter.sol",
        "scope": 42034,
        "sourceUnit": 31251,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41865,
              "name": "BridgeRouter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "78:12:54",
              "typeDescriptions": {}
            }
          },
          {
            "foreign": {
              "id": 41866,
              "name": "EthereumBridgeRouter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "92:20:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41869,
        "nodeType": "ImportDirective",
        "src": "145:54:54",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "../../BridgeMessage.sol",
        "scope": 42034,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41868,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "153:13:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41871,
        "nodeType": "ImportDirective",
        "src": "200:78:54",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 42034,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41870,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:12:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41923,
        "nodeType": "ContractDefinition",
        "src": "280:579:54",
        "nodes": [
          {
            "id": 41890,
            "nodeType": "FunctionDefinition",
            "src": "331:179:54",
            "body": {
              "id": 41889,
              "nodeType": "Block",
              "src": "460:50:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41885,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41875,
                        "src": "489:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41886,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41877,
                        "src": "496:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 41884,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "477:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 41887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "477:26:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "functionReturnParameters": 41883,
                  "id": 41888,
                  "nodeType": "Return",
                  "src": "470:33:54"
                }
              ]
            },
            "functionSelector": "e4ad9a18",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "takeTokens",
            "parameters": {
              "id": 41878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41875,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "351:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "351:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41877,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "366:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41876,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "366:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "350:31:54"
            },
            "returnParameters": {
              "id": 41883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41880,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "416:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41879,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41882,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "434:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 41881,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "434:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "415:40:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41906,
            "nodeType": "FunctionDefinition",
            "src": "516:174:54",
            "body": {
              "id": 41905,
              "nodeType": "Block",
              "src": "630:60:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41900,
                        "name": "dest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41892,
                        "src": "661:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 41901,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41894,
                        "src": "667:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 41902,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41896,
                        "src": "676:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 41899,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "640:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 41903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "640:43:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41904,
                  "nodeType": "ExpressionStatement",
                  "src": "640:43:54"
                }
              ]
            },
            "functionSelector": "86e532d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendTransferMessage",
            "parameters": {
              "id": 41897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41892,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "554:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41891,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "554:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41894,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "575:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41893,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "575:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41896,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "600:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41895,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "544:76:54"
            },
            "returnParameters": {
              "id": 41898,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "630:0:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41922,
            "nodeType": "FunctionDefinition",
            "src": "696:161:54",
            "body": {
              "id": 41921,
              "nodeType": "Block",
              "src": "804:53:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41916,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41908,
                        "src": "825:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41917,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41910,
                        "src": "832:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 41918,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41912,
                        "src": "840:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 41915,
                      "name": "_giveLocal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31033,
                      "src": "814:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,address)"
                      }
                    },
                    "id": 41919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "814:36:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41920,
                  "nodeType": "ExpressionStatement",
                  "src": "814:36:54"
                }
              ]
            },
            "functionSelector": "044dc0d7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "giveLocal",
            "parameters": {
              "id": 41913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41908,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "724:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41907,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "724:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41910,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "747:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "747:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41912,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "771:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41911,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "714:80:54"
            },
            "returnParameters": {
              "id": 41914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "804:0:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 41872,
              "name": "BridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31124,
              "src": "312:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeRouter_$31124",
                "typeString": "contract BridgeRouter"
              }
            },
            "id": 41873,
            "nodeType": "InheritanceSpecifier",
            "src": "312:12:54"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          31124,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          41923,
          31124,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "BridgeRouterHarness",
        "scope": 42034
      },
      {
        "id": 42033,
        "nodeType": "ContractDefinition",
        "src": "861:1169:54",
        "nodes": [
          {
            "id": 41928,
            "nodeType": "UsingForDirective",
            "src": "928:29:54",
            "libraryName": {
              "id": 41926,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "934:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 41927,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "951:5:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 41931,
            "nodeType": "UsingForDirective",
            "src": "962:31:54",
            "libraryName": {
              "id": 41929,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "968:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 41930,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "985:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 41940,
            "nodeType": "FunctionDefinition",
            "src": "999:69:54",
            "body": {
              "id": 41939,
              "nodeType": "Block",
              "src": "1066:2:54",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 41936,
                    "name": "_accountant",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 41933,
                    "src": "1053:11:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 41937,
                "modifierName": {
                  "id": 41935,
                  "name": "EthereumBridgeRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 31250,
                  "src": "1032:20:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_EthereumBridgeRouter_$31250_$",
                    "typeString": "type(contract EthereumBridgeRouter)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1032:33:54"
              }
            ],
            "name": "",
            "parameters": {
              "id": 41934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41933,
                  "mutability": "mutable",
                  "name": "_accountant",
                  "nodeType": "VariableDeclaration",
                  "scope": 41940,
                  "src": "1011:19:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41932,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1011:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1010:21:54"
            },
            "returnParameters": {
              "id": 41938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1066:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 41957,
            "nodeType": "FunctionDefinition",
            "src": "1074:179:54",
            "body": {
              "id": 41956,
              "nodeType": "Block",
              "src": "1203:50:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41952,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41942,
                        "src": "1232:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41953,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41944,
                        "src": "1239:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 41951,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "1220:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 41954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1220:26:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "functionReturnParameters": 41950,
                  "id": 41955,
                  "nodeType": "Return",
                  "src": "1213:33:54"
                }
              ]
            },
            "functionSelector": "e4ad9a18",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "takeTokens",
            "parameters": {
              "id": 41945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41942,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1094:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41941,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1094:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41944,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1109:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1109:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1093:31:54"
            },
            "returnParameters": {
              "id": 41950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41947,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1159:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41946,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1159:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41949,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1177:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 41948,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1158:40:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41973,
            "nodeType": "FunctionDefinition",
            "src": "1259:174:54",
            "body": {
              "id": 41972,
              "nodeType": "Block",
              "src": "1373:60:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41967,
                        "name": "dest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41959,
                        "src": "1404:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 41968,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41961,
                        "src": "1410:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 41969,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41963,
                        "src": "1419:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 41966,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "1383:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 41970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1383:43:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41971,
                  "nodeType": "ExpressionStatement",
                  "src": "1383:43:54"
                }
              ]
            },
            "functionSelector": "86e532d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendTransferMessage",
            "parameters": {
              "id": 41964,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41959,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1297:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41958,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1297:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41961,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1318:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41960,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1318:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41963,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1343:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41962,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1343:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1287:76:54"
            },
            "returnParameters": {
              "id": 41965,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1373:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41989,
            "nodeType": "FunctionDefinition",
            "src": "1439:161:54",
            "body": {
              "id": 41988,
              "nodeType": "Block",
              "src": "1547:53:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41983,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41975,
                        "src": "1568:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41984,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41977,
                        "src": "1575:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 41985,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41979,
                        "src": "1583:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 41982,
                      "name": "_giveLocal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        31249
                      ],
                      "referencedDeclaration": 31249,
                      "src": "1557:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,address)"
                      }
                    },
                    "id": 41986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1557:36:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41987,
                  "nodeType": "ExpressionStatement",
                  "src": "1557:36:54"
                }
              ]
            },
            "functionSelector": "044dc0d7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "giveLocal",
            "parameters": {
              "id": 41980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41975,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1467:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41977,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1490:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1490:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41979,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1514:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1514:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1457:80:54"
            },
            "returnParameters": {
              "id": 41981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1547:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42032,
            "nodeType": "FunctionDefinition",
            "src": "1606:422:54",
            "body": {
              "id": 42031,
              "nodeType": "Block",
              "src": "1763:265:54",
              "statements": [
                {
                  "assignments": [
                    42001
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42001,
                      "mutability": "mutable",
                      "name": "tokenIdView",
                      "nodeType": "VariableDeclaration",
                      "scope": 42031,
                      "src": "1773:19:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 42000,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "1773:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42011,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "id": 42006,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "1814:13:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 42007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Types",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29620,
                              "src": "1814:19:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 42008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TokenId",
                            "nodeType": "MemberAccess",
                            "src": "1814:27:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 42005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1807:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 42004,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "1807:6:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1807:35:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 42002,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41995,
                        "src": "1795:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 42003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "1795:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 42010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1795:48:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1773:70:54"
                },
                {
                  "assignments": [
                    42013
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42013,
                      "mutability": "mutable",
                      "name": "actionView",
                      "nodeType": "VariableDeclaration",
                      "scope": 42031,
                      "src": "1853:18:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 42012,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "1853:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42023,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "id": 42018,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "1905:13:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 42019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Types",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29620,
                              "src": "1905:19:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 42020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TransferToHook",
                            "nodeType": "MemberAccess",
                            "src": "1905:34:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 42017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1898:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 42016,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "1898:6:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1898:42:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 42014,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41997,
                        "src": "1874:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 42015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "1874:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 42022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1874:76:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1853:97:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 42025,
                        "name": "origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41991,
                        "src": "1982:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42026,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41993,
                        "src": "1990:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42027,
                        "name": "tokenIdView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42001,
                        "src": "1997:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 42028,
                        "name": "actionView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42013,
                        "src": "2010:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 42024,
                      "name": "_handleTransferToHook",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30943,
                      "src": "1960:21:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 42029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1960:61:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42030,
                  "nodeType": "ExpressionStatement",
                  "src": "1960:61:54"
                }
              ]
            },
            "functionSelector": "e280bc7e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exposed_handleTransferToHook",
            "parameters": {
              "id": 41998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41991,
                  "mutability": "mutable",
                  "name": "origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1653:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41990,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41993,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1676:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41992,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1676:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41995,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1698:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 41994,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41997,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1728:19:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 41996,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1728:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1643:110:54"
            },
            "returnParameters": {
              "id": 41999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1763:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 41924,
              "name": "EthereumBridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31250,
              "src": "901:20:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EthereumBridgeRouter_$31250",
                "typeString": "contract EthereumBridgeRouter"
              }
            },
            "id": 41925,
            "nodeType": "InheritanceSpecifier",
            "src": "901:20:54"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          31250,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          42033,
          31250,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "EthereumBridgeRouterHarness",
        "scope": 42034
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 54
}