{
  "_format": "hh-sol-artifact-1",
  "contractName": "Swap",
  "sourceName": "contracts/Swap.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAdapter[]",
          "name": "_adapters",
          "type": "address[]"
        },
        {
          "internalType": "bytes4",
          "name": "_requiredSenderKind",
          "type": "bytes4"
        },
        {
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_protocolFeeWallet",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AdaptersInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AffiliateAmountInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FeeInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FeeWalletInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "NonceAlreadyUsed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NonceTooLow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OrderExpired",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "RoyaltyExceedsMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SenderInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SenderTokenInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignatoryInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignatoryUnauthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignatureInvalid",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenKindUnknown",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "TransferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Authorize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Cancel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "CancelUpTo",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        }
      ],
      "name": "Revoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetProtocolFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "feeWallet",
          "type": "address"
        }
      ],
      "name": "SetProtocolFeeWallet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "signerWallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "signerAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "signerId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "signerToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "senderWallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "senderAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "senderId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "senderToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "affiliateWallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "affiliateAmount",
          "type": "uint256"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_NAME",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DIVISOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "adapters",
      "outputs": [
        {
          "internalType": "contract IAdapter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signatory",
          "type": "address"
        }
      ],
      "name": "authorize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "authorized",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "nonces",
          "type": "uint256[]"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minimumNonce",
          "type": "uint256"
        }
      ],
      "name": "cancelUpTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "senderWallet",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "expiry",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "wallet",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "bytes4",
                  "name": "kind",
                  "type": "bytes4"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Party",
              "name": "signer",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "wallet",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "bytes4",
                  "name": "kind",
                  "type": "bytes4"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Party",
              "name": "sender",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "affiliateWallet",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "affiliateAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "v",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "r",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "internalType": "struct ISwap.Order",
          "name": "order",
          "type": "tuple"
        }
      ],
      "name": "check",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "nonceUsed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protocolFeeWallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredSenderKind",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "setProtocolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_protocolFeeWallet",
          "type": "address"
        }
      ],
      "name": "setProtocolFeeWallet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "signatoryMinimumNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxRoyalty",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "expiry",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "wallet",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "bytes4",
                  "name": "kind",
                  "type": "bytes4"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Party",
              "name": "signer",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "wallet",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "bytes4",
                  "name": "kind",
                  "type": "bytes4"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct Party",
              "name": "sender",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "affiliateWallet",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "affiliateAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "v",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "r",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "internalType": "struct ISwap.Order",
          "name": "order",
          "type": "tuple"
        }
      ],
      "name": "swap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101a06040523480156200001257600080fd5b5060405162003b0a38038062003b0a8339810160408190526200003591620004ae565b604051806040016040528060048152602001630535741560e41b815250604051806040016040528060038152602001621a171960e91b8152506200008862000082620002d560201b60201c565b620002d9565b62000095826002620002f7565b61012052620000a6816003620002f7565b61014052815160208084019190912060e052815190820120610100524660a0526200012360e051610100516040805160008051602062003aea83398151915260208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05261271082106200014f576040516352dadcf960e01b815260040160405180910390fd5b6001600160a01b0381166200017757604051636b8df36360e01b815260040160405180910390fd5b83516000036200019a57604051632cb13a8760e21b815260040160405180910390fd5b620001a462000330565b61016052835160005b818110156200029957858181518110620001cb57620001cb620005b0565b602002602001015160096000888481518110620001ec57620001ec620005b0565b60200260200101516001600160a01b031663a64d0cd46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620005c6565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b0392909216919091179055600101620001ad565b50506001600160e01b03199290921661018052600755600880546001600160a01b0319166001600160a01b0390921691909117905550620007be565b3390565b600180546001600160a01b0319169055620002f481620003c6565b50565b600060208351101562000317576200030f8362000416565b90506200032a565b816200032484826200067c565b5060ff90505b92915050565b600060c0516001600160a01b0316306001600160a01b031614801562000357575060a05146145b1562000364575060805190565b620003c160e051610100516040805160008051602062003aea83398151915260208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f815111156200044d578260405163305a27a960e01b815260040162000444919062000748565b60405180910390fd5b80516200045a8262000799565b179392505050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200049057600080fd5b919050565b80516001600160e01b0319811681146200049057600080fd5b60008060008060808587031215620004c557600080fd5b84516001600160401b0380821115620004dd57600080fd5b818701915087601f830112620004f257600080fd5b815160208282111562000509576200050962000462565b8160051b604051601f19603f8301168101818110868211171562000531576200053162000462565b60405292835281830193508481018201928b8411156200055057600080fd5b948201945b838610156200057957620005698662000478565b8552948201949382019362000555565b98506200058a905089820162000495565b96505050505060408501519150620005a56060860162000478565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620005d957600080fd5b620005e48262000495565b9392505050565b600181811c908216806200060057607f821691505b6020821081036200062157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000677576000816000526020600020601f850160051c81016020861015620006525750805b601f850160051c820191505b8181101562000673578281556001016200065e565b5050505b505050565b81516001600160401b0381111562000698576200069862000462565b620006b081620006a98454620005eb565b8462000627565b602080601f831160018114620006e85760008415620006cf5750858301515b600019600386901b1c1916600185901b17855562000673565b600085815260208120601f198616915b828110156200071957888601518255948401946001909101908401620006f8565b5085821015620007385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b8181101562000778578581018301518582016040015282016200075a565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620006215760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516132ad6200083d600039600081816101ad01528181610e420152611da70152600061024201526000611a4d01526000611a2201526000612a9601526000612a6e015260006129c9015260006129f301526000612a1d01526132ad6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80637ce78525116100ee578063b0e21e8a11610097578063b918161111610071578063b918161114610454578063cbf7c6c31461048a578063e30c3978146104aa578063f2fde38b146104c857600080fd5b8063b0e21e8a14610430578063b6549f7514610439578063b6a5d7de1461044157600080fd5b80639e93ad8e116100c85780639e93ad8e146103cb578063acb8cc49146103d4578063b0dd49431461041057600080fd5b80637ce785251461037f57806384b0196e146103925780638da5cb5b146103ad57600080fd5b806349b8a93211610150578063787dce3d1161012a578063787dce3d1461031b578063796f077b1461032e57806379ba50971461037757600080fd5b806349b8a932146102985780636e038752146102b8578063715018a61461031357600080fd5b80633644e515116101815780633644e5151461023d5780633c64191014610272578063485421051461028557600080fd5b806306a6ea74146101a85780631647795e146102055780632e34082314610228575b600080fd5b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b610218610213366004612c3e565b6104db565b60405190151581526020016101fc565b61023b610236366004612c6a565b610540565b005b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101fc565b61023b610280366004612cdf565b6105ad565b61023b610293366004612d11565b6105e9565b6102ab6102a6366004612d51565b610a2c565b6040516101fc9190612d88565b6102ee6102c6366004612dfc565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b61023b611809565b61023b610329366004612cdf565b61181d565b61036a6040518060400160405280600481526020017f535741500000000000000000000000000000000000000000000000000000000081525081565b6040516101fc9190612e85565b61023b61189b565b61023b61038d366004612e98565b611950565b61039a611a14565b6040516101fc9796959493929190612eb5565b60005473ffffffffffffffffffffffffffffffffffffffff166102ee565b61026461271081565b61036a6040518060400160405280600381526020017f342e32000000000000000000000000000000000000000000000000000000000081525081565b61026461041e366004612e98565b60066020526000908152604090205481565b61026460075481565b61023b611ab9565b61023b61044f366004612e98565b611b36565b6102ee610462366004612e98565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6008546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff166102ee565b61023b6104d6366004612e98565b611bfe565b6000806104ea61010084612fd5565b905060006104fa61010085612fe9565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020908152604080832095835294905292909220546001921c82169091149150505b92915050565b60005b818110156105a857600083838381811061055f5761055f612ffd565b9050602002013590506105723382611cae565b604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a350600101610543565b505050565b336000818152600660205260408082208490555183917f863123978d9b13946753a916c935c0688a01802440d3ffc668d04d2720c4e11091a350565b6105f281611d84565b6000610605610100830160e08401612e98565b73ffffffffffffffffffffffffffffffffffffffff161415801561064f575033610636610100830160e08401612e98565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610686576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106cf3361069a6060840160408501612e98565b6101608401356101408501356106b861012087016101008801612e98565b6106ca61014088016101208901612dfc565b611fed565b61070d6106e26060830160408401612e98565b8460c084013560a08501356106fd6080870160608801612e98565b6106ca60a0880160808901612dfc565b60006107216101a083016101808401612e98565b73ffffffffffffffffffffffffffffffffffffffff161461077057610770336107526101a084016101808501612e98565b6101a08401356101408501356106b861012087016101008801612e98565b600754600090612710906107899061016085013561302c565b6107939190612fd5565b905080156107e5576008546107e590339073ffffffffffffffffffffffffffffffffffffffff16836101408601356107d361012088016101008901612e98565b6106ca61014089016101208a01612dfc565b6107fd6107f86080840160608501612e98565b6121be565b15610933576000806108156080850160608601612e98565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08601356004820152610160860135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b39190613043565b909250905080156109305784811115610900576040517f9c08743a000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b61093033838361014088013561091e6101208a016101008b01612e98565b6106ca6101408b016101208c01612dfc565b50505b336109446060840160408501612e98565b73ffffffffffffffffffffffffffffffffffffffff1683357f182e847dc18073123e8aa17e204b9e3874caf71387e52fe3083ffb98716d3d6b60c086013560a08701356109976080890160608a01612e98565b6101608901356101408a01356109b56101208c016101008d01612e98565b6109c76101a08d016101808e01612e98565b60408051978852602088019690965273ffffffffffffffffffffffffffffffffffffffff9485169587019590955260608601929092526080850152811660a08401521660c08201526101a087013560e08201526101000160405180910390a450505050565b60408051600f808252610200820190925260609160009190602082016101e080368337019050509050600080610a686060860160408701612e98565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615610ac15773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b610b4781610ace87612296565b6101e088018035906102008a013590610aeb906101c08c01613071565b604051602001610b3393929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612537565b610b9a577f556e617574686f72697a656400000000000000000000000000000000000000008383610b7781613094565b945081518110610b8957610b89612ffd565b602002602001018181525050610c4f565b610ba58186356104db565b15610bd6577f4e6f6e6365416c726561647955736564000000000000000000000000000000008383610b7781613094565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205485351015610c4f577f4e6f6e6365546f6f4c6f770000000000000000000000000000000000000000008383610c3081613094565b945081518110610c4257610c42612ffd565b6020026020010181815250505b4285602001351015610ca6577f4f726465724578706972656400000000000000000000000000000000000000008383610c8781613094565b945081518110610c9957610c99612ffd565b6020026020010181815250505b6000610cb9610100870160e08801612e98565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d19575073ffffffffffffffffffffffffffffffffffffffff8616610d00610100870160e08801612e98565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d69577f53656e646572496e76616c6964000000000000000000000000000000000000008383610d4a81613094565b945081518110610d5c57610d5c612ffd565b6020026020010181815250505b6000600981610d8061014089016101208a01612dfc565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080610e1f577f53656e646572546f6b656e4b696e64556e6b6e6f776e000000000000000000008484610dfc81613094565b955081518110610e0e57610e0e612ffd565b602002602001018181525050611491565b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016610e7461014088016101208901612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ec7577f53656e646572546f6b656e496e76616c696400000000000000000000000000008484610dfc81613094565b60075460009061271090610ee0906101608a013561302c565b610eea9190612fd5565b905060006101a0880135610f03836101608b01356130cc565b610f0d91906130cc565b9050610f226107f860808a0160608b01612e98565b15610fe9576000610f3960808a0160608b01612e98565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08b013560048201526101608b0135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190613043565b9150610fe5905081836130cc565b9150505b6040805160a0810190915273ffffffffffffffffffffffffffffffffffffffff8a168152600090602081016110266101208c016101008d01612e98565b73ffffffffffffffffffffffffffffffffffffffff1681526020016110536101408c016101208d01612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001681526101408b01356020820152604001839052905073ffffffffffffffffffffffffffffffffffffffff8a161561130257604080517f3170f63d000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff00000000000000000000000000000000000000000000000000000000166044820152606083015160648201526080830151608482015290851690633170f63d9060a401602060405180830381865afa158015611161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118591906130df565b6111d4577f53656e646572416c6c6f77616e63654c6f77000000000000000000000000000087876111b581613094565b9850815181106111c7576111c7612ffd565b6020026020010181815250505b604080517fd1190df9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff0000000000000000000000000000000000000000000000000000000016604482015260608301516064820152608083015160848201529085169063d1190df99060a401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906130df565b611302577f53656e64657242616c616e63654c6f770000000000000000000000000000000087876112e381613094565b9850815181106112f5576112f5612ffd565b6020026020010181815250505b604080517f40944de9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff000000000000000000000000000000000000000000000000000000001660448201526060830151606482015260808301516084820152908516906340944de99060a401602060405180830381865afa1580156113bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e191906130df565b611430577f416d6f756e744f724944496e76616c6964000000000000000000000000000000878761141181613094565b98508151811061142357611423612ffd565b6020026020010181815250505b6101a08901356101608a0135101561148d577f416666696c69617465416d6f756e74496e76616c696400000000000000000000878761146e81613094565b98508151811061148057611480612ffd565b6020026020010181815250505b5050505b60006009816114a660a08a0160808b01612dfc565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080611545577f5369676e6572546f6b656e4b696e64556e6b6e6f776e00000000000000000000858561152281613094565b96508151811061153457611534612ffd565b6020026020010181815250506117f1565b604080517f3170f63d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691633170f63d91611599918b0190600401613183565b602060405180830381865afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da91906130df565b611629577f5369676e6572416c6c6f77616e63654c6f770000000000000000000000000000858561160a81613094565b96508151811061161c5761161c612ffd565b6020026020010181815250505b604080517fd1190df900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169163d1190df99161167d918b0190600401613183565b602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be91906130df565b61170d577f5369676e657242616c616e63654c6f770000000000000000000000000000000085856116ee81613094565b96508151811061170057611700612ffd565b6020026020010181815250505b604080517f40944de900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316916340944de991611761918b0190600401613183565b602060405180830381865afa15801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a291906130df565b6117f1577f416d6f756e744f724944496e76616c696400000000000000000000000000000085856117d281613094565b9650815181106117e4576117e4612ffd565b6020026020010181815250505b845184146117fd578385525b50929695505050505050565b6118116125b4565b61181b6000612635565b565b6118256125b4565b6127108110611860576040517f52dadcf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b19060200160405180910390a150565b600154339073ffffffffffffffffffffffffffffffffffffffff168114611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108f7565b61194d81612635565b50565b6119586125b4565b73ffffffffffffffffffffffffffffffffffffffff81166119a5576040517f6b8df36300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b600060608082808083611a487f00000000000000000000000000000000000000000000000000000000000000006002612666565b611a737f00000000000000000000000000000000000000000000000000000000000000006003612666565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff8116611b83576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b611c066125b4565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611c6960005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000611cbc61010083612fd5565b90506000611ccc61010084612fe9565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460209081526040808320868452909152902054909150600181831c81169003611d42576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018590526024016108f7565b73ffffffffffffffffffffffffffffffffffffffff909416600090815260046020908152604080832094835293905291909120600190911b9290921790915550565b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016611dd961014083016101208401612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001614611e32576040517fd0bd721a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a08101356101608201351015611e76576040517f3b71bbca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e886060830160408401612e98565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615611ee15773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b611f0b81611eee84612296565b6101e0850180359061020087013590610aeb906101c08901613071565b611f41576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c818335611cae565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205482351015611fac576040517fd24d82a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42826020013511611fe9576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff168061206c576040517f33c8207c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905285811660a4808401919091528351808403909101815260c490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47338bc300000000000000000000000000000000000000000000000000000000179052915160009284169161211991613191565b600060405180830381855af49150503d8060008114612154576040519150601f19603f3d011682016040523d82523d6000602084013e612159565b606091505b50509050806121b4576040517f523c3aaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a166004830152881660248201526044016108f7565b5050505050505050565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f2a55205a00000000000000000000000000000000000000000000000000000000600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906301ffc9a790602401602060405180830381865afa925050508015612285575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612282918101906130df565b60015b61053a57506000919050565b919050565b600061053a6040516020016123d8907f4f726465722875696e74323536206e6f6e63652c75696e74323536206578706981527f72792c75696e743235362070726f746f636f6c4665652c50617274792073696760208201527f6e65722c50617274792073656e6465722c6164647265737320616666696c696160408201527f746557616c6c65742c75696e7432353620616666696c69617465416d6f756e7460608201527f290000000000000000000000000000000000000000000000000000000000000060808201527f506172747928616464726573732077616c6c65742c6164647265737320746f6b60818201527f656e2c627974657334206b696e642c75696e743235362069642c75696e74323560a18201527f3620616d6f756e7429000000000000000000000000000000000000000000000060c182015260ca0190565b60405160208183030381529060405280519060200120836000013584602001356007547f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f876040016040516020016124319291906131ad565b604051602081830303815290604052805190602001207f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f8860e00160405160200161247d9291906131ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206124c56101a08a016101808b01612e98565b6040805160208101989098528701959095526060860193909352608085019190915260a084015260c083015273ffffffffffffffffffffffffffffffffffffffff1660e08201526101a08401356101008201526101200160405160208183030381529060405280519060200120612711565b60008060006125468585612759565b9092509050600081600481111561255f5761255f6131c1565b14801561259757508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806125a857506125a886868661279e565b925050505b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f7565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561194d816128fb565b606060ff83146126805761267983612970565b905061053a565b81805461268c906131f0565b80601f01602080910402602001604051908101604052809291908181526020018280546126b8906131f0565b80156127055780601f106126da57610100808354040283529160200191612705565b820191906000526020600020905b8154815290600101906020018083116126e857829003601f168201915b5050505050905061053a565b600061053a61271e6129af565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080825160410361278f5760208301516040840151606085015160001a61278387828585612aec565b94509450505050612797565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016127d592919061323d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161285e9190613191565b600060405180830381855afa9150503d8060008114612899576040519150601f19603f3d011682016040523d82523d6000602084013e61289e565b606091505b50915091508180156128b257506020815110155b80156125a8575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906128f0908301602090810190840161325e565b149695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061297d83612bdb565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015612a1557507f000000000000000000000000000000000000000000000000000000000000000046145b15612a3f57507f000000000000000000000000000000000000000000000000000000000000000090565b612ae7604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b235750600090506003612bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b77573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bcb57600060019250925050612bd2565b9150600090505b94509492505050565b600060ff8216601f81111561053a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461194d57600080fd5b60008060408385031215612c5157600080fd5b8235612c5c81612c1c565b946020939093013593505050565b60008060208385031215612c7d57600080fd5b823567ffffffffffffffff80821115612c9557600080fd5b818501915085601f830112612ca957600080fd5b813581811115612cb857600080fd5b8660208260051b8501011115612ccd57600080fd5b60209290920196919550909350505050565b600060208284031215612cf157600080fd5b5035919050565b60006102208284031215612d0b57600080fd5b50919050565b60008060006102608486031215612d2757600080fd5b8335612d3281612c1c565b925060208401359150612d488560408601612cf8565b90509250925092565b6000806102408385031215612d6557600080fd5b8235612d7081612c1c565b9150612d7f8460208501612cf8565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612dc057835183529284019291840191600101612da4565b50909695505050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461229157600080fd5b600060208284031215612e0e57600080fd5b6125ad82612dcc565b60005b83811015612e32578181015183820152602001612e1a565b50506000910152565b60008151808452612e53816020860160208601612e17565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125ad6020830184612e3b565b600060208284031215612eaa57600080fd5b81356125ad81612c1c565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152612ef260e084018a612e3b565b8381036040850152612f04818a612e3b565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015612f6557835183529284019291840191600101612f49565b50909c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612fe457612fe4612f77565b500490565b600082612ff857612ff8612f77565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808202811582820484141761053a5761053a612fa6565b6000806040838503121561305657600080fd5b825161306181612c1c565b6020939093015192949293505050565b60006020828403121561308357600080fd5b813560ff811681146125ad57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130c5576130c5612fa6565b5060010190565b8082018082111561053a5761053a612fa6565b6000602082840312156130f157600080fd5b815180151581146125ad57600080fd5b803561310c81612c1c565b73ffffffffffffffffffffffffffffffffffffffff908116835260208201359061313582612c1c565b1660208301527fffffffff0000000000000000000000000000000000000000000000000000000061316860408301612dcc565b16604083015260608181013590830152608090810135910152565b60a0810161053a8284613101565b600082516131a3818460208701612e17565b9190910192915050565b82815260c081016125ad6020830184613101565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181811c9082168061320457607f821691505b602082108103612d0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8281526040602082015260006132566040830184612e3b565b949350505050565b60006020828403121561327057600080fd5b505191905056fea2646970667358221220453155cc4b905ac166718dc20161a38d4b9a47bf6bdbe62594925918e5176b4164736f6c634300081700338b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80637ce78525116100ee578063b0e21e8a11610097578063b918161111610071578063b918161114610454578063cbf7c6c31461048a578063e30c3978146104aa578063f2fde38b146104c857600080fd5b8063b0e21e8a14610430578063b6549f7514610439578063b6a5d7de1461044157600080fd5b80639e93ad8e116100c85780639e93ad8e146103cb578063acb8cc49146103d4578063b0dd49431461041057600080fd5b80637ce785251461037f57806384b0196e146103925780638da5cb5b146103ad57600080fd5b806349b8a93211610150578063787dce3d1161012a578063787dce3d1461031b578063796f077b1461032e57806379ba50971461037757600080fd5b806349b8a932146102985780636e038752146102b8578063715018a61461031357600080fd5b80633644e515116101815780633644e5151461023d5780633c64191014610272578063485421051461028557600080fd5b806306a6ea74146101a85780631647795e146102055780632e34082314610228575b600080fd5b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b610218610213366004612c3e565b6104db565b60405190151581526020016101fc565b61023b610236366004612c6a565b610540565b005b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101fc565b61023b610280366004612cdf565b6105ad565b61023b610293366004612d11565b6105e9565b6102ab6102a6366004612d51565b610a2c565b6040516101fc9190612d88565b6102ee6102c6366004612dfc565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b61023b611809565b61023b610329366004612cdf565b61181d565b61036a6040518060400160405280600481526020017f535741500000000000000000000000000000000000000000000000000000000081525081565b6040516101fc9190612e85565b61023b61189b565b61023b61038d366004612e98565b611950565b61039a611a14565b6040516101fc9796959493929190612eb5565b60005473ffffffffffffffffffffffffffffffffffffffff166102ee565b61026461271081565b61036a6040518060400160405280600381526020017f342e32000000000000000000000000000000000000000000000000000000000081525081565b61026461041e366004612e98565b60066020526000908152604090205481565b61026460075481565b61023b611ab9565b61023b61044f366004612e98565b611b36565b6102ee610462366004612e98565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6008546102ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff166102ee565b61023b6104d6366004612e98565b611bfe565b6000806104ea61010084612fd5565b905060006104fa61010085612fe9565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020908152604080832095835294905292909220546001921c82169091149150505b92915050565b60005b818110156105a857600083838381811061055f5761055f612ffd565b9050602002013590506105723382611cae565b604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a350600101610543565b505050565b336000818152600660205260408082208490555183917f863123978d9b13946753a916c935c0688a01802440d3ffc668d04d2720c4e11091a350565b6105f281611d84565b6000610605610100830160e08401612e98565b73ffffffffffffffffffffffffffffffffffffffff161415801561064f575033610636610100830160e08401612e98565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610686576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106cf3361069a6060840160408501612e98565b6101608401356101408501356106b861012087016101008801612e98565b6106ca61014088016101208901612dfc565b611fed565b61070d6106e26060830160408401612e98565b8460c084013560a08501356106fd6080870160608801612e98565b6106ca60a0880160808901612dfc565b60006107216101a083016101808401612e98565b73ffffffffffffffffffffffffffffffffffffffff161461077057610770336107526101a084016101808501612e98565b6101a08401356101408501356106b861012087016101008801612e98565b600754600090612710906107899061016085013561302c565b6107939190612fd5565b905080156107e5576008546107e590339073ffffffffffffffffffffffffffffffffffffffff16836101408601356107d361012088016101008901612e98565b6106ca61014089016101208a01612dfc565b6107fd6107f86080840160608501612e98565b6121be565b15610933576000806108156080850160608601612e98565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08601356004820152610160860135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b39190613043565b909250905080156109305784811115610900576040517f9c08743a000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b61093033838361014088013561091e6101208a016101008b01612e98565b6106ca6101408b016101208c01612dfc565b50505b336109446060840160408501612e98565b73ffffffffffffffffffffffffffffffffffffffff1683357f182e847dc18073123e8aa17e204b9e3874caf71387e52fe3083ffb98716d3d6b60c086013560a08701356109976080890160608a01612e98565b6101608901356101408a01356109b56101208c016101008d01612e98565b6109c76101a08d016101808e01612e98565b60408051978852602088019690965273ffffffffffffffffffffffffffffffffffffffff9485169587019590955260608601929092526080850152811660a08401521660c08201526101a087013560e08201526101000160405180910390a450505050565b60408051600f808252610200820190925260609160009190602082016101e080368337019050509050600080610a686060860160408701612e98565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615610ac15773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b610b4781610ace87612296565b6101e088018035906102008a013590610aeb906101c08c01613071565b604051602001610b3393929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612537565b610b9a577f556e617574686f72697a656400000000000000000000000000000000000000008383610b7781613094565b945081518110610b8957610b89612ffd565b602002602001018181525050610c4f565b610ba58186356104db565b15610bd6577f4e6f6e6365416c726561647955736564000000000000000000000000000000008383610b7781613094565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205485351015610c4f577f4e6f6e6365546f6f4c6f770000000000000000000000000000000000000000008383610c3081613094565b945081518110610c4257610c42612ffd565b6020026020010181815250505b4285602001351015610ca6577f4f726465724578706972656400000000000000000000000000000000000000008383610c8781613094565b945081518110610c9957610c99612ffd565b6020026020010181815250505b6000610cb9610100870160e08801612e98565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d19575073ffffffffffffffffffffffffffffffffffffffff8616610d00610100870160e08801612e98565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d69577f53656e646572496e76616c6964000000000000000000000000000000000000008383610d4a81613094565b945081518110610d5c57610d5c612ffd565b6020026020010181815250505b6000600981610d8061014089016101208a01612dfc565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080610e1f577f53656e646572546f6b656e4b696e64556e6b6e6f776e000000000000000000008484610dfc81613094565b955081518110610e0e57610e0e612ffd565b602002602001018181525050611491565b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016610e7461014088016101208901612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ec7577f53656e646572546f6b656e496e76616c696400000000000000000000000000008484610dfc81613094565b60075460009061271090610ee0906101608a013561302c565b610eea9190612fd5565b905060006101a0880135610f03836101608b01356130cc565b610f0d91906130cc565b9050610f226107f860808a0160608b01612e98565b15610fe9576000610f3960808a0160608b01612e98565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08b013560048201526101608b0135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190613043565b9150610fe5905081836130cc565b9150505b6040805160a0810190915273ffffffffffffffffffffffffffffffffffffffff8a168152600090602081016110266101208c016101008d01612e98565b73ffffffffffffffffffffffffffffffffffffffff1681526020016110536101408c016101208d01612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001681526101408b01356020820152604001839052905073ffffffffffffffffffffffffffffffffffffffff8a161561130257604080517f3170f63d000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff00000000000000000000000000000000000000000000000000000000166044820152606083015160648201526080830151608482015290851690633170f63d9060a401602060405180830381865afa158015611161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118591906130df565b6111d4577f53656e646572416c6c6f77616e63654c6f77000000000000000000000000000087876111b581613094565b9850815181106111c7576111c7612ffd565b6020026020010181815250505b604080517fd1190df9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff0000000000000000000000000000000000000000000000000000000016604482015260608301516064820152608083015160848201529085169063d1190df99060a401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906130df565b611302577f53656e64657242616c616e63654c6f770000000000000000000000000000000087876112e381613094565b9850815181106112f5576112f5612ffd565b6020026020010181815250505b604080517f40944de9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff000000000000000000000000000000000000000000000000000000001660448201526060830151606482015260808301516084820152908516906340944de99060a401602060405180830381865afa1580156113bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e191906130df565b611430577f416d6f756e744f724944496e76616c6964000000000000000000000000000000878761141181613094565b98508151811061142357611423612ffd565b6020026020010181815250505b6101a08901356101608a0135101561148d577f416666696c69617465416d6f756e74496e76616c696400000000000000000000878761146e81613094565b98508151811061148057611480612ffd565b6020026020010181815250505b5050505b60006009816114a660a08a0160808b01612dfc565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080611545577f5369676e6572546f6b656e4b696e64556e6b6e6f776e00000000000000000000858561152281613094565b96508151811061153457611534612ffd565b6020026020010181815250506117f1565b604080517f3170f63d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691633170f63d91611599918b0190600401613183565b602060405180830381865afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da91906130df565b611629577f5369676e6572416c6c6f77616e63654c6f770000000000000000000000000000858561160a81613094565b96508151811061161c5761161c612ffd565b6020026020010181815250505b604080517fd1190df900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169163d1190df99161167d918b0190600401613183565b602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be91906130df565b61170d577f5369676e657242616c616e63654c6f770000000000000000000000000000000085856116ee81613094565b96508151811061170057611700612ffd565b6020026020010181815250505b604080517f40944de900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316916340944de991611761918b0190600401613183565b602060405180830381865afa15801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a291906130df565b6117f1577f416d6f756e744f724944496e76616c696400000000000000000000000000000085856117d281613094565b9650815181106117e4576117e4612ffd565b6020026020010181815250505b845184146117fd578385525b50929695505050505050565b6118116125b4565b61181b6000612635565b565b6118256125b4565b6127108110611860576040517f52dadcf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b19060200160405180910390a150565b600154339073ffffffffffffffffffffffffffffffffffffffff168114611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016108f7565b61194d81612635565b50565b6119586125b4565b73ffffffffffffffffffffffffffffffffffffffff81166119a5576040517f6b8df36300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b600060608082808083611a487f00000000000000000000000000000000000000000000000000000000000000006002612666565b611a737f00000000000000000000000000000000000000000000000000000000000000006003612666565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff8116611b83576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b611c066125b4565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611c6960005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000611cbc61010083612fd5565b90506000611ccc61010084612fe9565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460209081526040808320868452909152902054909150600181831c81169003611d42576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018590526024016108f7565b73ffffffffffffffffffffffffffffffffffffffff909416600090815260046020908152604080832094835293905291909120600190911b9290921790915550565b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016611dd961014083016101208401612dfc565b7fffffffff000000000000000000000000000000000000000000000000000000001614611e32576040517fd0bd721a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a08101356101608201351015611e76576040517f3b71bbca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e886060830160408401612e98565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615611ee15773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b611f0b81611eee84612296565b6101e0850180359061020087013590610aeb906101c08901613071565b611f41576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c818335611cae565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205482351015611fac576040517fd24d82a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42826020013511611fe9576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff168061206c576040517f33c8207c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905285811660a4808401919091528351808403909101815260c490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47338bc300000000000000000000000000000000000000000000000000000000179052915160009284169161211991613191565b600060405180830381855af49150503d8060008114612154576040519150601f19603f3d011682016040523d82523d6000602084013e612159565b606091505b50509050806121b4576040517f523c3aaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a166004830152881660248201526044016108f7565b5050505050505050565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f2a55205a00000000000000000000000000000000000000000000000000000000600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906301ffc9a790602401602060405180830381865afa925050508015612285575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612282918101906130df565b60015b61053a57506000919050565b919050565b600061053a6040516020016123d8907f4f726465722875696e74323536206e6f6e63652c75696e74323536206578706981527f72792c75696e743235362070726f746f636f6c4665652c50617274792073696760208201527f6e65722c50617274792073656e6465722c6164647265737320616666696c696160408201527f746557616c6c65742c75696e7432353620616666696c69617465416d6f756e7460608201527f290000000000000000000000000000000000000000000000000000000000000060808201527f506172747928616464726573732077616c6c65742c6164647265737320746f6b60818201527f656e2c627974657334206b696e642c75696e743235362069642c75696e74323560a18201527f3620616d6f756e7429000000000000000000000000000000000000000000000060c182015260ca0190565b60405160208183030381529060405280519060200120836000013584602001356007547f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f876040016040516020016124319291906131ad565b604051602081830303815290604052805190602001207f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f8860e00160405160200161247d9291906131ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206124c56101a08a016101808b01612e98565b6040805160208101989098528701959095526060860193909352608085019190915260a084015260c083015273ffffffffffffffffffffffffffffffffffffffff1660e08201526101a08401356101008201526101200160405160208183030381529060405280519060200120612711565b60008060006125468585612759565b9092509050600081600481111561255f5761255f6131c1565b14801561259757508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806125a857506125a886868661279e565b925050505b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f7565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561194d816128fb565b606060ff83146126805761267983612970565b905061053a565b81805461268c906131f0565b80601f01602080910402602001604051908101604052809291908181526020018280546126b8906131f0565b80156127055780601f106126da57610100808354040283529160200191612705565b820191906000526020600020905b8154815290600101906020018083116126e857829003601f168201915b5050505050905061053a565b600061053a61271e6129af565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080825160410361278f5760208301516040840151606085015160001a61278387828585612aec565b94509450505050612797565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b86866040516024016127d592919061323d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161285e9190613191565b600060405180830381855afa9150503d8060008114612899576040519150601f19603f3d011682016040523d82523d6000602084013e61289e565b606091505b50915091508180156128b257506020815110155b80156125a8575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906128f0908301602090810190840161325e565b149695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061297d83612bdb565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015612a1557507f000000000000000000000000000000000000000000000000000000000000000046145b15612a3f57507f000000000000000000000000000000000000000000000000000000000000000090565b612ae7604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b235750600090506003612bd2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b77573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bcb57600060019250925050612bd2565b9150600090505b94509492505050565b600060ff8216601f81111561053a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461194d57600080fd5b60008060408385031215612c5157600080fd5b8235612c5c81612c1c565b946020939093013593505050565b60008060208385031215612c7d57600080fd5b823567ffffffffffffffff80821115612c9557600080fd5b818501915085601f830112612ca957600080fd5b813581811115612cb857600080fd5b8660208260051b8501011115612ccd57600080fd5b60209290920196919550909350505050565b600060208284031215612cf157600080fd5b5035919050565b60006102208284031215612d0b57600080fd5b50919050565b60008060006102608486031215612d2757600080fd5b8335612d3281612c1c565b925060208401359150612d488560408601612cf8565b90509250925092565b6000806102408385031215612d6557600080fd5b8235612d7081612c1c565b9150612d7f8460208501612cf8565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612dc057835183529284019291840191600101612da4565b50909695505050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461229157600080fd5b600060208284031215612e0e57600080fd5b6125ad82612dcc565b60005b83811015612e32578181015183820152602001612e1a565b50506000910152565b60008151808452612e53816020860160208601612e17565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125ad6020830184612e3b565b600060208284031215612eaa57600080fd5b81356125ad81612c1c565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152612ef260e084018a612e3b565b8381036040850152612f04818a612e3b565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015612f6557835183529284019291840191600101612f49565b50909c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612fe457612fe4612f77565b500490565b600082612ff857612ff8612f77565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808202811582820484141761053a5761053a612fa6565b6000806040838503121561305657600080fd5b825161306181612c1c565b6020939093015192949293505050565b60006020828403121561308357600080fd5b813560ff811681146125ad57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130c5576130c5612fa6565b5060010190565b8082018082111561053a5761053a612fa6565b6000602082840312156130f157600080fd5b815180151581146125ad57600080fd5b803561310c81612c1c565b73ffffffffffffffffffffffffffffffffffffffff908116835260208201359061313582612c1c565b1660208301527fffffffff0000000000000000000000000000000000000000000000000000000061316860408301612dcc565b16604083015260608181013590830152608090810135910152565b60a0810161053a8284613101565b600082516131a3818460208701612e17565b9190910192915050565b82815260c081016125ad6020830184613101565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181811c9082168061320457607f821691505b602082108103612d0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8281526040602082015260006132566040830184612e3b565b949350505050565b60006020828403121561327057600080fd5b505191905056fea2646970667358221220453155cc4b905ac166718dc20161a38d4b9a47bf6bdbe62594925918e5176b4164736f6c63430008170033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
